反向传播(英語:Backpropagation,缩写为BP)是“误差反向传播”的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。该方法对网络中所有权重计算损失函数的梯度。这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。
基本的神经网络结构:

神经网络, 一般所有的权重都是需要初始化的, 初始化方法各异

反向传播的目标是对权重进行优化以减小损失
前向传播:
前向传播也就是推导过程, 一般网络训练好后, 只需要进行以此前向传播就可以得到预测结果, 这些预测结果是根据输入以及网络权重和激活函数得到的, 这和LR很像, 每一个隐藏层的神经元, 都存在一个激活函数
前向传播比较容易理解
计算误差
现在经过前向传播之后, 我们来到了输出层的神经元, 那么输出结果和我们预想的是否一致? 需要一个评价指标, 使用平方误差和来计算总误差:
其中, 代表输出层的第
个神经元, 意味着有
个类, 我们看到
, 它是因为后面求偏导的时候, 为的是可以消除平方, 这个不影响模型参数的求解
BP
反向传播的目标是:通过更新网络中的每一个权重,使得最终的输出接近于groundtruth,这样就得到整个网络的误差作为一个整体进行了最小化。
BP以gradient decent为策略. 以目标的负梯度方向对参数进行调整, 反向都是从最后的一层开始的:
这个公式也有这样的含义: 的改变, 可以多大程度上影响
, 其中
分别是两个相连接的神经元
我们来看输出层, 先看,想知道
多大程度上可以影响到总误差? 也就是
,通过链式求导法则:

我们可以看到, 先影响到最后这个神经元的输入, 再影响到其输出值, 然后影响到
那么我们可以总结出一个公式:
代表第次反向传播
显然, 根据上图的例子, 第个神经元的输入值可以被表示为:
其中就是h层神经元的输出,那么显然:
Sigmoid函数有个特性:
那么. 对于剩下的一部分, 我们令:
对于第一项:
, 把代入求偏导即可
对于第二项, 根据具Sigmoid公特性式:
最后得到一个总的公式:
最后我们可以得BP公式:
为了减小误差. 我们将上一个得值减去当前计算得到得值:
这就是新得更新方式
隐层权重更新

隐藏层权重的更新方式与输出层的类似, 不过有一点不同, 就是每个隐藏层神经元的输出对最终的输出都是有贡献的, 既影响
也影响
, 因此,
要考虑到对两个输出的影响
在 更新的时候, 路径是 out(o1)->net(o1)->
, 而在更新
的时候, 路径是 out(h1)->net(h1)->
, 而此时我们可以忽略掉最后一层输出层, out(h1)会接受来自两个误差 E(o1)和E(o2), 这两个我们都需要计算
先计算
可以看到.
对于:
此时,
总结:
BP是对链式法则的巧妙运用,反向传播仅仅指反向计算梯度的方法. 它从最后一个输出的神经元开始, 通过求误差和当前神经元的偏导得到该层的权重更新
网友评论