优化算法基本上都是在反向传播算出梯度之后进行改进的,因为反向传播算法是一个递归形式,通过一层层的向后求出传播误差即可。

计算Loss函数的目的:**计算出当前神经网络建模出来的输出数据与理想数据之间的距离,根据反向传播算法可以不断更新网络中的参数使loss函数不断下降,使输出数据更加理想。

那么如何根据一个网络的loss来更新参数,即如何更新网络节点中的权重w和偏差b的值?

神经网络中的参数说明:

误差反向传播算法 误差反向传播算法公式_损失函数


误差反向传播算法 误差反向传播算法公式_损失函数_02

表示神经网络中第(l-1)层第k个节点到l层中第j个节点之间的权重。(例如图中的权重)

误差反向传播算法 误差反向传播算法公式_损失函数_03


误差反向传播算法 误差反向传播算法公式_激活函数_04

表示第l层网络在第j个节点处的偏差。(如图中所示)

故该节点可以输出为:

误差反向传播算法 误差反向传播算法公式_激活函数_05


神经网络输出后会经过一个激活函数,用σ表示,则经过激活函数输出为:

误差反向传播算法 误差反向传播算法公式_神经网络_06


通过符号

误差反向传播算法 误差反向传播算法公式_神经网络_07

可以对神经网络里面每一个数据准确的表示。

**定义损失函数C:**反向传播就是求∂C/∂w和∂C/∂b,然后将这个值和对应的w,b进行相减就可以实现一次参数的更新。为什么这样的操作可以优化网络,减小loss值呢?

来源于导数概念和速度相关,∂C/∂w和∂C/∂b就是C相对于w和v变化的速度,∂C/∂w的绝对值越大,表示w对C的值影响越大。如果期望C变小,w应该对应减小,但是对于w具体应该减多少并没有确定答案。这里通过变化的速度和学习率相乘作为一个减少值,经多轮迭代,期望c达到最小点。此时无论是局部最小还是全局最小,周围一定是平滑的,所以∂C/∂w和∂C/∂b会趋近于0,参数停止更新。

误差反向传播算法 误差反向传播算法公式_激活函数_08

**求导:**我们想要求得∂C/∂w和∂C/∂b的值,即对C影响速率的值。需要找到一个中间变量,因为:

误差反向传播算法 误差反向传播算法公式_BP算法_09


定义:

误差反向传播算法 误差反向传播算法公式_误差反向传播算法_10


理用链式求导法则可以求出:

误差反向传播算法 误差反向传播算法公式_损失函数_11


同理:

误差反向传播算法 误差反向传播算法公式_神经网络_12


通过媒介

误差反向传播算法 误差反向传播算法公式_误差反向传播算法_13

很容易求出∂C/∂w和∂C/∂b。

这里

误差反向传播算法 误差反向传播算法公式_神经网络_14

就是

误差反向传播算法 误差反向传播算法公式_损失函数_15

对于C的影响大小(联想导数和速率的关系)。其中

误差反向传播算法 误差反向传播算法公式_误差反向传播算法_16

是第l层的第j个神经元未经过激活函数前的输出,所以

误差反向传播算法 误差反向传播算法公式_BP算法_17

可以理解为网络中第l层第j个神经元对loss函数的影响。

如何求得

误差反向传播算法 误差反向传播算法公式_激活函数_18

的值?

通过递归方式,如果知道

误差反向传播算法 误差反向传播算法公式_激活函数_19


误差反向传播算法 误差反向传播算法公式_误差反向传播算法_20

之间的关系,就可以推得整个网络的每个节

误差反向传播算法 误差反向传播算法公式_损失函数_21

点的值。1.求得

误差反向传播算法 误差反向传播算法公式_误差反向传播算法_22

误差反向传播算法 误差反向传播算法公式_激活函数_23

之间的关系:

误差反向传播算法 误差反向传播算法公式_激活函数_24


误差反向传播算法 误差反向传播算法公式_BP算法_25


所以:

误差反向传播算法 误差反向传播算法公式_激活函数_26


带入上式可得:

误差反向传播算法 误差反向传播算法公式_损失函数_27



误差反向传播算法 误差反向传播算法公式_激活函数_28


误差反向传播算法 误差反向传播算法公式_激活函数_29

之间的关系:

误差反向传播算法 误差反向传播算法公式_损失函数_30

(应把a[l,j]修正为a[l,j]对z[l,j]的偏导)

理解起来就是网络中前一层的某一个神经元对于loss的影响与该层后一层所有的神经元对于loss的影响、该神经元的输出大小、该神经元与后一层神经元连接的权重有关。2.假设最后一层网络是L,最后一层如何计算:

根据通用链式法则可得:

误差反向传播算法 误差反向传播算法公式_激活函数_31


这里需要注意的是最后一层的激活函数是哪一种。最后一层激活函数在计算某一个神经元输出时可能会结合其他节点的输出来计算,比如softmax激活函数,输出是一个概率值[0,1]。

现在考虑两个具体的损失函数,并且采用之前定义的均方误差损失函数:

误差反向传播算法 误差反向传播算法公式_损失函数_32


·sigmoid损失函数:

误差反向传播算法 误差反向传播算法公式_误差反向传播算法_33


误差反向传播算法 误差反向传播算法公式_BP算法_34


求导结果:

误差反向传播算法 误差反向传播算法公式_误差反向传播算法_35


因为sigmoid输出的值仅与输入的x值有关,所以

误差反向传播算法 误差反向传播算法公式_神经网络_36

当k≠j时为0,所以:

误差反向传播算法 误差反向传播算法公式_误差反向传播算法_37


·softmax损失函数:

误差反向传播算法 误差反向传播算法公式_激活函数_38


函数形式:输出也是[0,1]的值,不过需要依赖最后一层所有的数来计算分母

求导得:

误差反向传播算法 误差反向传播算法公式_损失函数_39


所以

误差反向传播算法 误差反向传播算法公式_损失函数_40


BP算法总结:

根据上面,BP推导有三部曲,先求出

误差反向传播算法 误差反向传播算法公式_激活函数_41

,再根据

误差反向传播算法 误差反向传播算法公式_损失函数_42

分别求出

误差反向传播算法 误差反向传播算法公式_神经网络_43

。总结公式如下:

误差反向传播算法 误差反向传播算法公式_误差反向传播算法_44


(应把a[l,j]修正为a[l,j]对z[l,j]的偏导)

启动上面反传的导火索是最后一层的

误差反向传播算法 误差反向传播算法公式_误差反向传播算法_45

值,计算公式为:

误差反向传播算法 误差反向传播算法公式_神经网络_46