反向传播

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

NN

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

反向传播的目标是对权重进行优化以减小损失

前向传播:

前向传播也就是推导过程, 一般网络训练好后, 只需要进行以此前向传播就可以得到预测结果, 这些预测结果是根据输入以及网络权重和激活函数得到的, 这和LR很像, 每一个隐藏层的神经元, 都存在一个激活函数
前向传播比较容易理解

计算误差

现在经过前向传播之后, 我们来到了输出层的神经元, 那么输出结果和我们预想的是否一致? 需要一个评价指标, 使用平方误差和来计算总误差:

其中, 代表输出层的第个神经元, 意味着有个类, 我们看到, 它是因为后面求偏导的时候, 为的是可以消除平方, 这个不影响模型参数的求解

BP

反向传播的目标是:通过更新网络中的每一个权重,使得最终的输出接近于groundtruth,这样就得到整个网络的误差作为一个整体进行了最小化。
BP以gradient decent为策略. 以目标的负梯度方向对参数进行调整, 反向都是从最后的一层开始的:

这个公式也有这样的含义: 的改变, 可以多大程度上影响, 其中 分别是两个相连接的神经元

我们来看输出层, 先看,想知道多大程度上可以影响到总误差? 也就是,通过链式求导法则:

image.png

我们可以看到, 先影响到最后这个神经元的输入, 再影响到其输出值, 然后影响到
那么我们可以总结出一个公式:

代表第次反向传播
显然, 根据上图的例子, 第个神经元的输入值可以被表示为:

其中就是h层神经元的输出,那么显然:

Sigmoid函数有个特性:

那么. 对于剩下的一部分, 我们令:

对于第一项:
, 把代入求偏导即可
对于第二项, 根据具Sigmoid公特性式:

最后得到一个总的公式:

最后我们可以得BP公式:

为了减小误差. 我们将上一个得值减去当前计算得到得值:

这就是新得更新方式

隐层权重更新

image.png

隐藏层权重的更新方式与输出层的类似, 不过有一点不同, 就是每个隐藏层神经元的输出对最终的输出都是有贡献的, 既影响也影响, 因此, 要考虑到对两个输出的影响
在 更新的时候, 路径是 out(o1)->net(o1)->, 而在更新的时候, 路径是 out(h1)->net(h1)->, 而此时我们可以忽略掉最后一层输出层, out(h1)会接受来自两个误差 E(o1)和E(o2), 这两个我们都需要计算
先计算
可以看到.

对于:

此时,

总结:

BP是对链式法则的巧妙运用,反向传播仅仅指反向计算梯度的方法. 它从最后一个输出的神经元开始, 通过求误差和当前神经元的偏导得到该层的权重更新

你可能感兴趣的:(反向传播)