反向传播算法(BP)
目录
- 1 概述
- 2 定义
- 3原理推导
- 误差计算
- 误差传播
- 代价函数对权重的偏导数
- 代价函数对偏置的偏导数
1 概述
反向传播其实是对权重和偏置变化影响代价函数过程的理解。最终极的含义就是计算偏导数 ∂ C ∂ ω j k l \frac{\partial C}{\partial\omega_{jk}^{l}} ∂ωjkl∂C和 ∂ C ∂ b j l \frac{\partial C}{\partial b_{j}^{l}} ∂bjl∂C。为了计算这些只,引入中间变量 δ j l \delta_j^l δjl,它表示在第 l l l层的第 j j j个神经元上的误差。反向传播将给出误差计算的流程,然后将其关联到 ∂ C ∂ ω j k l \frac{\partial C}{\partial\omega_{jk}^{l}} ∂ωjkl∂C和 ∂ C ∂ b j l \frac{\partial C}{\partial b_{j}^{l}} ∂bjl∂C上。因此,切确的说它应该叫做误差反向传播。由于人工神经网络的输出结果与实际结果存在误差,即计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层。
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=∂zjl∂C
然后用下一层的误差 δ 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αl−1+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=L−1,L−2,...,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 ∂ωjkl∂C=αkl−1⋅δjl和 ∂ C ∂ b j l = δ j l \frac{\partial C}{\partial b_j^l}=\delta_j^l ∂bjl∂C=δjl给出。
3原理推导

如图所示,变量解释如下:
- ω j k l \omega_{jk}^{l} ωjkl:是指从 l − 1 l-1 l−1层的第 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=∂zjl∂C
即第 ; ; ;层的第 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 ∂zjl∂CΔzjl的变化,因此由此启发使用 ∂ C ∂ z j l \frac{\partial C}{\partial z_j^l} ∂zjl∂C来表征误差。根据链式法则:
δ 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=∂zjl∂C=∂αjl∂C∂zjl∂αjl=∂αjl∂Cσ′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=∂zjl∂C
由链式法则:
δ 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=k∑∂zkl+1∂C∂αjl∂zkl+1∂zjl∂α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 ∂ωjkl∂C=αkl−1⋅δ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} ∂ωjkl∂C=∂zjl∂C∂ωjkl∂zjl=δjl∂ωjkl∂(ωjklαkl−1+bjl)=δjlαkl−1
代价函数对偏置的偏导数
即:
∂ C ∂ b j l = δ j l \frac{\partial C}{\partial b_j^l}=\delta_j^l ∂bjl∂C=δjl
证明:
由链式法则,并且已知 z l = ω l α l − 1 + b l z^l=\omega^l\alpha^{l-1}+b^l zl=ωlαl−1+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 ∂bjl∂C=∂zjl∂C∂bjl∂zjl=δjl∂bjl∂(ωjklαkl−1+bjl)=δjl
感谢阅读。
如果觉得文章对你有所帮助,欢迎打赏哦~


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
