本文主要为大家解释一下神经网络的反向传播,为神经网络的梯度消失和梯度爆炸问题做一个铺垫。
目录
一、Sigmoid函数
本文后面所用的神经网络激活函数全部将会是sigmoid函数,它可以将变量映射到0,1之间。它的表达式为:
以及sigmoid的导函数为:
曲线为
二、反向传播
首先声明一下,为了简化公式的推导,所有的神经元会省略掉截距b。
已知:输入 输出 第一层的权重
第二层的权重为,损失函数为
注:损失函数的中后面减的一部分是神经网络的输出(省略了常数项b),S(.)表示激活函数sigmoid
2.1前向传播
上面的结果就是前向传播输出的结果,可能有人会问向量是怎么激活的,其实很简单,比如最后一步:S(0.33015)=0.581796
S(0.25397)=0.563155,就是这样个算个的就可以了。
2.2误差计算
本例中损失函数采用均方误差。
2.3反向传播
对更新权重:
上面的公式推导看上去十分的庞大,但是千万别被它给吓倒,其实就是很简单的链式求导,另外在最后一步直接使用了前面sigmoid的导函数,可以参见第一部分,是一个元素全为‘1’的向量。
同理可以得到:
我们将我们的所有数值代进去可得
注:所有的运算中间过程省略,由于本人在运算时存在位数保留问题,所以结果可能会存在偏差。
2.4权重更新
本例中学习率采用=0.5,梯度下降法。更新公式为:
那么有:
2.5误差再次计算
通过一次反向传播之后,误差顺利减小。
2.6权重更新的标量计算方法
在这里就不再一步一步推导公式,推公式确实比较麻烦,给大家一个用标量计算的链接:https://www.cnblogs.com/charlotte77/p/5629865.html
三、总结
反向传播其实就是一个以减小误差为目的,以各种梯度优化方法为手段的不断迭代的一个过程。本文只是一个非常简单的例子,希望可以帮助大家理解它,有了这个基础,接下来,我会为大家介绍梯度消失和梯度爆炸,下篇见。