误差逆传播(反向传播,BP算法)
引言E
误差逆传播算法(Error BackPropagation,BP)是神经网络中常用的传播算法(又叫做反向传播)。BP算法可以应用于多层前馈神经网络(FFN)以及其他类型的网络,如训练递归神经网络。通常所说的“BP网络”一般是指用BP算法训练的多层前馈神经网络。
反向传播从字面意思理解与前向传播互相对应。在简单的神经网络中,反向传播可以理解为最优化损失函数过程,求解每个参与运算的梯度的方法。前向传播可以理解为,从输入层到隐藏层再到输出层的过程,前向传播过程往往是设定模型的过程,也可以理解为是在设计方程进行求解。
那么其实BP算法的过程就可以分为:前向传播(求误差),反向传播(误差回传)。
前向传播为反向传播准备好要用的数值,反向传播本质上是一种高效求梯度的方法。
原理
前向传播
y = w ∗ x + b y = w*x+b y=w∗x+b可以用下面的图来表示,从左边开始依次代入数据,最终计算出y的值,就是前向传播的结果。
例如,赋值x=-2,y=5,b=-4,那么从左侧开始进行数据流动,最后计算可以得到y=-14,而其中x * y = -10。
前向传播的作用是为反向传播准备好要用的数值。
反向传播
反向传播算法,是根据损失函数,求出损失函数关于每一层的权值及偏置项的偏导数,也称为梯度,用该值更新初始的权值和偏置项,一直更新到损失函数取得最小值或是设置的迭代次数完成为止。以此来计算神经网络中的最佳的参数。
反向传播会用到链式法则(Chain Rule),通过链式法则来求出每一层的梯度。
设输入层数据为X,输入层到隐藏层的参数为w、 b 1 b_1 b1,隐藏层到输出层的参数为 v , b 2 v,b_2 v,b2,激活函数使用 g 1 g_1 g1, g 2 g_2 g2,那么就有神经网络模型:
输入层到隐藏层:
n e t 1 = w T x + b 1 , h = g 1 ( n e t 1 ) net_1 = w^Tx+b_1,h=g_1(net_1) net1=wTx+b1,h=g1(net1)
隐藏层到输出层:
n e t 2 = v T h + b 2 , y ^ = g 2 ( n e t 2 ) net_2 = v^Th+b_2,\hat y=g_2(net_2) net2=vTh+b2,y^=g2(net2)
模型:
y ^ = g 2 ( n e t 2 ) = g 2 ( v T g 1 ( n e t 1 ) + b 2 ) = g 2 ( v T g 1 ( w T x + b 1 ) + b 2 ) \hat y = g_2(net_2) = g_2(v^Tg_1(net_1)+b_2) = g_2(v^Tg_1(w^Tx+b_1)+b_2) y^=g2(net2)=g2(vTg1(net1)+b2)=g2(vTg1(wTx+b1)+b2)
损失函数为:
E ( θ ) = 1 2 ∑ i = 1 2 ( y i − y ^ i ) 2 E(\theta)=\frac{1}{2}\sum_{i=1}^2(y_i-\hat y_i)^2 E(θ)=2