深度神经网络DNN反向传播BP算法推导、δ法则
文章目录
前言
\;\;\;\;\; 本文详细推导深度神经网络DNN反向传播BP算法中对权重w和偏置b的更新公式。通过图片和一步步的数学公式推导深刻理解反向传播BP算法,δ法则。
++提示:以下是本篇文章正文内容,转载请附上链接!++
一、单个神经元的内部结构
\;\;\;\;\; 神经网络中的神经元是对生物神经元的模拟,它接收来自外部的若干个变量值,为每个变量值赋予不同的权重,对变量进行加权求和,并经过内部激活函数的处理,最终输出激活值。
首先对输入变量进行加权求和:
z = x 1 ∗ w 1 + x 2 ∗ w 2 + x 3 ∗ w 3 + ⋯ + x n ∗ w n + b = ∑ i = 1 n x i w i + b = x ∗ w + b \begin{aligned}\text{z}&=x_1*w_1+x_2*w_2+x_3*w_3+\cdots+x_n*w_n+b\\&=\sum_{i=1}^nx_iw_i+b\\&=\mathbf{x}*\mathbf{w}+b\end{aligned} z=x1∗w1+x2∗w2+x3∗w3+⋯+xn∗wn+b=i=1∑nxiwi+b=x∗w+b
然后将加权求和结果输入到激活函数:
y = f ( z ) = f ( x ∗ w + b ) y=f(z)=f(\mathbf{x}*\mathbf{w}+b) y=f(z)=f(x∗w+b)
输入 x \mathbf{x} x:神经元的输入变量值,可以理解为上一层神经元的输出结果。
权重 w \mathbf{w} w:每一个输入对应着一个权重,代表着该输入的重要程度,重要程度越高,则权重越大。
偏置b:偏置可以理解为激活该神经元的阈值,当超过阈值时该神经元被激活。
激活函数f:当输入激励达到一定强度,神经元就会被激活,产生输出信号。模拟这一细胞激活过程的函数,就叫激活函数。
输出y:激活函数的输出结果,不同的激活函数有着不同的输出结果。
二、前向传播
先进行相关符号的定义:
w j k l w_{jk}^{l} wjkl:第( l − 1 l-1 l−1)层的第 k k k 个神经元连接到第 l l l 层的第 j j j 个神经元的权重
b j l b_j^l bjl:第 l l l 层的第 j j j 个神经元的偏置
z j l z_j^l zjl:第 l l l 层的第 j j j 个神经元的带权输入(上一层的激活值与偏置的加权之和)
a j l a_j^l ajl:第 l l l 层的第 j j j 个神经元的激活值

第1层神经元的带权输入值为:
z 1 ( 1 ) z 2 ( 1 ) \] = \[ w 11 ( 1 ) w 12 ( 1 ) w 21 ( 1 ) w 22 ( 1 ) \] \[ x 1 x 2 \] + \[ b 1 ( 1 ) b 2 ( 1 ) \] = w 1 x + b 1 \\begin{bmatrix}z_1\^{(1)}\\\\z_2\^{(1)}\\end{bmatrix}=\\begin{bmatrix}w_{11}\^{(1)}\&w_{12}\^{(1)}\\\\w_{21}\^{(1)}\&w_{22}\^{(1)}\\end{bmatrix}\\begin{bmatrix}x_1\\\\x_2\\end{bmatrix}+\\left\[\\begin{array}{c}b_1\^{(1)}\\\\b_2\^{(1)}\\end{array}\\right\]=\\mathbf{w}_1\\mathbf{x}+\\mathbf{b}_1 \[z1(1)z2(1)\]=\[w11(1)w21(1)w12(1)w22(1)\]\[x1x2\]+\[b1(1)b2(1)\]=w1x+b1 第1层神经元的激活值为,其中 σ \\sigma σ为激活函数: y 1 = \[ a 1 ( 1 ) a 2 ( 1 ) \] = \[ σ ( z 1 ( 1 ) ) σ ( z 2 ( 1 ) ) \] \\mathbf{y}_1=\\left\[\\begin{array}{c}a_1\^{(1)}\\\\a_2\^{(1)}\\end{array}\\right\]=\\left\[\\begin{array}{c}\\sigma\\Big(z_1\^{(1)}\\Big)\\\\\\sigma\\Big(z_2\^{(1)}\\Big)\\end{array}\\right\] y1=\[a1(1)a2(1)\]= σ(z1(1))σ(z2(1)) 第2层神经元的带权输入值为: \[ z 1 ( 2 ) z 2 ( 2 ) \] = \[ w 11 ( 2 ) w 12 ( 2 ) w 21 ( 2 ) w 22 ( 2 ) \] \[ a 1 ( 1 ) a 2 ( 1 ) \] + \[ b 1 ( 2 ) b 2 ( 2 ) \] = w 2 y 1 + b 2 \\begin{bmatrix}z_1\^{(2)}\\\\z_2\^{(2)}\\end{bmatrix}=\\begin{bmatrix}w_{11}\^{(2)}\&w_{12}\^{(2)}\\\\w_{21}\^{(2)}\&w_{22}\^{(2)}\\end{bmatrix}\\left\[\\begin{array}{c}a_1\^{(1)}\\\\a_2\^{(1)}\\end{array}\\right\]+\\left\[\\begin{array}{c}b_1\^{(2)}\\\\b_2\^{(2)}\\end{array}\\right\]=\\mathbf{w}_2\\mathbf{y}_1+\\mathbf{b}_2 \[z1(2)z2(2)\]=\[w11(2)w21(2)w12(2)w22(2)\]\[a1(1)a2(1)\]+\[b1(2)b2(2)\]=w2y1+b2 第2层神经元的激活值为: y = \[ y 1 y 2 \] = \[ a 1 ( 2 ) a 2 ( 2 ) \] = \[ σ ( z 1 ( 2 ) ) σ ( z 2 ( 2 ) ) \] \\mathbf{y}=\\left\[\\begin{array}{c}y_1\\\\y_2\\end{array}\\right\]=\\left\[\\begin{array}{c}a_1\^{(2)}\\\\a_2\^{(2)}\\end{array}\\right\]=\\left\[\\begin{array}{c}\\sigma\\Big(z_1\^{(2)}\\Big)\\\\\\sigma\\Big(z_2\^{(2)}\\Big)\\end{array}\\right\] y=\[y1y2\]=\[a1(2)a2(2)\]= σ(z1(2))σ(z2(2)) ## 三、反向传播 对于每一个样本,拟合误差用如下二次损失函数表示: C = 1 2 ∑ j ( y j − d j ) 2 = 1 2 ∑ j ( a j ( 2 ) − d j ) 2 \\begin{aligned}C\&=\\frac12\\sum_j(y_j-d_j)\^2=\\frac12\\sum_j(a_j\^{(2)}-d_j)\^2\\end{aligned} C=21j∑(yj−dj)2=21j∑(aj(2)−dj)2 其中 j j j 表示第 j j j 个神经元, y j y_j yj 表示输出层第 j j j 个神经元的预测值(激活值), d j d_j dj 表示第 j j j 个神经元的标签。  第2层神经元的误差为: e 1 = y 1 − d 1 e 2 = y 2 − d 2 e_{1} = y_{1} - d_{1}\\\\e_{2} = y_{2} - d_{2} e1=y1−d1e2=y2−d2 第2层第1个神经元的 δ 1 ( 2 ) \\delta_1\^{(2)} δ1(2) 为: δ 1 ( 2 ) = ∂ C ∂ z 1 ( 2 ) = ∂ C ∂ a 1 ( 2 ) ⋅ ∂ a 1 ( 2 ) ∂ z 1 ( 2 ) = 1 2 ∑ j ( a j ( 2 ) − d j ) 2 ∂ a 1 ( 2 ) ⋅ ∂ a 1 ( 2 ) ∂ z 1 ( 2 ) = ( a 1 ( 2 ) − d 1 ) ⋅ ∂ a 1 ( 2 ) ∂ z 1 ( 2 ) = ( y 1 − d 1 ) ⋅ σ ′ ( z 1 ( 2 ) ) = σ ′ ( z 1 ( 2 ) ) ⋅ e 1 \\begin{aligned} \\delta_1\^{(2)}=\\frac{\\partial C}{\\partial z_1\^{(2)}} \&=\\frac{\\partial C}{\\partial a_1\^{(2)}}\\cdot\\frac{\\partial a_1\^{(2)}}{\\partial z_1\^{(2)}} =\\frac{\\frac12\\sum_j(a_j\^{(2)}-d_j)\^2}{\\partial a_1\^{(2)}}\\cdot\\frac{\\partial a_1\^{(2)}}{\\partial z_1\^{(2)}} \\\\ \&=\\begin{pmatrix}a_1\^{(2)}-d_1\\end{pmatrix}\\cdot\\frac{\\partial a_1\^{(2)}}{\\partial z_1\^{(2)}} =(y_1-d_1)\\cdot\\sigma\^{\\prime}(z_1\^{(2)})=\\sigma\^{\\prime}(z_1\^{(2)})\\cdot e_{1} \\end{aligned} δ1(2)=∂z1(2)∂C=∂a1(2)∂C⋅∂z1(2)∂a1(2)=∂a1(2)21∑j(aj(2)−dj)2⋅∂z1(2)∂a1(2)=(a1(2)−d1)⋅∂z1(2)∂a1(2)=(y1−d1)⋅σ′(z1(2))=σ′(z1(2))⋅e1 同理,第2层第2个神经元的 δ 2 ( 2 ) \\delta_2\^{(2)} δ2(2) 为: δ 2 ( 2 ) = σ ′ ( z 2 ( 2 ) ) ⋅ e 2 \\begin{aligned} \\delta_2\^{(2)}=\\sigma\^{\\prime}(z_2\^{(2)})\\cdot e_{2} \\end{aligned} δ2(2)=σ′(z2(2))⋅e2 第2层第1个神经元偏置 b 1 ( 2 ) b_1\^{(2)} b1(2) 的偏导数为: ∂ C ∂ b 1 ( 2 ) = ∂ C ∂ z 1 ( 2 ) ⋅ ∂ z 1 ( 2 ) ∂ b 1 ( 2 ) = δ 1 ( 2 ) ⋅ ∂ ( w 11 ( 2 ) a 1 ( 1 ) + w 12 ( 2 ) a 2 ( 1 ) + b 1 ( 2 ) ) ∂ b 1 ( 2 ) = δ 1 ( 2 ) \\begin{aligned} \\frac{\\partial C}{\\partial b_1\^{(2)}}=\\frac{\\partial C}{\\partial z_1\^{(2)}}\\cdot\\frac{\\partial z_1\^{(2)}}{\\partial b_1\^{(2)}} =\\delta_1\^{(2)}\\cdot\\frac{\\partial\\left(w_{11}\^{(2)}a_1\^{(1)}+w_{12}\^{(2)}a_2\^{(1)}+b_1\^{(2)}\\right)}{\\partial b_1\^{(2)}} =\\delta_1\^{(2)} \\end{aligned} ∂b1(2)∂C=∂z1(2)∂C⋅∂b1(2)∂z1(2)=δ1(2)⋅∂b1(2)∂(w11(2)a1(1)+w12(2)a2(1)+b1(2))=δ1(2) 同理: ∂ C ∂ b 2 ( 2 ) = = δ 2 ( 2 ) \\begin{aligned} \\frac{\\partial C}{\\partial b_2\^{(2)}}= =\\delta_2\^{(2)} \\end{aligned} ∂b2(2)∂C==δ2(2) 第2层第1个神经元权重 w 11 ( 2 ) w_{11}\^{(2)} w11(2) 的偏导数为: ∂ C ∂ w 11 ( 2 ) = ∂ C ∂ z 1 ( 2 ) ⋅ ∂ z 1 ( 2 ) ∂ w 11 ( 2 ) = δ 1 ( 2 ) ⋅ ∂ ( w 11 ( 2 ) a 1 ( 1 ) + w 12 ( 2 ) a 2 ( 1 ) + b 1 ( 2 ) ) ∂ w 11 ( 2 ) = δ 1 ( 2 ) ⋅ a 1 ( 1 ) \\begin{aligned} \\frac{\\partial C}{\\partial w_{11}\^{(2)}} \&=\\frac{\\partial C}{\\partial z_1\^{(2)}}\\cdot\\frac{\\partial z_1\^{(2)}}{\\partial w_{11}\^{(2)}}=\\delta_{1}\^{(2)}\\cdot\\frac{\\partial\\left(w_{11}\^{(2)}a_1\^{(1)}+w_{12}\^{(2)}a_2\^{(1)}+b_1\^{(2)}\\right)}{\\partial w_{11}\^{(2)}}=\\delta_1\^{(2)}\\cdot a_1\^{(1)} \\end{aligned} ∂w11(2)∂C=∂z1(2)∂C⋅∂w11(2)∂z1(2)=δ1(2)⋅∂w11(2)∂(w11(2)a1(1)+w12(2)a2(1)+b1(2))=δ1(2)⋅a1(1) 同理得: ∂ C ∂ w 2 = \[ δ 1 ( 2 ) δ 2 ( 2 ) \] y 1 T \\begin{aligned} \\frac{\\partial C}{\\partial \\mathbf{w}_2} =\\left\[\\begin{array}{c}\\delta_1\^{(2)}\\\\\\delta_2\^{(2)}\\end{array}\\right\] \\end{aligned}\\mathbf{y}_1\^{T} ∂w2∂C=\[δ1(2)δ2(2)\]y1T  \[ e 1 ( 1 ) e 2 ( 1 ) \] = \[ w 11 ( 2 ) w 21 ( 2 ) w 12 ( 2 ) w 22 ( 2 ) \] \[ δ 1 δ 2 \] = w 2 T \[ δ 1 δ 2 \] \\begin{bmatrix}e_1\^{(1)}\\\\e_2\^{(1)}\\end{bmatrix}=\\begin{bmatrix}w_{11}\^{(2)}\&w_{21}\^{(2)}\\\\w_{12}\^{(2)}\&w_{22}\^{(2)}\\end{bmatrix}\\begin{bmatrix}\\delta_1\\\\\\delta_2\\end{bmatrix}=\\mathbf{w}_2\^T\\begin{bmatrix}\\delta_1\\\\\\delta_2\\end{bmatrix} \[e1(1)e2(1)\]=\[w11(2)w12(2)w21(2)w22(2)\]\[δ1δ2\]=w2T\[δ1δ2
那么可以总结以下公式:
δ j l = ( a j l − d j ) ⋅ σ ′ ( z j l ) ∂ C ∂ b j l = δ j l ∂ C ∂ w j k l = δ j l ⋅ a k l − 1 δ l − 1 = ( ( w l ) T δ l ) ⊙ σ ′ ( z l − 1 ) \begin{aligned} &\delta_j^l=(a_j^l-d_j)\cdot\sigma^{\prime}(z_j^l) \\ &\frac{\partial C}{\partial b_j^l}=\delta_j^l \\ &\frac{\partial C}{\partial w_{jk}^l}=\delta_j^l\cdot a_k^{l-1} \\ &\delta^{l-1}=\left(\left(w^l\right)^T\delta^l\right)\odot\sigma^{\prime}\left(z^{l-1}\right) \end{aligned} δjl=(ajl−dj)⋅σ′(zjl)∂bjl∂C=δjl∂wjkl∂C=δjl⋅akl−1δl−1=((wl)Tδl)⊙σ′(zl−1)
然后更新权重和偏置:
w j k l → ( w j k l ) ′ = w j k l − η ∂ C ∂ w j k l b j l → ( b j l ) ′ = b j l − η ∂ C ∂ b j l w_{jk}^l\to\left(w_{jk}^l\right)^{\prime}=w_{jk}^l-\eta\frac{\partial C}{\partial w_{jk}^l}\\b_j^l\to\left(b_j^l\right)^{\prime}=b_j^l-\eta\frac{\partial C}{\partial b_j^l} wjkl→(wjkl)′=wjkl−η∂wjkl∂Cbjl→(bjl)′=bjl−η∂bjl∂C
总结
\;\;\;\;\; 后面推导的有些跳跃,读者自己多多思考,公式是没有问题的。