文章目录

  • 1. 链式法则(ChainruleChain \ ruleChain rule)
  • 2. BPBPBP算法流程
  • 3. 前馈神经网络的一些记号说明
  • 4. 以三层神经网络为例,讲解梯度计算
  • 5. BPBPBP算法一般化推导
  • 6. 误差逆向传播过程理解
  • 7. 关于梯度消失
  • 8. 激活函数为什么需要零均值

在 神经网络基础篇 我们介绍了神经网络的一些基础知识,并提到神经网络的强大的表达能力,但是我们并不知道该如何训练它以获取各个参数,为此我们将介绍其中最最典型的算法: 误差逆传播算法( BackPropagationBackPropagationBackPropagation,简称 BPBPBP),它是一种与最优化方法(如梯度下降法)结合使用,用来训练人工神经网络的常见方法。该方法对网络中所有权重 www和偏置 bbb计算损失函数的梯度,这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。

在正式介绍BPBPBP算法之前,我们需要明确一些内容

1. 链式法则(ChainruleChain \ ruleChain rule)

链式法则是复合函数求导中的常用规则,这里简单举例介绍,不详细展开

  • y=f(x),z=g(y)y = f(x),z=g(y)y=f(x),z=g(y)

    此时,如果给xxx一个很小的变化Δx\Delta xΔx,则会通过f(x)f(x)f(x)函数影响yyy,yyy变化又会通过函数g(y)g(y)g(y)影响zzz,即

    Δx→Δy→Δz\Delta x \rightarrow \Delta y \rightarrow \Delta z Δx→Δy→Δz

    则有

    ∂z∂x=∂z∂y⋅∂y∂x\begin{aligned}\frac{\partial{z}}{\partial{x}} = \frac{\partial{z}}{\partial{y}} \cdot \frac{\partial{y}}{\partial{x}}\end{aligned}∂x∂z​=∂y∂z​⋅∂x∂y​​

  • z=f(x,y),wherex=g(t),y=h(t)z=f(x,y), where \ x=g(t),y=h(t)z=f(x,y),where x=g(t),y=h(t)

    同样如果给ttt一个很小的变化Δt\Delta tΔt,则会通过g(t)g(t)g(t)函数影响xxx,通过h(t)h(t)h(t)函数影响yyy,xxx或yyy变化均会通过函数f(x,y)f(x,y)f(x,y)影响zzz,即ttt发生变化时,可以通过Δx\Delta xΔx 和 Δy\Delta yΔy两条路径影响zzz

    此时有

    ∂z∂t=∂z∂x⋅∂x∂t+∂z∂y⋅∂y∂t\begin{aligned}\frac{\partial{z}}{\partial{t}} = \frac{\partial{z}}{\partial{x}} \cdot \frac{\partial{x}}{\partial{t}}+\frac{\partial{z}}{\partial{y}} \cdot \frac{\partial{y}}{\partial{t}}\end{aligned}∂t∂z​=∂x∂z​⋅∂t∂x​+∂y∂z​⋅∂t∂y​​

2. BPBPBP算法流程

BPBPBP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整,算法流程大致如下:

  1. 随机初始化所有的(w,b)(w,b)(w,b)

  2. 输入训练样本集{(x(n),y(n))},n=1,2,⋯,N\{(x^{(n)},y^{(n)}) \},n = 1,2,\cdots,N{(x(n),y(n))},n=1,2,⋯,N,带入神经网络,计算出所有的(z,a,y^)(z,a,\hat y)(z,a,y^​) ,这个是信号的前向传播过程

  3. 使用梯度下降法,最小化损失函数

    E=12N∑i=1N(y^(i)−y(i))2\begin{aligned} E &=\frac{1}{2N}\sum\limits_{i=1}^N(\hat y^{(i)}-y^{(i)})^2 \end{aligned}E​=2N1​i=1∑N​(y^​(i)−y(i))2​

    这里通过链式法则求解损失函数EEE对各个参数w,bw,bw,b的偏导数,并根据规则更新参数

    wnew=wold−η∂E∂w∣woldbnew=bold−η∂E∂b∣bold\begin{aligned}w^{new} &= w^{old} - \eta \frac{\partial{E}}{\partial{w}}\bigg|_{w^{old}} \\ b^{new} &= b^{old} - \eta \frac{\partial{E}}{\partial{b}}\bigg|_{b^{old}}\end{aligned}wnewbnew​=wold−η∂w∂E​∣∣∣∣​wold​=bold−η∂b∂E​∣∣∣∣​bold​​

  4. 重复2-3步骤,直至损失函数足够小(达到满意的设定值)

3. 前馈神经网络的一些记号说明

记号含义L神经网络层数Ml第l层神经元的个数ϕl(⋅)第l层神经元的激活函数W[l]∈RMl×Ml−1第l−1层到第l层的权重矩阵wij[l]第l−1层的第i个神经元与第l层第j个神经元的连接权重b[l]∈RMl第l层的偏置矩阵bi[l]第l层第i个神经元的偏置z[l]∈RMl第l层神经元的非激活值zi[l]第l层第i个神经元的非激活值a[l]∈RMl第l层的激活值ai[l]第l层第i个神经元的激活值\begin{array}{l|clr} 记号 & 含义 \\ \hline L & 神经网络层数 \\ M_l & 第l层神经元的个数 \\ \phi_l(\cdot) & 第l层神经元的激活函数 \\ W^{[l]} \in R^{M_l \times M_{l-1}} & 第l-1层到第l层的权重矩阵 \\w_{ij}^{[l]} & 第l-1层的第i个神经元与第l层第j个神经元的连接权重\\ b^{[l]} \in R^{M_l} & 第l层的偏置矩阵 \\b_i^{[l]} & 第l层第i个神经元的偏置 \\ z^{[l]} \in R^{M_l} & 第l层神经元的非激活值 \\z_i^{[l]} & 第l层第i个神经元的非激活值\\ a^{[l]} \in R^{M_l} & 第l层的激活值 \\a_i^{[l]} &第l层第i个神经元的激活值 \end{array}记号LMl​ϕl​(⋅)W[l]∈RMl​×Ml−1​wij[l]​b[l]∈RMl​bi[l]​z[l]∈RMl​zi[l]​a[l]∈RMl​ai[l]​​含义神经网络层数第l层神经元的个数第l层神经元的激活函数第l−1层到第l层的权重矩阵第l−1层的第i个神经元与第l层第j个神经元的连接权重第l层的偏置矩阵第l层第i个神经元的偏置第l层神经元的非激活值第l层第i个神经元的非激活值第l层的激活值第l层第i个神经元的激活值​​

4. 以三层神经网络为例,讲解梯度计算

我们以三层神经网络为例,说明BPBPBP算法的梯度计算流程,为了更好的理解算法本质,这里只使用一个输入样例,并且每层的激活函数均为SigmoidSigmoidSigmoid 函数,则有ϕ′(z)=ϕ(z)(1−ϕ(z))=a(1−a)\phi'(z)=\phi(z)(1−\phi(z))=a(1-a)ϕ′(z)=ϕ(z)(1−ϕ(z))=a(1−a)

对于上面的神经网络有以下几个式子成立:

z1[1]=x1∗w11[1]+x2∗w21[1]+b1[1],a1[1]=ϕ1(z1[1])z2[1]=x1∗w12[1]+x2∗w22[1]+b2[1],a2[1]=ϕ1(z2[1])z1[2]=a1[1]∗w11[2]+a2[1]∗w21[2]+b1[2],a1[2]=ϕ2(z1[2])z2[2]=a1[1]∗w12[2]+a2[1]∗w22[2]+b2[2],a2[2]=ϕ2(z2[2])z1[3]=a1[2]∗w11[3]+a2[2]∗w21[3]+b1[3],a1[3]=ϕ3(z1[3])y^=a1[3]E=12(y^−y)2\begin{aligned} z^{[1]}_1 &= x_1* w_{11}^{[1]}+x_2* w_{21}^{[1]}+b_1^{[1]},\quad a_1^{[1]} = \phi_1(z_1^{[1]}) \\ z^{[1]}_2 &= x_1* w_{12}^{[1]}+x_2* w_{22}^{[1]}+b_2^{[1]},\quad a_2^{[1]} = \phi_1(z_2^{[1]}) \\ \\ z^{[2]}_1 &= a_1^{[1]}* w_{11}^{[2]}+a_2^{[1]}* w_{21}^{[2]}+b_1^{[2]},\quad a_1^{[2]} = \phi_2(z_1^{[2]}) \\ z^{[2]}_2 &= a_1^{[1]}* w_{12}^{[2]}+a_2^{[1]}* w_{22}^{[2]}+b_2^{[2]},\quad a_2^{[2]} = \phi_2(z_2^{[2]})\\ \\ z^{[3]}_1 &= a_1^{[2]}* w_{11}^{[3]}+a_2^{[2]}* w_{21}^{[3]}+b_1^{[3]},\quad a_1^{[3]} = \phi_3(z_1^{[3]}) \\ \\\hat{y}&=a_1^{[3]} \\\\ E &= \frac{1}{2}(\hat y-y)^2 \end{aligned}z1[1]​z2[1]​z1[2]​z2[2]​z1[3]​y^​E​=x1​∗w11[1]​+x2​∗w21[1]​+b1[1]​,a1[1]​=ϕ1​(z1[1]​)=x1​∗w12[1]​+x2​∗w22[1]​+b2[1]​,a2[1]​=ϕ1​(z2[1]​)=a1[1]​∗w11[2]​+a2[1]​∗w21[2]​+b1[2]​,a1[2]​=ϕ2​(z1[2]​)=a1[1]​∗w12[2]​+a2[1]​∗w22[2]​+b2[2]​,a2[2]​=ϕ2​(z2[2]​)=a1[2]​∗w11[3]​+a2[2]​∗w21[3]​+b1[3]​,a1[3]​=ϕ3​(z1[3]​)=a1[3]​=21​(y^​−y)2​

这是数据前向传播的过程,通过前向传播我们可以算出每层的z、az、az、a以及最终的输出y^\hat yy^​

需要注意的是,上面的几个式子中,x1x_1x1​和x2x_2x2​ 是输入的测试样例的两个维度值,因此是已知的。激活函数ϕ1\phi_1ϕ1​和ϕ2\phi_2ϕ2​在进行神经网络学习之前就需要设定,因此这两个函数也是已知的,这里我们假设都是SigmoidSigmoidSigmoid。损失函数中的yyy为输入样例的标签值,因此也是已知的,综合下来,就只有每层的www和bbb是需要学习的参数

下面我们开始计算损失函数对所有参数w,bw,bw,b的导数,以损失函数对w111w_{11}^{1}w111​的偏导数为例,通过观察该神经网络的结构不难发现,改变w111w_{11}^{1}w111​的值,将通过神经网络图中的红色路线对EEE造成影响,变化路径如下图所示

则有

∂E∂w11[1]=∂E∂y^∂y^∂a1[3]∂a1[3]∂z1[3]∂z1[3]∂a1[2]∂a1[2]∂z1[2]∂z1[2]∂a1[1]∂a1[1]∂z1[1]∂z1[1]∂w11[1]+∂E∂y^∂y^∂a1[3]∂a1[3]∂z1[3]∂z1[3]∂a2[2]∂a2[2]∂z2[2]∂z2[2]∂a1[1]∂a1[1]∂z1[1]∂z1[1]∂w11[1]=∂E∂y^∂y^∂a1[3]∂a1[3]∂z1[3][∂z1[3]∂a1[2]∂a1[2]∂z1[2]∂z1[2]∂a1[1]+∂z1[3]∂a2[2]∂a2[2]∂z2[2]∂z2[2]∂a1[1]]∂a1[1]∂z1[1]∂z1[1]∂w11[1]=∂E∂y^∂y^∂a1[3]∂a1[3]∂z1[3](∑i=12∂z1[3]∂ai[2]∂ai[2]∂zi[2]∂zi[2]∂a1[1])∂a1[1]∂z1[1]∂z1[1]∂w11[1]=(y^−y)⋅1⋅ϕ′(z1[3])(∑i=12wi1[3]ϕ′(zi[2])w1i[2])ϕ′(z1[1])x1=(y^−y)ϕ′(z1[3])(∑i=12wi1[3]ϕ′(zi[2])w1i[2])ϕ′(z1[1])x1同样我们计算出∂E∂w21[1]=∂E∂y^∂y^∂a1[3]∂a1[3]∂z1[3](∑i=12∂z1[3]∂ai[2]∂ai[2]∂zi[2]∂zi[2]∂a1[1])∂a1[1]∂z1[1]∂z1[1]∂w21[1]=(y^−y)ϕ′(z1[3])(∑i=12wi1[3]ϕ′(zi[2])w1i[2])ϕ′(z1[1])x2∂E∂w12[1]=∂E∂y^∂y^∂a1[3]∂a1[3]∂z1[3](∑i=12∂z1[3]∂ai[2]∂ai[2]∂zi[2]∂zi[2]∂a2[1])∂a2[1]∂z2[1]∂z2[1]∂w12[1]=(y^−y)ϕ′(z1[3])(∑i=12wi1[3]ϕ′(zi[2])w2i[2])ϕ′(z2[1])x1∂E∂w22[1]=∂E∂y^∂y^∂a1[3]∂a1[3]∂z1[3](∑i=12∂z1[3]∂ai[2]∂ai[2]∂zi[2]∂zi[2]∂a2[1])∂a2[1]∂z2[1]∂z2[1]∂w22[1]=(y^−y)ϕ′(z1[3])(∑i=12wi1[3]ϕ′(zi[2])w2i[2])ϕ′(z2[1])x2∂E∂w11[2]=∂E∂y^∂y^∂a1[3]∂a1[3]∂z1[3]∂z1[3]∂a1[2]∂a1[2]∂z1[2]∂z1[2]∂w11[2]=(y^−y)ϕ′(z1[3])w11[3]ϕ′(z1[2])a1[1]∂E∂w21[2]=∂E∂y^∂y^∂a1[3]∂a1[3]∂z1[3]∂z1[3]∂a1[2]∂a1[2]∂z1[2]∂z1[2]∂w21[2]=(y^−y)ϕ′(z1[3])w11[3]ϕ′(z1[2])a2[1]∂E∂w12[2]=∂E∂y^∂y^∂a1[3]∂a1[3]∂z1[3]∂z1[3]∂a2[2]∂a2[2]∂z2[2]∂z2[2]∂w12[2]=(y^−y)ϕ′(z1[3])w21[3]ϕ′(z2[2])a1[1]∂E∂w22[2]=∂E∂y^∂y^∂a1[3]∂a1[3]∂z1[3]∂z1[3]∂a2[2]∂a2[2]∂z2[2]∂z2[2]∂w22[2]=(y^−y)ϕ′(z1[3])w21[3]ϕ′(z2[2])a2[1]∂E∂w11[3]=∂E∂y^∂y^∂a1[3]∂a1[3]∂z1[3]∂z1[3]∂w11[3]=(y^−y)ϕ′(z1[3])a1[2]∂E∂w21[3]=∂E∂y^∂y^∂a1[3]∂a1[3]∂z1[3]∂z1[3]∂w21[3]=(y^−y)ϕ′(z1[3])a2[2]\begin{aligned}\frac{\partial E}{\partial w_{11}^{[1]}} &= \frac{\partial E}{\partial \hat y } \frac{\partial \hat y}{\partial a_1^{[3]} }\frac{\partial a_1^{[3]}}{\partial z_1^{[3]}}\frac{\partial z_1^{[3]}}{\partial a_1^{[2]}} \frac{\partial a_1^{[2]}}{\partial z_1^{[2]}}\frac{\partial z_1^{[2]}}{\partial a_1^{[1]}} \frac{\partial a_1^{[1]}}{\partial z_1^{[1]}} \frac{\partial z_1^{[1]}}{\partial w_{11}^{[1]}} +\frac{\partial E}{\partial \hat y } \frac{\partial \hat y}{\partial a_1^{[3]} }\frac{\partial a_1^{[3]}}{\partial z_1^{[3]}}\frac{\partial z_1^{[3]}}{\partial a_2^{[2]}} \frac{\partial a_2^{[2]}}{\partial z_2^{[2]}}\frac{\partial z_2^{[2]}}{\partial a_1^{[1]}} \frac{\partial a_1^{[1]}}{\partial z_1^{[1]}} \frac{\partial z_1^{[1]}}{\partial w_{11}^{[1]}} \\&= \frac{\partial E}{\partial \hat y } \frac{\partial \hat y}{\partial a_1^{[3]} }\frac{\partial a_1^{[3]}}{\partial z_1^{[3]}}\bigg[\frac{\partial z_1^{[3]}}{\partial a_1^{[2]}} \frac{\partial a_1^{[2]}}{\partial z_1^{[2]}}\frac{\partial z_1^{[2]}}{\partial a_1^{[1]}}+\frac{\partial z_1^{[3]}}{\partial a_2^{[2]}} \frac{\partial a_2^{[2]}}{\partial z_2^{[2]}}\frac{\partial z_2^{[2]}}{\partial a_1^{[1]}}\bigg] \frac{\partial a_1^{[1]}}{\partial z_1^{[1]}} \frac{\partial z_1^{[1]}}{\partial w_{11}^{[1]}} \\ &=\frac{\partial E}{\partial \hat y } \frac{\partial \hat y}{\partial a_1^{[3]} }\frac{\partial a_1^{[3]}}{\partial z_1^{[3]}}\bigg(\sum\limits_{i=1}^{2}\frac{\partial z_1^{[3]}}{\partial a_i^{[2]}} \frac{\partial a_i^{[2]}}{\partial z_i^{[2]}}\frac{\partial z_i^{[2]}}{\partial a_1^{[1]}}\bigg)\frac{\partial a_1^{[1]}}{\partial z_1^{[1]}} \frac{\partial z_1^{[1]}}{\partial w_{11}^{[1]}} \\&=(\hat y -y)\cdot 1 \cdot \phi'(z_1^{[3]})(\sum\limits_{i=1}^2w_{i1}^{[3]}\phi'(z_{i}^{[2]})w_{1i}^{[2]})\phi'(z_1^{[1]})x_1 \\&= (\hat y -y)\phi'(z_1^{[3]})\bigg(\sum\limits_{i=1}^2w_{i1}^{[3]}\phi'(z_{i}^{[2]})w_{1i}^{[2]}\bigg)\phi'(z_1^{[1]})x_1 \\ 同样我们计算出 \\ \frac{\partial E}{\partial w_{21}^{[1]}} &=\frac{\partial E}{\partial \hat y } \frac{\partial \hat y}{\partial a_1^{[3]} }\frac{\partial a_1^{[3]}}{\partial z_1^{[3]}}\bigg(\sum\limits_{i=1}^{2}\frac{\partial z_1^{[3]}}{\partial a_i^{[2]}} \frac{\partial a_i^{[2]}}{\partial z_i^{[2]}}\frac{\partial z_i^{[2]}}{\partial a_1^{[1]}}\bigg)\frac{\partial a_1^{[1]}}{\partial z_1^{[1]}} \frac{\partial z_1^{[1]}}{\partial w_{21}^{[1]}} \\&= (\hat y -y)\phi'(z_1^{[3]})\bigg(\sum\limits_{i=1}^2w_{i1}^{[3]}\phi'(z_{i}^{[2]})w_{1i}^{[2]}\bigg)\phi'(z_1^{[1]})x_2 \\ \frac{\partial E}{\partial w_{12}^{[1]}} &=\frac{\partial E}{\partial \hat y } \frac{\partial \hat y}{\partial a_1^{[3]} }\frac{\partial a_1^{[3]}}{\partial z_1^{[3]}}\bigg(\sum\limits_{i=1}^{2}\frac{\partial z_1^{[3]}}{\partial a_i^{[2]}} \frac{\partial a_i^{[2]}}{\partial z_i^{[2]}}\frac{\partial z_i^{[2]}}{\partial a_2^{[1]}}\bigg)\frac{\partial a_2^{[1]}}{\partial z_2^{[1]}} \frac{\partial z_2^{[1]}}{\partial w_{12}^{[1]}} \\&= (\hat y -y)\phi'(z_1^{[3]})\bigg(\sum\limits_{i=1}^2w_{i1}^{[3]}\phi'(z_{i}^{[2]})w_{2i}^{[2]}\bigg)\phi'(z_2^{[1]})x_1 \\ \frac{\partial E}{\partial w_{22}^{[1]}} &=\frac{\partial E}{\partial \hat y } \frac{\partial \hat y}{\partial a_1^{[3]} }\frac{\partial a_1^{[3]}}{\partial z_1^{[3]}}\bigg(\sum\limits_{i=1}^{2}\frac{\partial z_1^{[3]}}{\partial a_i^{[2]}} \frac{\partial a_i^{[2]}}{\partial z_i^{[2]}}\frac{\partial z_i^{[2]}}{\partial a_2^{[1]}}\bigg)\frac{\partial a_2^{[1]}}{\partial z_2^{[1]}} \frac{\partial z_2^{[1]}}{\partial w_{22}^{[1]}} \\&= (\hat y -y)\phi'(z_1^{[3]})\bigg(\sum\limits_{i=1}^2w_{i1}^{[3]}\phi'(z_{i}^{[2]})w_{2i}^{[2]}\bigg)\phi'(z_2^{[1]})x_2 \\ \\ \frac{\partial E}{\partial w_{11}^{[2]}} &= \frac{\partial E}{\partial \hat y } \frac{\partial \hat y}{\partial a_1^{[3]} }\frac{\partial a_1^{[3]}}{\partial z_1^{[3]}} \frac{\partial z_1^{[3]}}{\partial a_1^{[2]}} \frac{\partial a_1^{[2]}}{\partial z_1^{[2]}} \frac{\partial z_1^{[2]}}{\partial w_{11}^{[2]}} \\&=(\hat y -y)\phi'(z_1^{[3]})w_{11}^{[3]}\phi'(z_1^{[2]})a_1^{[1]} \\ \frac{\partial E}{\partial w_{21}^{[2]}} &= \frac{\partial E}{\partial \hat y } \frac{\partial \hat y}{\partial a_1^{[3]} }\frac{\partial a_1^{[3]}}{\partial z_1^{[3]}} \frac{\partial z_1^{[3]}}{\partial a_1^{[2]}} \frac{\partial a_1^{[2]}}{\partial z_1^{[2]}} \frac{\partial z_1^{[2]}}{\partial w_{21}^{[2]}} \\&=(\hat y -y)\phi'(z_1^{[3]})w_{11}^{[3]}\phi'(z_1^{[2]})a_2^{[1]} \\ \frac{\partial E}{\partial w_{12}^{[2]}} &= \frac{\partial E}{\partial \hat y } \frac{\partial \hat y}{\partial a_1^{[3]} }\frac{\partial a_1^{[3]}}{\partial z_1^{[3]}} \frac{\partial z_1^{[3]}}{\partial a_2^{[2]}} \frac{\partial a_2^{[2]}}{\partial z_2^{[2]}} \frac{\partial z_2^{[2]}}{\partial w_{12}^{[2]}} \\&=(\hat y -y)\phi'(z_1^{[3]})w_{21}^{[3]}\phi'(z_2^{[2]})a_1^{[1]} \\ \frac{\partial E}{\partial w_{22}^{[2]}} &= \frac{\partial E}{\partial \hat y } \frac{\partial \hat y}{\partial a_1^{[3]} }\frac{\partial a_1^{[3]}}{\partial z_1^{[3]}} \frac{\partial z_1^{[3]}}{\partial a_2^{[2]}} \frac{\partial a_2^{[2]}}{\partial z_2^{[2]}} \frac{\partial z_2^{[2]}}{\partial w_{22}^{[2]}}\\&=(\hat y -y)\phi'(z_1^{[3]})w_{21}^{[3]}\phi'(z_2^{[2]})a_2^{[1]} \\ \\ \frac{\partial E}{\partial w_{11}^{[3]}} &= \frac{\partial E}{\partial \hat y } \frac{\partial \hat y}{\partial a_1^{[3]} }\frac{\partial a_1^{[3]}}{\partial z_1^{[3]}} \frac{\partial z_1^{[3]}}{\partial w_{11}^{[3]}} \\&=(\hat y -y)\phi'(z_1^{[3]})a_1^{[2]}\\ \frac{\partial E}{\partial w_{21}^{[3]}} &= \frac{\partial E}{\partial \hat y } \frac{\partial \hat y}{\partial a_1^{[3]} }\frac{\partial a_1^{[3]}}{\partial z_1^{[3]}} \frac{\partial z_1^{[3]}}{\partial w_{21}^{[3]}}\\&=(\hat y -y)\phi'(z_1^{[3]})a_2^{[2]} \end{aligned}∂w11[1]​∂E​同样我们计算出∂w21[1]​∂E​∂w12[1]​∂E​∂w22[1]​∂E​∂w11[2]​∂E​∂w21[2]​∂E​∂w12[2]​∂E​∂w22[2]​∂E​∂w11[3]​∂E​∂w21[3]​∂E​​=∂y^​∂E​∂a1[3]​∂y^​​∂z1[3]​∂a1[3]​​∂a1[2]​∂z1[3]​​∂z1[2]​∂a1[2]​​∂a1[1]​∂z1[2]​​∂z1[1]​∂a1[1]​​∂w11[1]​∂z1[1]​​+∂y^​∂E​∂a1[3]​∂y^​​∂z1[3]​∂a1[3]​​∂a2[2]​∂z1[3]​​∂z2[2]​∂a2[2]​​∂a1[1]​∂z2[2]​​∂z1[1]​∂a1[1]​​∂w11[1]​∂z1[1]​​=∂y^​∂E​∂a1[3]​∂y^​​∂z1[3]​∂a1[3]​​[∂a1[2]​∂z1[3]​​∂z1[2]​∂a1[2]​​∂a1[1]​∂z1[2]​​+∂a2[2]​∂z1[3]​​∂z2[2]​∂a2[2]​​∂a1[1]​∂z2[2]​​]∂z1[1]​∂a1[1]​​∂w11[1]​∂z1[1]​​=∂y^​∂E​∂a1[3]​∂y^​​∂z1[3]​∂a1[3]​​(i=1∑2​∂ai[2]​∂z1[3]​​∂zi[2]​∂ai[2]​​∂a1[1]​∂zi[2]​​)∂z1[1]​∂a1[1]​​∂w11[1]​∂z1[1]​​=(y^​−y)⋅1⋅ϕ′(z1[3]​)(i=1∑2​wi1[3]​ϕ′(zi[2]​)w1i[2]​)ϕ′(z1[1]​)x1​=(y^​−y)ϕ′(z1[3]​)(i=1∑2​wi1[3]​ϕ′(zi[2]​)w1i[2]​)ϕ′(z1[1]​)x1​=∂y^​∂E​∂a1[3]​∂y^​​∂z1[3]​∂a1[3]​​(i=1∑2​∂ai[2]​∂z1[3]​​∂zi[2]​∂ai[2]​​∂a1[1]​∂zi[2]​​)∂z1[1]​∂a1[1]​​∂w21[1]​∂z1[1]​​=(y^​−y)ϕ′(z1[3]​)(i=1∑2​wi1[3]​ϕ′(zi[2]​)w1i[2]​)ϕ′(z1[1]​)x2​=∂y^​∂E​∂a1[3]​∂y^​​∂z1[3]​∂a1[3]​​(i=1∑2​∂ai[2]​∂z1[3]​​∂zi[2]​∂ai[2]​​∂a2[1]​∂zi[2]​​)∂z2[1]​∂a2[1]​​∂w12[1]​∂z2[1]​​=(y^​−y)ϕ′(z1[3]​)(i=1∑2​wi1[3]​ϕ′(zi[2]​)w2i[2]​)ϕ′(z2[1]​)x1​=∂y^​∂E​∂a1[3]​∂y^​​∂z1[3]​∂a1[3]​​(i=1∑2​∂ai[2]​∂z1[3]​​∂zi[2]​∂ai[2]​​∂a2[1]​∂zi[2]​​)∂z2[1]​∂a2[1]​​∂w22[1]​∂z2[1]​​=(y^​−y)ϕ′(z1[3]​)(i=1∑2​wi1[3]​ϕ′(zi[2]​)w2i[2]​)ϕ′(z2[1]​)x2​=∂y^​∂E​∂a1[3]​∂y^​​∂z1[3]​∂a1[3]​​∂a1[2]​∂z1[3]​​∂z1[2]​∂a1[2]​​∂w11[2]​∂z1[2]​​=(y^​−y)ϕ′(z1[3]​)w11[3]​ϕ′(z1[2]​)a1[1]​=∂y^​∂E​∂a1[3]​∂y^​​∂z1[3]​∂a1[3]​​∂a1[2]​∂z1[3]​​∂z1[2]​∂a1[2]​​∂w21[2]​∂z1[2]​​=(y^​−y)ϕ′(z1[3]​)w11[3]​ϕ′(z1[2]​)a2[1]​=∂y^​∂E​∂a1[3]​∂y^​​∂z1[3]​∂a1[3]​​∂a2[2]​∂z1[3]​​∂z2[2]​∂a2[2]​​∂w12[2]​∂z2[2]​​=(y^​−y)ϕ′(z1[3]​)w21[3]​ϕ′(z2[2]​)a1[1]​=∂y^​∂E​∂a1[3]​∂y^​​∂z1[3]​∂a1[3]​​∂a2[2]​∂z1[3]​​∂z2[2]​∂a2[2]​​∂w22[2]​∂z2[2]​​=(y^​−y)ϕ′(z1[3]​)w21[3]​ϕ′(z2[2]​)a2[1]​=∂y^​∂E​∂a1[3]​∂y^​​∂z1[3]​∂a1[3]​​∂w11[3]​∂z1[3]​​=(y^​−y)ϕ′(z1[3]​)a1[2]​=∂y^​∂E​∂a1[3]​∂y^​​∂z1[3]​∂a1[3]​​∂w21[3]​∂z1[3]​​=(y^​−y)ϕ′(z1[3]​)a2[2]​​

导数计算式子中的y^、z、a\hat y、z、ay^​、z、a通过前向传播过程均已计算得出,ϕ′(z)\phi'(z)ϕ′(z)可以通过ϕ′(z)=ϕ(z)(1−ϕ(z))=a(1−a)\phi'(z)=\phi(z)(1−\phi(z)) = a(1-a)ϕ′(z)=ϕ(z)(1−ϕ(z))=a(1−a) 来计算,式子中的www参数,有初始化的默认值,因此我们可以将数据对应代入各式,从而计算出损失函数对各个参数www的偏导数。这里我们仅仅使用了链式法则,从前到后,依次计算出EEE对各个www 参数的导数,从而可以完成www的更新,对bbb计算偏导数也类似,不在单独描述。

这种从前往后计算偏导数的方式虽然也能算出结果,但是计算过程中,会发现有大量重复的计算,比如在计算∂E∂w11[1]\frac{\partial E}{\partial w_{11}^{[1]}}∂w11[1]​∂E​和∂E∂w21[1]\frac{\partial E}{\partial w_{21}^{[1]}}∂w21[1]​∂E​ 时,就只有最后标红的x1x_1x1​和x2x_2x2​是不同的

∂E∂w11[1]=(y^−y)ϕ′(z1[3])(∑i=12wi1[3]ϕ′(zi[2])w1i[2])ϕ′(z1[1])x1∂E∂w21[1]=(y^−y)ϕ′(z1[3])(∑i=12wi1[3]ϕ′(zi[2])w1i[2])ϕ′(z1[1])x2\begin{aligned}\frac{\partial E}{\partial w_{11}^{[1]}} &= \color{green}{(\hat y -y)\phi'(z_1^{[3]})\bigg(\sum\limits_{i=1}^2w_{i1}^{[3]}\phi'(z_{i}^{[2]})w_{1i}^{[2]}\bigg)\phi'(z_1^{[1]})}\color{red}{x_1 } \\ \frac{\partial E}{\partial w_{21}^{[1]}} &= \color{green}{(\hat y -y)\phi'(z_1^{[3]})\bigg(\sum\limits_{i=1}^2w_{i1}^{[3]}\phi'(z_{i}^{[2]})w_{1i}^{[2]}\bigg)\phi'(z_1^{[1]})}\color{red}{x_2}\end{aligned}∂w11[1]​∂E​∂w21[1]​∂E​​=(y^​−y)ϕ′(z1[3]​)(i=1∑2​wi1[3]​ϕ′(zi[2]​)w1i[2]​)ϕ′(z1[1]​)x1​=(y^​−y)ϕ′(z1[3]​)(i=1∑2​wi1[3]​ϕ′(zi[2]​)w1i[2]​)ϕ′(z1[1]​)x2​​

类似的重复计算还有很多,实际的神经网络模型往往十分复杂,这种大量的重复计算会造成很大的灾难。如果你有兴趣,可以按照这种方式将对bbb的偏导数也列出来,同样会发现有各种重复计算。因此我们需要一个好的算法来快速计算梯度。

为了优化梯度计算,我们尝试另外一种方式来计算,在计算∂E∂w11[1]\begin{aligned}\frac{\partial E}{\partial w_{11}^{[1]}}\end{aligned}∂w11[1]​∂E​​ 时,我们发现,在正向传播过程中,只有z1[1]=x1∗w11[1]+x2∗w21[1]+b1[1]z^{[1]}_1 = x_1* w_{11}^{[1]}+x_2* w_{21}^{[1]}+b_1^{[1]}z1[1]​=x1​∗w11[1]​+x2​∗w21[1]​+b1[1]​ 含有w21[1]w_{21}^{[1]}w21[1]​,如果我们能直接计算出 ∂E∂z1[1]\begin{aligned}\frac{\partial E}{\partial z_{1}^{[1]}}\end{aligned}∂z1[1]​∂E​​ 的值,那么就可以通过∂E∂w11[1]=∂E∂z1[1]∂z1[1]∂w11[1]=∂E∂z1[1]x1\begin{aligned}\frac{\partial E}{\partial w_{11}^{[1]}}= \frac{\partial E}{\partial z_{1}^{[1]}}\frac{\partial z_{1}^{[1]}}{\partial w_{11}^{[1]}} = \frac{\partial E}{\partial z_{1}^{[1]}}x_1\end{aligned}∂w11[1]​∂E​=∂z1[1]​∂E​∂w11[1]​∂z1[1]​​=∂z1[1]​∂E​x1​​ 式子计算对w11[1]w_{11}^{[1]}w11[1]​的偏导数,且此时对b1[1]b_1^{[1]}b1[1]​的偏导数可以通过∂E∂b1[1]=∂E∂z1[1]∂z1[1]∂b1[1]=∂E∂z1[1]\begin{aligned}\frac{\partial E}{\partial b_{1}^{[1]}} = \frac{\partial E}{\partial z_{1}^{[1]}}\frac{\partial z_{1}^{[1]}}{\partial b_{1}^{[1]}} = \frac{\partial E}{\partial z_{1}^{[1]}}\end{aligned}∂b1[1]​∂E​=∂z1[1]​∂E​∂b1[1]​∂z1[1]​​=∂z1[1]​∂E​​ 算出来,一举两得。按照这个思路,我们尝试以下计算

∂E∂w11[1]=∂E∂z1[1]∂z1[1]∂w11[1]=∂E∂z1[1]x1∂E∂z1[1]=∂E∂z1[2]∂z1[2]∂a1[1]∂a1[1]∂z1[1]+∂E∂z2[2]∂z2[2]∂a1[1]∂a1[1]∂z1[1]=∂E∂z1[2]w11[2]ϕ′(z1[1])+∂E∂z2[2]w12[2]ϕ′(z1[1])∂E∂z1[2]=∂E∂z1[3]∂z1[3]∂a1[2]∂a1[2]∂z1[2]=∂E∂z1[3]w11[3]ϕ′(z1[2])∂E∂z2[2]=∂E∂z1[3]∂z1[3]∂a2[2]∂a2[2]∂z2[2]=∂E∂z1[3]w21[3]ϕ′(z2[2])∂E∂z1[3]=∂E∂y^∂y^∂a13∂a13∂z13=(y^−y)ϕ′(z1[3])\begin{aligned}\frac{\partial E}{\partial w_{11}^{[1]}} &= \frac{\partial E}{\partial z_{1}^{[1]}}\frac{\partial z_{1}^{[1]}}{\partial w_{11}^{[1]}} = \frac{\partial E}{\partial z_{1}^{[1]}}x_1 \\ \frac{\partial E}{\partial z_{1}^{[1]}} &= \frac{\partial E}{\partial z_{1}^{[2]}}\frac{\partial z_{1}^{[2]}}{\partial a_{1}^{[1]}}\frac{\partial a_1^{[1]}}{\partial z_{1}^{[1]}}+\frac{\partial E}{\partial z_{2}^{[2]}}\frac{\partial z_{2}^{[2]}}{\partial a_{1}^{[1]}}\frac{\partial a_1^{[1]}}{\partial z_{1}^{[1]}} = \frac{\partial E}{\partial z_{1}^{[2]}}w_{11}^{[2]}\phi'(z_1^{[1]})+\frac{\partial E}{\partial z_{2}^{[2]}}w_{12}^{[2]}\phi'(z_1^{[1]}) \\\frac{\partial E}{\partial z_{1}^{[2]}} &= \frac{\partial E}{\partial z_{1}^{[3]}} \frac{\partial z_1^{[3]}}{\partial a_{1}^{[2]}} \frac{\partial a_1^{[2]}}{\partial z_{1}^{[2]}} = \frac{\partial E}{\partial z_{1}^{[3]}}w_{11}^{[3]}\phi'(z_1^{[2]}) \\ \frac{\partial E}{\partial z_{2}^{[2]}} &= \frac{\partial E}{\partial z_{1}^{[3]}} \frac{\partial z_1^{[3]}}{\partial a_{2}^{[2]}} \frac{\partial a_2^{[2]}}{\partial z_{2}^{[2]}} = \frac{\partial E}{\partial z_{1}^{[3]}}w_{21}^{[3]}\phi'(z_2^{[2]})\\\frac{\partial E}{\partial z_{1}^{[3]}}&=\frac{\partial E}{\partial \hat y}\frac{\partial \hat y}{\partial a_1^{3}}\frac{\partial a_1^{3}}{\partial z_1^{3}} = (\hat y -y)\phi'(z_1^{[3]})\end{aligned}∂w11[1]​∂E​∂z1[1]​∂E​∂z1[2]​∂E​∂z2[2]​∂E​∂z1[3]​∂E​​=∂z1[1]​∂E​∂w11[1]​∂z1[1]​​=∂z1[1]​∂E​x1​=∂z1[2]​∂E​∂a1[1]​∂z1[2]​​∂z1[1]​∂a1[1]​​+∂z2[2]​∂E​∂a1[1]​∂z2[2]​​∂z1[1]​∂a1[1]​​=∂z1[2]​∂E​w11[2]​ϕ′(z1[1]​)+∂z2[2]​∂E​w12[2]​ϕ′(z1[1]​)=∂z1[3]​∂E​∂a1[2]​∂z1[3]​​∂z1[2]​∂a1[2]​​=∂z1[3]​∂E​w11[3]​ϕ′(z1[2]​)=∂z1[3]​∂E​∂a2[2]​∂z1[3]​​∂z2[2]​∂a2[2]​​=∂z1[3]​∂E​w21[3]​ϕ′(z2[2]​)=∂y^​∂E​∂a13​∂y^​​∂z13​∂a13​​=(y^​−y)ϕ′(z1[3]​)​

我们通过这种方式计算 ∂E∂w11[1]\begin{aligned}\frac{\partial E}{\partial w_{11}^{[1]}}\end{aligned}∂w11[1]​∂E​​ ,经过一系列推导,发现我们最终只需要计算出∂E∂z1[3]\begin{aligned}\frac{\partial E}{\partial z_{1}^{[3]}}\end{aligned}∂z1[3]​∂E​​,然后从下至上层层传递,即可完成导数计算,且在往上递推的同时,有效避免了重复计算,原因是我们同时还计算出了其他的∂E∂zi[l]\begin{aligned}\frac{\partial E}{\partial z_{i}^{[l]}}\end{aligned}∂zi[l]​∂E​​ 的值,根据该值很容易算出EEE对其他关联参数的偏导数。

这就是BPBPBP算法的做的事情,通过误差逆向传播的方式,快速高效的计算EEE对各个参数的偏导数。

5. BPBPBP算法一般化推导

通过上面的例子,我们大致了解了BPBPBP算法的计算方式,现在我们将进行一般化的正式推导,为了方便书写,我们将采用向量的方式进行推导,输入仍然使用一组数据(X,y)(X,y)(X,y),并令x=a[0]x = a^{[0]}x=a[0]

则对于一般的神经网络,我们有

z[1]=W[1]a[0]+b[1],a[1]=ϕ1(z[1])z[2]=W[2]a[1]+b[2],a[2]=ϕ2(z[2])⋮z[l]=W[l]a[l−1]+b[l],a[l]=ϕl(z[l])z[l+1]=W[l+1]a[l]+b[l+1],a[l+1]=ϕl+1(z[l+1])⋮z[L]=W[L]a[L−1]+b[L],a[L]=ϕL(z[L])y^=a[L]E=12∣∣y^−y∣∣2\begin{aligned} z^{[1]} &= W^{[1]} a^{[0]}+b^{[1]}, a^{[1]} = \phi_1(z^{[1]}) \\z^{[2]} &= W^{[2]} a^{[1]}+b^{[2]}, a^{[2]} = \phi_2(z^{[2]}) \\ &\vdots \\z^{[l]} &= W^{[l]} a^{[l-1]}+b^{[l]}, a^{[l]} = \phi_{l}(z^{[l]}) \\ z^{[l+1]} &= W^{[l+1]} a^{[l]}+b^{[l+1]}, a^{[l+1]} = \phi_{l+1}(z^{[l+1]}) \\ &\vdots \\ z^{[L]} &= W^{[L]} a^{[L-1]}+b^{[L]}, a^{[L]} = \phi_L(z^{[L]}) \\\hat y &= a^{[L]} \\ E &= \frac{1}{2}||\hat y-y||^2 \end{aligned}z[1]z[2]z[l]z[l+1]z[L]y^​E​=W[1]a[0]+b[1],a[1]=ϕ1​(z[1])=W[2]a[1]+b[2],a[2]=ϕ2​(z[2])⋮=W[l]a[l−1]+b[l],a[l]=ϕl​(z[l])=W[l+1]a[l]+b[l+1],a[l+1]=ϕl+1​(z[l+1])⋮=W[L]a[L−1]+b[L],a[L]=ϕL​(z[L])=a[L]=21​∣∣y^​−y∣∣2​

令δi[l]=∂E∂zi[l]\begin{aligned}\delta_i^{[l]} = \frac{\partial E}{\partial z_{i}^{[l]}}\end{aligned}δi[l]​=∂zi[l]​∂E​​

则对于第LLL层(输出层)有

δi[L]=∂E∂zi[L]=∂E∂y^i∂y^i∂ai[L]∂ai[L]∂zi[L]=(y^i−yi)ϕ′(ziL)\begin{aligned}\delta_i^{[L]} &= \frac{\partial E}{\partial z_{i}^{[L]}} = \frac{\partial E}{\partial \hat y_i}\frac{\partial \hat y_i}{\partial a_i^{[L]}}\frac{\partial a_i^{[L]}}{\partial z_i^{[L]}} = (\hat y_i-y_i)\phi'(z_i^{L})\end{aligned}δi[L]​​=∂zi[L]​∂E​=∂y^​i​∂E​∂ai[L]​∂y^​i​​∂zi[L]​∂ai[L]​​=(y^​i​−yi​)ϕ′(ziL​)​

对于隐藏层,为了方便理解,我们用图画出第lll层与第l+1l+1l+1层的关系,如下图所示


,很明显,zi[l]z_i^{[l]}zi[l]​的值会影响l+1l+1l+1层所有的神经元,因此有公式

δi[l]=∑j=1Ml+1∂E∂zj[l+1]∂zj[l+1]∂ai[l]∂ai[l]∂zi[l]=∑j=1Ml+1δj[l+1]wij[l+1]ϕl′(zi[l])\begin{aligned}\delta_i^{[l]} &= \sum\limits_{j=1}^{M_{l+1}}\frac{\partial E}{\partial z_{j}^{[l+1]}}\frac{\partial z_{j}^{[l+1]}}{\partial a_i^{[l]}}\frac{\partial a_i^{[l]}}{\partial z_i^{[l]}} = \sum\limits_{j=1}^{M_{l+1}}\delta_j^{[l+1]}w_{ij}^{[l+1]}\phi_l'(z_i^{[l]}) \end{aligned}δi[l]​​=j=1∑Ml+1​​∂zj[l+1]​∂E​∂ai[l]​∂zj[l+1]​​∂zi[l]​∂ai[l]​​=j=1∑Ml+1​​δj[l+1]​wij[l+1]​ϕl′​(zi[l]​)​ 成立

利用该公式可层层递推,计算出δi[l]\delta_i^{[l]}δi[l]​的值,再根据

∂E∂wij[l]=∂E∂zj[l]∂zj[l]∂wij[l]=δj[l]ai[l−1]∂E∂bi[l]=∂E∂zi[l]∂zi[l]∂bi[l]=δi[l]\begin{aligned}\frac{\partial E}{\partial w_{ij}^{[l]}} &= \frac{\partial E}{\partial z_{j}^{[l]}} \frac{\partial z_{j}^{[l]}}{\partial w_{ij}^{[l]}} = \delta_j^{[l]}a_i^{[l-1]}\\\frac{\partial E}{\partial b_{i}^{[l]}} &=\frac{\partial E}{\partial z_{i}^{[l]}} \frac{\partial z_{i}^{[l]}}{\partial b_{i}^{[l]}} = \delta_i^{[l]}\end{aligned}∂wij[l]​∂E​∂bi[l]​∂E​​=∂zj[l]​∂E​∂wij[l]​∂zj[l]​​=δj[l]​ai[l−1]​=∂zi[l]​∂E​∂bi[l]​∂zi[l]​​=δi[l]​​ 计算出所有的∂E∂wij[l]、∂E∂bi[l]\begin{aligned}\frac{\partial E}{\partial w_{ij}^{[l]}} 、\frac{\partial E}{\partial b_{i}^{[l]}} \end{aligned}∂wij[l]​∂E​、∂bi[l]​∂E​​即可。

其实你会发现,BPBPBP算法的推导是十分简单的,关键在于理解和运用链式法则。

6. 误差逆向传播过程理解

我们在推导BPBPBP算法的时候,有递推公式δi[l]=∑j=1Ml+1δj[l+1]wij[l+1]ϕl′(zi[l])\begin{aligned}\delta_i^{[l]} =\sum\limits_{j=1}^{M_{l+1}}\delta_j^{[l+1]}w_{ij}^{[l+1]}\phi_l'(z_i^{[l]}) \end{aligned}δi[l]​=j=1∑Ml+1​​δj[l+1]​wij[l+1]​ϕl′​(zi[l]​)​

事实上,在逆向传播的过程中,δi[l]\delta_i^{[l]}δi[l]​是沿着神经网络的反方向有规律的进行传播的,为了方便理解,我们以三层神经网络为例,误差的逆向传播过程可通过下图表示,其结构跟前向神经网络结构是保持一致的,只不过前向传播的是信号,后向传播的是误差。通过该图也能很好的理解,后向传播算法在计算梯度时,没有重复计算,效率会比直接计算梯度高很多。

7. 关于梯度消失

还是根据公式δi[l]=∑j=1Ml+1δj[l+1]wij[l+1]ϕl′(zi[l])\begin{aligned}\delta_i^{[l]} =\sum\limits_{j=1}^{M_{l+1}}\delta_j^{[l+1]}w_{ij}^{[l+1]}\phi_l'(z_i^{[l]}) \end{aligned}δi[l]​=j=1∑Ml+1​​δj[l+1]​wij[l+1]​ϕl′​(zi[l]​)​ 进行分析。

误差从输出层反向传播时,在每一层都要乘以该层的激活函数的导数,如果激活函数使用SigmoidSigmoidSigmoid或者TanhTanhTanh时,其导数值均小于111,且输入过大或者过小时,导数均趋于000,误差经过每一层传递都会不断衰减。当网络层数很深时,梯度就会不停衰减,甚至消失,使得整个网络很难训练,这就是所谓的梯度消失问题。越靠近输入层的神经元,其梯度衰减也就越明显。可通过更换激活函数、较少神经网络层数等方式,解决梯度消失问题。

至于梯度爆炸,也能通过该公式进行分析,但是梯度爆炸往往是由于错误的初始化www,导致越靠近输入层的权重变化越大,甚至出现权值数据溢出,进而发生梯度爆炸现象,该现象处理方式相对相对简单,保证www初始化值不要过大,也可以通过梯度裁剪的方式进行粗暴的解决,如将梯度限定在[−1,1][-1,1][−1,1]之间,即如果梯度大于111,则令梯度为111。若小于−1-1−1,则令梯度为−1-1−1,这叫做GradientClippingGradient \ ClippingGradient Clipping。

8. 激活函数为什么需要零均值

SigmoidSigmoidSigmoid函数是非零均值的,其输出值均大于000,可能会导致模型收敛缓慢,这个是神经网络基础篇 遗留的问题,了解完BPBPBP算法之后,这里给出解释:根据公式∂E∂wij[l]=δj[l]ai[l−1]\begin{aligned}\frac{\partial E}{\partial w_{ij}^{[l]}} = \delta_j^{[l]}a_i^{[l-1]}\end{aligned}∂wij[l]​∂E​=δj[l]​ai[l−1]​​ 可知,如果固定jjj不变,则δj[l]\delta_j^{[l]}δj[l]​为一个固定的值,ai[l−1]a_i^{[l-1]}ai[l−1]​为l−1l-1l−1层第iii个神经元的激活值,其值大于000, 此时∂E∂wij[l]\begin{aligned}\frac{\partial E}{\partial w_{ij}^{[l]}}\end{aligned}∂wij[l]​∂E​​值的正负,取决于δj[l]\delta_j^{[l]}δj[l]​,这会导致当i=1,2,⋯,Ml−1i=1,2,\cdots,M_{l-1}i=1,2,⋯,Ml−1​ 变化时,所有的∂E∂wij[l]\begin{aligned}\frac{\partial E}{\partial w_{ij}^{[l]}}\end{aligned}∂wij[l]​∂E​​均同正或者同负,即所有的wij[l]w_{ij}^{[l]}wij[l]​(下图中红色连接线对应的权重)只能往同一个方向更新,当实际的更新需求为一部分wij[l]w_{ij}^{[l]}wij[l]​往正方向更新,一部分wij[l]w_{ij}^{[l]}wij[l]​往负方向更新时,使用SigmoidSigmoidSigmoid激活函数,无法同时满足,从而导致梯度下降缓慢。

BP算法详细推导及分析相关推荐

  1. 【转】卡尔曼滤波算法详细推导(相当值得一看)

    转载自   卡尔曼滤波算法详细推导     这一篇对预备知识的介绍还是很好的,过程与原理讲解也很到位,应该是目前看到中文里最好的讲解了. 一.预备知识 1.协方差矩阵     是一个维列向量,是的期望 ...

  2. CRC32算法详细推导(3)

    From:http://blog.csdn.net/sparkliang/article/details/5671543 CRC32算法详细推导(3) 郁闷的位逆转 看起来我们已经得到 CRC-32  ...

  3. 神经网络中BP算法的推导

    神经网络BP算法的推导 有关BP算法推导的文章数不胜数,但是好多只讲到了单样本的BP算法的推导,有些虽然讲到了多样本的BP算法的推导,但是没讲清楚甚至是讲错了的都有一些. 1. 单样本BP算法推导 关 ...

  4. Kalman滤波算法详细推导及简单匀速直线运动程序仿真(matlab)

    Kalman滤波算法详细推导及简单匀速直线运动程序仿真(matlab) 起初只是知道Kalman滤波的核心公式和会用,没有仔细研究,最近老师让讲Kalman算法,所以系统的学习了该算法,并结合匀速直线 ...

  5. 扩展卡尔曼滤波(EKF)算法详细推导及仿真(Matlab)

    前言 扩展卡尔曼滤波算法是解决非线性状态估计问题最为直接的一种处理方法,尽管EKF不是最精确的"最优"滤波器,但在过去的几十年成功地应用到许多非线性系统中.所以在学习非线性滤波问题 ...

  6. 【深度学习】感知器、线性神经网络案例应用、BP神经网络算法详细推导

    感知器.线性神经网络.BP神经网络及手写数字识别 1. 单层感知器 1.1 感知器的介绍 1.2 感知器的学习规则 1.3 感知器单输入输出示例 1.4 学习率 η\etaη 1.5 模型训练收敛条件 ...

  7. SMO算法详细推导(Sequential Minimal Optimization)

    本文针对一般性的"软判断的核函数的对偶问题的SVM",形如下式: 上式问题所在:当采样点 xix_ixi​ 选取50000个点时,则基于核函数变量Θ(xi,xj)\bm{\Thet ...

  8. RNN BPTT算法详细推导

    BPTT算法推导 BPTT全称:back-propagation through time.这里以RNN为基础,进行BPTT的推导. BPTT的推导比BP算法更难,同时所涉及的数学知识更多,主要用到了 ...

  9. lasso,lars算法详细推导过程-数学

    首发于程序员的伪文艺 关注专栏写文章 从Lasso开始说起 李新春 既可提刀立码,行遍天下:又可调参炼丹,卧于隆中. ​关注他 317 人赞同了该文章 Lasso是Least Absolute Shr ...

  10. 社会名流问题算法详细复杂度分析

    题目 在n个人中,被所有人认识却不认识所有人的人,被称作社会名流(或称名人).若存在社会名流,则找出他.可以使用的唯一方法是询问:"请问你知道那个人吗?" 请给出提问次数为O(n) ...

最新文章

  1. 使mysql查询条件区分大小写 数据库搜索中大小写敏感性
  2. 怎么操作会导致MySQL锁表
  3. redis数据库价格_阿里云数据库Redis购买流程
  4. netty worker线程数量_Dubbo线程模型
  5. mysql 查询 投影,MySql-连接查询
  6. Launchy – 快速调出你的程序
  7. MIT新研究:算法比硬件更有用
  8. printf 规定数据输出方式
  9. CSS文件未加载浏览器报警告:Resource interpreted as Stylesheet but transferred with MIME type text/html...
  10. Alibaba 表格开源工具 easyexcel 快速使用教程
  11. 资源编译器 rc .exe 的参数
  12. 编程验证足球预测算法的准确概率
  13. 2021年中国银行业金融机构普惠型小微企业贷款情况分析:贷款余额不断增加,增速也不断下降[图]
  14. 嵌入式应用之UART串口
  15. 超详细指南——开启ssh服务
  16. CMD 打开各个浏览器命令
  17. 微软系统授权 服务器虚拟化,微软远程桌面服务授权规则及建议
  18. 数学表达式基础——1 基本符号与术语
  19. 云服务器(Centos7)搭建jdk环境
  20. c# 判断路径是否存在

热门文章

  1. 基于PLC的智能化配电箱系统
  2. 360手机:360手机刷机 救砖 Twrp、Root、Magisk、360N4S骁龙版、360N5、N5S、N6、N6Lite、N6PRO、N7、N7Lite、N7PRO、Q5、Q5Plus
  3. GandCrab4.0勒索病毒解密工具
  4. 计算机中word2007,Word中2007版在电脑里发现打不开的解决方法
  5. 雷达原理---时频分析--4.小波分解在信号分析中的应用实例
  6. CCNA考试题库中英文翻译版及答案2
  7. YYtext简单使用
  8. kindle看pdf不清楚_Kindle 对 PDF 的支持真的很糟糕吗?
  9. 6678运行 linux,Ubuntu下使用Acer6678-0BM扫描仪
  10. 《遥感原理与应用》总结—遥感图像几何处理