反向传播算法推导过程

原理部分参考李宏毅机器学习PPT,以下推导过程详细且易理解。

参考博客

1. 变量定义

                                                        
 
        上图是一个三层人工神经网络,layer1至layer3分别是输入层、隐藏层和输出层。如图,先定义一些变量:
         表示第 层的第 个神经元连接到第 层的第 个神经元的权重;
         表示第 层的第 个神经元的偏置;
         表示第 层的第 个神经元的输入,即:
                                                                    
         表示第 层的第 个神经元的输出,即:
                                                                    
        其中 表示激活函数。

  2. 代价函数
        代价函数被用来计算ANN输出值与实际值之间的误差。常用的代价函数是二次代价函数(Quadratic cost function):
                                                    
        其中, 表示输入的样本, 表示实际的分类, 表示预测的输出, 表示神经网络的最大层数。

  3. 公式及其推导
        本节将介绍反向传播算法用到的4个公式,并进行推导。 如果不想了解公式推导过程,请直接看第4节的算法步骤。
        首先,将第 层第 个神经元中产生的错误(即实际值与预测值之间的误差)定义为:

                                                                
 
 
        本文将以 一个输入样本 为例进行说明,此时代价函数表示为:
                                                            
 
公式1(计算最后一层神经网络产生的错误):
 
                                                                    
 
        其中, 表示Hadamard乘积,用于矩阵或向量之间点对点的乘法运算。公式1的推导过程如下:
                                                        
 
 
公式2(由后往前,计算每一层神经网络产生的错误):
 
                                                                
 
        推导过程:
                                                
 
 
公式3(计算权重的梯度):
 
                                                                        
 
        推导过程:
                                                
 
 
公式4(计算偏置的梯度):
 
                                                                                
 
        推导过程:
                                                    
 
 
4. 反向传播算法伪代码
 
  • 输入训练集
 
  • 对于训练集中的每个样本x,设置输入层(Input layer)对应的激活值
    • 前向传播:
                                 , 
  • 计算输出层产生的错误:
                                
  • 反向传播错误:
                                
 
  • 使用梯度下降(gradient descent),训练参数:
 
                                                     
 
                                                    
RNN(循环神经网络)是一种具有循环连接的神经网络,能够对序列数据进行处理。反向传播算法是一种用于训练神经网络的方法。下面我们来推导一下在Matlab中如何使用反向传播算法来训练RNN。 为了简化计算,我们假设RNN只有一个隐藏层。记输入层的维度为n,隐藏层的大小为m,输出层的大小为k。 首先,我们初始化各层之间的权重矩阵W和偏差向量b,以及对应的偏导数矩阵dW和偏导数向量db。我们还需要定义一个学习率alpha来控制每次更新权重和偏差的大小。 接下来,我们通过前向传播计算来确定各个层的输出。假设我们有一个样本序列X,可以将其表示为一个矩阵,每一列代表一个样本,共有T个时间步。我们同时定义一个隐藏层状态矩阵H,其大小为m x (T+1),其中第一列为初始隐藏状态h0。 在每个时间步t,我们计算隐藏层状态ht和输出层激活值at的值。隐藏层状态的计算公式为: ht = tanh(Wxh * Xt + Whh * ht-1 + bh), 其中Xt是输入矩阵X的第t列,*表示矩阵乘法,tanh是激活函数。 输出层激活值的计算公式为: at = Wo * ht + bo, 其中Wo是隐藏层到输出层的权重矩阵,bo是输出层的偏差向量。 计算好各个时间步的隐藏层状态和输出层激活值后,我们可以将输出层激活值传入softmax函数进行分类预测。 接下来,我们使用反向传播算法来计算各个参数的偏导数,以便进行权重和偏差的更新。首先,我们计算输出层误差deltao: deltao = softmax_backward(Y, a),其中Y为真实标签。 然后,利用deltao计算隐藏层误差deltah: deltah = Wo' * deltao .* (1 - ht.^2),其中Wo'表示Wo的转置。 最后,我们可以根据deltah计算W的偏导数: dWxh = deltah * Xt', dWhh = deltah * ht-1', dbh = deltah * ones(T, 1)。 将上述偏导数累加,然后根据学习率alpha进行更新: Wxh = Wxh - alpha * dWxh, Whh = Whh - alpha * dWhh, bh = bh - alpha * dbh。 同样,我们还可以根据deltao计算Wo的偏导数: dWo = deltao * ht', dbo = deltao * ones(T, 1)。 然后进行更新: Wo = Wo - alpha * dWo, bo = bo - alpha * dbo。 以上就是在Matlab中使用反向传播算法来训练RNN的推导过程
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值