本文简单地以下图所示的三层神经网络为例(没有偏置节点),介绍神经网络的前向和反向传播过程:
图中参数含义如下:
X 1 , X 2 X_1,X_2 X1,X2:网络输入参数。
W X 1 1 , W X 1 2 , W X 1 3 , W X 2 1 , W X 2 2 , W X 2 3 W_{X_11}, W_{X_12}, W_{X_13}, W_{X_21}, W_{X_22}, W_{X_23} WX11,WX12,WX13,WX21,WX22,WX23:输入层权重参数。
H 1 , H 2 , H 3 H_1, H_2, H_3 H1,H2,H3:隐含层对输入参数的线性响应。
Y 1 , Y 2 , Y 3 Y_1, Y_2, Y_3 Y1,Y2,Y3:经过非线性激活的隐层输出。
W Y 1 1 , W Y 1 2 , W Y 2 1 , W Y 2 2 , W Y 3 1 , W Y 3 2 W_{Y_11}, W_{Y_12}, W_{Y_21}, W_{Y_22}, W_{Y_31}, W_{Y_32} WY11,WY12,WY21,WY22,WY31,WY32:输出层权重参数。
R 1 , R 2 R_1, R_2 R1,R2:输出层对隐层的线性响应。
O 1 , O 2 O_1, O_2 O1,O2:经过非线性激活的网络输出。
前向传播
前向传播计算相对简单,按照如下公式逐步计算即可:
注:上式中的 s i g m o i d sigmoid sigmoid为激活函数,本文假设全部使用 s i g m o i d sigmoid sigmoid作为激活函数。
为了更加直观,同时方便计算,我们用矩阵表示上述过程:
反向传播
误差及其反向传播
-
误差的衡量:本文选取 M S E MSE MSE(均方误差)来衡量网络误差:
-
误差的反向传播:误差的反向传播遵循按权重分配原则,因此, E O 1 , E O 2 E_{O_1},E_{O_2} EO1,EO2误差全部分别由 R 1 , R 2 R_1, R_2 R1,R2产生,即 E O 1 E_{O_1} EO1也是神经元 F F F的误差。各神经元的误差计算如下:
E X 1 E_{X_1} EX1和 E X 2 E_{X_2} EX2的计算和上述方法相同,这里不再赘述。
上述计算过程用矩阵表示为:
上述计算较为繁琐,可以在不破坏权重比例的情况下,将其简化为如下形式:
可以发现,上述权重矩阵,就是前向传播时权重矩阵的转置,即反向误差传播形式如下:
E = W T × E E = W^T\times{E} E=WT×E
反向权重更新
-
链式求导
由前向传播的计算式和上面的误差计算式 ( 1 ) , ( 2 ) , ( 3 ) (1), (2), (3) (1),(2),(3)可得:
依次类推,可以计算 E O E_O EO对所有权重 W W W的偏导。
-
权重更新
从链式求导过程可以看到,求导过程中,大量计算是重复的,因此,在更新 W Y 1 1 W_{Y_11} WY11和 W X 1 1 W_{X_11} WX11的过程中,可以将重复计算进行折叠,只计算一次,简化后如下:
其中 σ ′ \sigma{'} σ′是当前神经元的输出对输入的偏导(梯度)。按照上述过程,可以逐层计算出误差对各个权重 W W W的偏导。上述过程在《神经网络与深度学习》中总结为反向传播4大公式:
图中符号含义如下:
最后是权重更新,权重更新首先需要选择一个更新算法,这里简单使用随机梯度下降法(SGD)。将上述偏导代入SGD得到:
W Y 1 1 = W Y 1 1 − η ∂ E O ∂ W Y 1 1 = W Y 1 1 − η ∇ O 1 E O ⊙ σ ′ ( R 1 ) ∗ Y 1 W X 1 1 = W X 1 1 − η ∂ E O ∂ W X 1 1 = W X 1 1 − η ( ( W Y 1 1 ) T δ F 1 ) ⊙ σ ′ ( H 1 ) ∗ X 1 \begin{aligned} & W_{Y_11} = W_{Y_11} - \eta \frac{\partial E_O}{\partial W_{Y_11}} = W_{Y_11} - \eta \nabla{_{O_1}E_O}\odot \sigma{'(R_1)}*Y_1\\ & W_{X_11} = W_{X_11} - \eta \frac{\partial E_O}{\partial W_{X_11}} = W_{X_11} - \eta ((W_{Y_11})^T\delta{_{F_{1}}})\odot \sigma{'(H_1)}*X_1 \end{aligned} WY11=WY11−η∂WY11∂EO=WY11−η∇O1EO⊙σ′(R1)∗Y1WX11=WX11−η∂WX11∂EO=WX11−η((WY11)TδF1)⊙σ′(H1)∗X1