深度学习-前向传播和反向传播

在求出前向传播和反向传播前要先确定参数和输入输出符号的表达形式

最普通的DNN就可以看做是一个多层感知机MLP,感知机的输出其实就是对输入的加权求和:,再经过一个非线性激活函数

首先来定义权值矩阵W,按照下图规则,表示的是第3层第2个神经元和第2层第4个神经元之间连线(连线就代表权重,可以看成是的省略写法)。那么为什么不写成呢,形式上是允许的,但是如果这样写的话,第3层神经元的输入就要通过来计算,而前者只需要计算,省略了矩阵转置的额外工作量。
在这里插入图片描述

偏置项b的定义也是类似,表示第2层第3个神经元的偏置。
在这里插入图片描述

再定义分别表示第i层第j个神经元的输出和输入,并假设是我们选择的激活函数。
在这里插入图片描述
前向传播过程
三层DNN,输入层-隐藏层-输出层
对于第2层第1个节点的输出有:
在这里插入图片描述
对于第3层第1个节点的输出有:
在这里插入图片描述
一般化的,假设l-1层有m个神经元,对于有:
在这里插入图片描述

也就是第l层第j个神经元的输入为与它相连的上一层每个神经元的输出加权求和后加上该神经元对应的偏置,该神经元所做的工作只是把这个结果做一个非线性激活。

反向传播过程
当通过前向传播得到由任意一组随机参数W和b计算出的网络预测结果后,我们可以利用损失函数相对于每个参数的梯度来对他们进行修正。事实上神经网络的训练就是这样一个不停的前向-反向传播的过程,直到网络的预测能力达到我们的预期。

假设选择最简单的均方误差和作为损失函数:
在这里插入图片描述
下面就根据这个损失函数更新每一层的w,b

根据前向传播的公式,输出层L的输出
在这里插入图片描述
带入到损失函数中,有
在这里插入图片描述
根据复合函数链式求导法则,L层参数的梯度容易求得:
在这里插入图片描述
在这里插入图片描述
显然,两式有一部分是重叠的,将这部分记做在这里插入图片描述在这里插入图片描述
这一规律同样适用在非输出层的隐藏层L-1,L-2,…l,…1,我们只需要求出损失函数相对l层非激活输出的导数,再根据前向传播公式在这里插入图片描述便可以轻易的求得
在这里插入图片描述
同样,根据链式求导法则,
在这里插入图片描述
在这里插入图片描述

至此,问题的关键转化成如何求解在这里插入图片描述,既然是反向传播,在求第l层参数时,在这里插入图片描述都是已知的,还是根据链式求导法则:
在这里插入图片描述

显然,问题的关键在于求解在这里插入图片描述,再根据前向传播公式求解。

链接:https://www.jianshu.com/p/f69ba3bebd27