反向传播算法(BP)

1 概述

反向传播其实是对权重和偏置变化影响代价函数过程的理解。最终极的含义就是计算偏导数 ∂ C ∂ ω j k l \frac{\partial C}{\partial\omega_{jk}^{l}} ωjklC ∂ C ∂ b j l \frac{\partial C}{\partial b_{j}^{l}} bjlC。为了计算这些只,引入中间变量 δ j l \delta_j^l δjl,它表示在第 l l l层的第 j j j个神经元上的误差。反向传播将给出误差计算的流程,然后将其关联到 ∂ C ∂ ω j k l \frac{\partial C}{\partial\omega_{jk}^{l}} ωjklC ∂ C ∂ b j l \frac{\partial C}{\partial b_{j}^{l}} bjlC上。因此,切确的说它应该叫做误差反向传播。由于人工神经网络的输出结果与实际结果存在误差,即计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层。

2 定义

定义第 l l l层的第 j j j个神经元上的误差为 δ j l \delta_j^l δjl,则有:
δ j l = ∂ C ∂ z j l \delta_j^l=\frac{\partial C}{\partial z_j^l} δjl=zjlC
然后用下一层的误差 δ l + \delta^{l+} δl+表示成当前层的误差 δ l \delta^l δl
δ l = ( ( ω l + 1 ) T δ l + 1 ) σ ′ ( z l ) \delta^l=((\omega^{l+1})^T\delta^{l+1})\sigma^{\prime}(z^l) δl=((ωl+1)Tδl+1)σ(zl)
有了上述公式,我们可以将反向传播算法显式的表达出来:

  • 输入样本 x x x,为输入层设置对应的激活值 α l \alpha^l αl
  • 前向传播:对于每一层 l = 1 , 2 , . . . , L l=1,2,...,L l=1,2,...,L,计算加权输出 z z z和激活值 α \alpha α
    z l = ω l α l − 1 + b l α l = σ ( z l ) z^l=\omega^l\alpha^{l-1}+b^l \\ \alpha^l=\sigma(z^l) zl=ωlαl1+blαl=σ(zl)
  • 输出层误差 δ L \delta^L δL
    δ L = ∂ C ∂ α ⨀ σ ( z ) \delta^L=\frac{\partial C}{\partial \alpha}\bigodot \sigma(z) δL=αCσ(z)
  • 反向误差传播:对每一层, L = L − 1 , L − 2 , . . . , 2 L=L-1,L-2,...,2 L=L1,L2,...,2,计算:
    δ l = ( ( ω l + 1 ) T δ l + 1 ) σ ′ ( z l ) \delta^l=((\omega^{l+1})^T\delta^{l+1})\sigma^{\prime}(z^l) δl=((ωl+1)Tδl+1)σ(zl)
  • 输出:代价函数的梯度由 ∂ C ∂ ω j k l = α k l − 1 ⋅ δ j l \frac{\partial C}{\partial\omega_{jk}^{l}}=\alpha_k^{l-1}\cdot\delta_j^l ωjklC=αkl1δjl ∂ C ∂ b j l = δ j l \frac{\partial C}{\partial b_j^l}=\delta_j^l bjlC=δjl给出。

3原理推导

在这里插入图片描述
如图所示,变量解释如下:

  • ω j k l \omega_{jk}^{l} ωjkl:是指从 l − 1 l-1 l1层的第 k k k个神经元到第 l l l层的第 j j j个神经元的权重;
  • b l j b_l^j blj:是指第 l l l层的第 j j j个神经元的偏置;
  • z j l z_j^l zjl:是指第 l l l层的第 j j j个神经元的加权输入;
  • α j l \alpha_j^l αjl:是指第 l l l层的第 j j j个神经元的加权激活值。
    变量之间的关系如下:
  • z j l + 1 = ∑ k ω j k l + 1 α k l + b j l + 1 z_j^{l+1}=\sum_k\omega_{jk}^{l+1}\alpha_k^l+b_j^{l+1} zjl+1=kωjkl+1αkl+bjl+1
    指第 l + 1 l+1 l+1层的第 j j j个神经元的加权输入等于上一层所有激活值乘以对应第 l l l层对应神经元到第 l + 1 l+1 l+1层的第 j j j个神经元的权重加上第 l + 1 l+1 l+1层的第 j j j个神经元的偏置。
  • α j l = σ ( z j l ) \alpha_j^l=\sigma(z_j^l) αjl=σ(zjl)
    指第 l l l层的第 j j j个神经元的激活值等于第 l l l层的第 j j j个神经元的带权输入在激活函数上的作用值。

误差计算

即:
δ L = ∂ C ∂ α ⋅ σ ′ ( z ) \delta^L=\frac{\partial C}{\partial \alpha}\cdot \sigma^{\prime}(z) δL=αCσ(z)
证明:
因为 δ j l = ∂ C ∂ z j l \delta_j^l=\frac{\partial C}{\partial z_j^l} δjl=zjlC
即第 ; ; ;层的第 j j j个神经元的误差等于代价函数对第 l l l层的第 j j j个神经元带权输入的偏导数。这是因为带权输入直接与实际的输入相关联,如果带权输入产生了 Δ z j l \Delta z_j^l Δzjl的变化,那么激活值则由 σ ( z j l ) \sigma(z_j^l) σ(zjl)变为 σ ( z j l + Δ z j l ) \sigma(z_j^l+\Delta z_j^l) σ(zjl+Δzjl)。这个变化会向⽹络后⾯的层进⾏传播,最终导致整个代价产生 ∂ C ∂ z j l Δ z j l \frac{\partial C}{\partial z_j^l}\Delta z_j^l zjlCΔzjl的变化,因此由此启发使用 ∂ C ∂ z j l \frac{\partial C}{\partial z_j^l} zjlC来表征误差。根据链式法则:
δ j l = ∂ C ∂ z j l = ∂ C ∂ α j l ∂ α j l ∂ z j l = ∂ C ∂ α j l σ ′ z j l \delta_j^l=\frac{\partial C}{\partial z_j^l}=\frac{\partial C}{\partial \alpha_j^l}\frac{\partial \alpha_j^l}{\partial z_j^l}=\frac{\partial C}{\partial \alpha_j^l}\sigma^{\prime}{z_j^l} δjl=zjlC=αjlCzjlαjl=αjlCσzjl
这是对于一个神经元而言的,那么推广之,得到公式:
δ L = ∂ C ∂ α σ ′ ( z ) \delta^L=\frac{\partial C}{\partial \alpha}\sigma^{\prime}(z) δL=αCσ(z)

误差传播

即:
δ l = ( ( ω l + 1 ) T δ l + 1 ) σ ′ ( z l ) \delta^l=((\omega^{l+1})^T\delta^{l+1})\sigma^{\prime}(z^l) δl=((ωl+1)Tδl+1)σ(zl)
证明:
因为 δ j l = ∂ C ∂ z j l \delta_j^l=\frac{\partial C}{\partial z_j^l} δjl=zjlC
由链式法则:
δ j l = ∑ k ∂ C ∂ z k l + 1 ∂ z k l + 1 ∂ α j l ∂ α j l ∂ z j l = ∑ k δ k l + 1 ∂ ( ω k j l + 1 α j l + b k l + 1 ) ∂ α j l σ ′ ( z j l ) = ∑ k δ k l + 1 ω k j l + 1 σ ′ ( z j l ) \delta_j^l=\sum_k \frac{\partial C}{\partial z_k^{l+1}}\frac{\partial z_k^{l+1}}{\partial \alpha_j^l}\frac{\partial \alpha_j^l}{\partial z_j^l}=\sum_k \delta_k^{l+1} \frac{\partial(\omega_{kj}^{l+1}\alpha_j^l+b_k^{l+1})}{\partial \alpha_j^l}\sigma^{\prime}(z_j^l)=\sum_k \delta_k^{l+1} \omega_{kj}^{l+1}\sigma^{\prime}(z_j^l) δjl=kzkl+1Cαjlzkl+1zjlαjl=kδkl+1αjl(ωkjl+1αjl+bkl+1)σ(zjl)=kδkl+1ωkjl+1σ(zjl)
最后推广到矩阵形式,得到:
δ l = ( ( ω l + 1 ) T δ l + 1 ) σ ′ ( z l ) \delta^l=((\omega^{l+1})^T\delta^{l+1})\sigma^{\prime}(z^l) δl=((ωl+1)Tδl+1)σ(zl)

代价函数对权重的偏导数

即:
∂ C ∂ ω j k l = α k l − 1 ⋅ δ j l \frac{\partial C}{\partial\omega_{jk}^{l}}=\alpha_k^{l-1}\cdot\delta_j^l ωjklC=αkl1δjl
证明:
∂ C ∂ ω j k l = ∂ C ∂ z j l ∂ z j l ∂ ω j k l = δ j l ∂ ( ω j k l α k l − 1 + b j l ) ∂ ω j k l = δ j l α k l − 1 \frac{\partial C}{\partial\omega_{jk}^{l}}=\frac{\partial C}{\partial z_j^l}\frac{\partial z_j^l}{\partial\omega_{jk}^{l}}=\delta_j^l\frac{\partial(\omega_{jk}^l\alpha_k^{l-1}+b_j^l)}{\partial\omega_{jk}^{l}}=\delta_j^l\alpha_k^{l-1} ωjklC=zjlCωjklzjl=δjlωjkl(ωjklαkl1+bjl)=δjlαkl1

代价函数对偏置的偏导数

即:
∂ C ∂ b j l = δ j l \frac{\partial C}{\partial b_j^l}=\delta_j^l bjlC=δjl
证明:
由链式法则,并且已知 z l = ω l α l − 1 + b l z^l=\omega^l\alpha^{l-1}+b^l zl=ωlαl1+bl,得到:
∂ C ∂ b j l = ∂ C ∂ z j l ∂ z j l ∂ b j l = δ j l ∂ ( ω j k l α k l − 1 + b j l ) ∂ b j l = δ j l \frac{\partial C}{\partial b_j^l}=\frac{\partial C}{\partial z_j^l}\frac{\partial z_j^l}{\partial b_j^l} =\delta_j^l\frac{\partial(\omega_{jk}^l\alpha_k^{l-1}+b_j^l)}{\partial b_j^l}=\delta_j^l bjlC=zjlCbjlzjl=δjlbjl(ωjklαkl1+bjl)=δjl

感谢阅读。

如果觉得文章对你有所帮助,欢迎打赏哦~
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yougwypf1991

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值