深度神经网络DNN反向传播BP算法公式推导

深度神经网络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


总结

\;\;\;\;\; 后面推导的有些跳跃,读者自己多多思考,公式是没有问题的。

相关推荐
红色的山茶花1 小时前
YOLOv11-ultralytics-8.3.67部分代码阅读笔记-split_dota.py
笔记·深度学习·yolo
SuasyYi1 小时前
【深度学习】Transformer 的常见的位置编码有哪些
人工智能·python·深度学习·语言模型·transformer
AITIME论道5 小时前
即插即用Transformer、扩散模型、机器人规划、长文本检索增强生成 | Big Model Weekly 第57期...
人工智能·深度学习·transformer
Fansv5876 小时前
深度学习-7.超参数优化
人工智能·深度学习
果冻人工智能8 小时前
去中心化 AI:赋权还是混乱?
人工智能·深度学习·机器学习·架构·去中心化·区块链·ai员工
伊犁纯流莱8 小时前
Normalizing flow 流模型 | CS236深度生成模型Lec8学习笔记
深度学习
Landy_Jay9 小时前
深度学习:基于Qwen复现DeepSeek R1的推理能力
人工智能·深度学习
Daitu_Adam10 小时前
Windows11安装GPU版本Pytorch2.6教程
人工智能·pytorch·python·深度学习
YoseZang11 小时前
【机器学习】信息熵 交叉熵和相对熵
人工智能·深度学习·机器学习