多层网络的反向传播算法

   在 感知器的数学表达和训练算法一节中,重点学习了ANN系统中单个单元的训练学习算法,对于有阈值的感知器,它仅能表示线性决策面,即下图中的a)可表示,但是b)无法表示。在这里插入图片描述
   对于多层网络来说,它经过反向传播算法后,能够表示种类繁多的非线性曲面,下图描述了语音识别区分上下文中"h_d"的10种元音,输入的参数为F1、F2,它们由频谱中分析得出。可以看出多层网络可以表示高度非线性的决策面。
在这里插入图片描述

一、可微阈值单元

   多层网络构建的基础单元,如果采用delta法则的线性单元,则经过连接后产生的仍然是线性函数,无法表征非线性函数;如果采用了有阈值的感知器单元,则它的不连续阈值使得它不可微,不可微则不适合梯度下降学习算法。此时我们需要的是一个非线性的可微函数,故使用sigmoid单元,sigmoid函数又称logistic函数,为单调递增函数,将非常大的输入定义域映射到一个小范围的值域(0,1)。
    o = σ ( w → ⋅ x → ) o=\sigma(\overrightarrow w \cdot \overrightarrow x) o=σ(w x ) σ \sigma σ函数也可以采用其他易于计算的可微函数代替,如双曲正切函数tanh。本文设定 σ ( y ) = 1 1 + e − y \sigma(y)=\frac{1}{1+e^{-y}} σ(y)=1+ey1,有时将 e − y e^{-y} ey替换为 e − k y e^{-ky} eky k k k为常数来调节阈值函数的陡峭性。
d σ ( y ) d y = σ ( y ) ⋅ ( 1 − σ ( y ) ) \frac{\mathrm{d} \sigma(y)}{\mathrm{d} y}=\sigma(y)\cdot(1-\sigma(y)) dydσ(y)=σ(y)(1σ(y)),sigmoid函数的特点是很容易通过它的输出来表示它的导数。 用sigmoid函数表示的神经元见下图。在这里插入图片描述

二、多层网络的反向传播算法

   在多层网络中,网络的误差从单个单元的误差 E ( w → ) ≡ 1 2 ∑ d ∈ D ( t d − o d ) 2 E(\overrightarrow w)\equiv \frac{1}{2} \sum_{d\in D}(t_d-o_d)^2 E(w )21dD(tdod)2变为了 E ( w → ) ≡ 1 2 ∑ d ∈ D ∑ k ∈ o u t p u t s ( t k d − o k d ) 2 E(\overrightarrow w)\equiv \frac{1}{2} \sum_{d\in D}\sum_{k\in outputs}(t_{kd}-o_{kd})^2 E(w )21dDkoutputs(tkdokd)2 d i n p u t s = ( x 1 d , x 2 d , ⋯   , x n d ) d_{inputs}=(x_{1d},x_{2d},\cdots,x_{nd}) dinputs=(x1d,x2d,,xnd),两个误差的区别在于求和的单元数,具体见下图。
在这里插入图片描述
   反向传播算法要探索一个网络所有单元的可能权值,和训练单个单元的误差类似,梯度下降算法可用来寻找一个网络权重 w → \overrightarrow w w 的假设空间使得 E ( w → ) E(\overrightarrow w) E(w )最小。

1.反向传播算法推导

   在推导算法之前定义以下概念:

  • x j i = x_{ji}= xji=单元 j j j的第 i i i个输入(单元 i i i到单元 j j j的输入)
  • w j i = w_{ji}= wji=与单元 j j j的第 i i i个输入相关联的权重值
  • n e t j = ∑ i w j i x j i net_{j}=\sum_iw_{ji}x_{ji} netj=iwjixji (单元 j j j输入的加权和)
  • o j = o_j= oj=单元 j j j计算出的输出
  • t j = t_j= tj=单元 j j j的目标输出
  • σ = \sigma= σ=sigmoid函数
  • o u t p u t s = outputs= outputs=网络最后一层的单元的集合
  • D o w n s t e a m ( j ) = Downsteam(j)= Downsteam(j)=与单元 j j j直接关联的下一层单元集合(单元 j j j的输出是 D o w n s t e a m ( j ) Downsteam(j) Downsteam(j)集合单元的输入)

   在 感知器的数学表达和训练算法一节中,随机梯度算法,每训练一个样例d,采用这个样例对应的误差 E d E_d Ed的梯度修改权值。那么对于网络来说,每一个训练样例d,在多层网络中的单元 j j j的每个权值 w j i w_{ji} wji的变化 Δ w j i ≡ − η ∂ E d ∂ w j i \Delta w_{ji}\equiv-\eta \frac{\partial E_d}{\partial w_{ji}} ΔwjiηwjiEd E d ( w → ) ≡ 1 2 ∑ k ∈ o u t p u t s ( t k − o k ) 2 E_d(\overrightarrow w)\equiv \frac{1}{2} \sum_{k\in outputs}(t_{k}-o_{k})^2 Ed(w )21koutputs(tkok)2
    ∂ E d ∂ w j i = ∂ E d ∂ n e t j ∂ n e t j ∂ w j i = ∂ E d ∂ n e t j ∑ i w j i x j i ∂ w j i = ∂ E d ∂ n e t j x j i \frac{\partial E_d}{\partial w_{ji}}=\frac{\partial E_d}{\partial net_{j}}\frac{\partial net_j}{\partial w_{ji}}=\frac{\partial E_d}{\partial net_{j}}\frac{\sum_iw_{ji}x_{ji}}{\partial w_{ji}}=\frac{\partial E_d}{\partial net_{j}}x_{ji} wjiEd=netjEdwjinetj=netjEdwjiiwjixji=netjEdxji,这里采用链式规则, w j i w_{ji} wji只能通过 n e t j net_j netj影响网络的其他部分,所以误差 E d E_d Ed先对它求偏导。对剩下的 ∂ E d ∂ n e t j \frac{\partial E_d}{\partial net_{j}} netjEd求偏导分为两种情况。

  • case 1:单元 j j j为网络中最后一层的输出单元
    在这里插入图片描述
       如上图所示,此时 n e t j net_j netj仅能够通过代入sigmoid函数,计算得出 o j o_j oj来影响误差 E d E_d Ed,从而影响整个网络,因此再次利用链式规则得出 ∂ E d ∂ n e t j = ∂ E d ∂ o j ∂ o j ∂ n e t j \frac{\partial E_d}{\partial net_{j}}=\frac{\partial E_d}{\partial o_{j}}\frac{\partial o_j}{\partial net_{j}} netjEd=ojEdnetjoj
       (1) ∂ E d ∂ o j \frac{\partial E_d}{\partial o_{j}} ojEd = ∂ ∂ o j 1 2 ∑ k ∈ o u t p u t s ( t k − o k ) 2 =\frac{\partial}{\partial o_{j}}\frac{1}{2}\sum_{k\in outputs}{(t_k-o_k)^2} =oj21koutputs(tkok)2,对于所有的输出 o u t p u t s outputs outputs,除了 k = j k=j k=j其他的导数都为0,故 ∂ E d ∂ o j = ∂ ∂ o j 1 2 ( t j − o j ) 2 = − ( t j − o j ) \frac{\partial E_d}{\partial o_{j}}=\frac{\partial}{\partial o_{j}}\frac{1}{2}{(t_j-o_j)^2}=-(t_j-o_j) ojEd=oj21(tjoj)2=(tjoj)

       (2) ∂ o j ∂ n e t j \frac{\partial o_j}{\partial net_{j}} netjoj = ∂ σ ( n e t j ) ∂ n e t j = σ ( n e t j ) ( 1 − σ ( n e t j ) ) = o j ( 1 − o j ) =\frac{\partial \sigma (net_j)}{\partial net_{j}}= \sigma (net_j)( 1-\sigma (net_j))=o_j(1-o_j) =netjσ(netj)=σ(netj)(1σ(netj))=oj(1oj)
       (3)通过(1)和(2)分析可知, ∂ E d ∂ n e t j = − ( t j − o j ) o j ( 1 − o j ) \frac{\partial E_d}{\partial net_{j}}=-(t_j-o_j)o_j(1-o_j) netjEd=(tjoj)oj(1oj) Δ w j i ≡ − η ∂ E d ∂ w j i = − η ∂ E d ∂ n e t j x j i = η ( t j − o j ) o j ( 1 − o j ) x j i \Delta w_{ji}\equiv-\eta \frac{\partial E_d}{\partial w_{ji}}=-\eta\frac{\partial E_d}{\partial net_{j}}x_{ji}=\eta(t_j-o_j)o_j(1-o_j)x_{ji} ΔwjiηwjiEd=ηnetjEdxji=η(tjoj)oj(1oj)xji,这里可定义 δ j \delta_j δj表示 − ∂ E d ∂ n e t j = ( t j − o j ) o j ( 1 − o j ) -\frac{\partial E_d}{\partial net_{j}}=(t_j-o_j)o_j(1-o_j) netjEd=(tjoj)oj(1oj)

  • case 2:单元 j j j为网络中隐藏层的隐藏单元
    在这里插入图片描述
       如图所示,通过单元 j j j只能通过它所有的直接下游单元的集合影响(直接或者间接影响)网络的输出,从而影响 E d E_d Ed。因此再次利用链式规则得出 ∂ E d ∂ n e t j = ∑ k ∈ D o w n s t r e a m s ( j ) ∂ E d ∂ n e t k ∂ n e t k ∂ n e t j = ∑ k ∈ D o w n s t r e a m s ( j ) − δ k ∂ n e t k ∂ o j ∂ o j ∂ n e t j \frac{\partial E_d}{\partial net_{j}}=\sum_{k\in Downstreams(j)}\frac{\partial E_d}{\partial net_{k}}\frac{\partial net_k}{\partial net_{j}}=\sum_{k\in Downstreams(j)}-\delta_k\frac{\partial net_k}{\partial o_{j}}\frac{\partial o_j}{\partial net_{j}} netjEd=kDownstreams(j)netkEdnetjnetk=kDownstreams(j)δkojnetknetjoj
       (1) ∂ n e t k ∂ o j \frac{\partial net_k}{\partial o_{j}} ojnetk = ∂ ∑ j w k j x k j ∂ o j = ∑ j ∂ w k j o j ∂ o j = w k j =\frac{\partial \sum_j{w_{kj}x_{kj}}}{\partial o_{j}}=\frac{ \sum_j\partial{w_{kj}o _j}}{\partial o_{j}}=w_{kj} =ojjwkjxkj=ojjwkjoj=wkj
       (2) ∂ o j ∂ n e t j \frac{\partial o_j}{\partial net_{j}} netjoj = ∂ σ ( n e t j ) ∂ n e t j = σ ( n e t j ) ( 1 − σ ( n e t j ) ) = o j ( 1 − o j ) =\frac{\partial \sigma (net_j)}{\partial net_{j}}= \sigma (net_j)( 1-\sigma (net_j))=o_j(1-o_j) =netjσ(netj)=σ(netj)(1σ(netj))=oj(1oj)
       (3)通过(1)和(2)分析可知, ∂ E d ∂ n e t j = ∑ k ∈ D o w n s t r e a m s ( j ) − δ k w k j o j ( 1 − o j ) = o j ( 1 − o j ) ∑ k ∈ D o w n s t r e a m s ( j ) − δ k w k j \frac{\partial E_d}{\partial net_{j}}=\sum_{k\in Downstreams(j)}-\delta_kw_{kj}o_j(1-o_j)=o_j(1-o_j)\sum_{k\in Downstreams(j)}-\delta_kw_{kj} netjEd=kDownstreams(j)δkwkjoj(1oj)=oj(1oj)kDownstreams(j)δkwkj,定义 δ j \delta_j δj表示 − ∂ E d ∂ n e t j -\frac{\partial E_d}{\partial net_{j}} netjEd,则 Δ w j i ≡ − η ∂ E d ∂ w j i = − η ∂ E d ∂ n e t j x j i = η δ j x j i \Delta w_{ji}\equiv-\eta \frac{\partial E_d}{\partial w_{ji}}=-\eta\frac{\partial E_d}{\partial net_{j}}x_{ji}=\eta\delta_jx_{ji} ΔwjiηwjiEd=ηnetjEdxji=ηδjxji

注: D o w n s t e a m ( j ) Downsteam(j) Downsteam(j)为最后一层输出层,则case 2中的 δ k \delta_k δk按照case1的规则去计算;若 D o w n s t e a m ( j ) Downsteam(j) Downsteam(j)为隐藏层,则case 2中的 δ k \delta_k δk仍按照case2的规则去计算,具体见下3.任意深度层次网络的学习算法表示

2.两层sigmoid单元网络训练算法的表示

在这里插入图片描述
对于训练样例集:

  • 创建 n i n n_{in} nin个输入、创建 n h i d d e n n_{hidden} nhidden个隐藏单元、创建 n o u t n_{out} nout个输出单元的网络
  • 初始化网络中所有的权重值为较小的随机值
  • 在遇到终止条件之前:
    对于每一个样例 &lt; x → , t → &gt; &lt;\overrightarrow x,\overrightarrow t&gt; <x ,t >:
    把输入沿着网络前向传播
      a、把实例 x → \overrightarrow x x 输入网络中,计算网络中每个单元 u u u的输出 o u o_u ou
      b、对于网络中的每个输出单元 k k k,计算它的误差项 δ k \delta_k δk,由1.反向传播算法推导的case 1可知 δ k ← ( t k − o k ) o k ( 1 − o k ) \delta_k \leftarrow (t_k-o_k)o_k(1-o_k) δk(tkok)ok(1ok)
      c、对于网络中的每个隐藏单元 h h h,计算它的误差项 δ h \delta_h δh,由1.反向传播算法推导的case 2可知 δ h ← o h ( 1 − o h ) ∑ p ∈ D o w n s t r e a m s ( h ) δ p w p h \delta_h \leftarrow o_h(1-o_h)\sum_{p\in Downstreams(h)}\delta_pw_{ph} δhoh(1oh)pDownstreams(h)δpwph,这里为case 2的特例,即该隐藏单元的下一层不为隐藏单元,而为输出单元。因此 D o w n s t r e a m s ( h ) = o u t p u t s Downstreams(h)=outputs Downstreams(h)=outputs δ p = δ k \delta_p=\delta_k δp=δk w p h = w k h w_{ph}=w_{kh} wph=wkh。则 δ k ← o h ( 1 − o h ) ∑ k ∈ o u t p u t s δ k w k h \delta_k \leftarrow o_h(1-o_h)\sum_{k\in outputs}\delta_kw_{kh} δkoh(1oh)koutputsδkwkh
      d、更新网络中所有的权值 w j i w_{ji} wji w j i ← w j i + Δ w j i w_{ji}\leftarrow w_{ji}+\Delta w_{ji} wjiwji+Δwji,其中 Δ w j i = η δ j x j i \Delta w_{ji}=\eta\delta_jx_{ji} Δwji=ηδjxji

注1:发现数学之美
Δ w j i \Delta w_{ji} Δwji感知器的数学表达和训练算法一文中的一个感知机采用随机梯度算法的 Δ w i \Delta w_{i} Δwi进行比较会发现很有趣的两个数学现象:

  • 对于输出单元来说,其 Δ w j i = η ( t j − o j ) o j ( 1 − o j ) x j i \Delta w_{ji}=\eta (t_j-o_j)o_j(1-o_j)x_{ji} Δwji=η(tjoj)oj(1oj)xji,感知器随机梯度算法中 Δ w i = η ( t − o ) x i \Delta w_i=\eta(t-o)x_{i} Δwi=η(to)xi,从公式上来看只是乘了一个 o j ( 1 − o j ) o_j(1-o_j) oj(1oj),有意思的是它恰恰是sigmoid函数的导数,而我们这一节中输出单元和感知器区别就在于,将输出函数由原来的 o = w → ⋅ x → o=\overrightarrow w \cdot \overrightarrow x o=w x 变为了 o = σ ( w → ⋅ x → ) o=\sigma(\overrightarrow w \cdot \overrightarrow x) o=σ(w x ),正所谓有什么样的因就有什么样的果。
  • 对于隐藏单元来说,其 Δ w j i = η o j ( 1 − o j ) ∑ k ∈ o u t p u t s w k j δ k x j i \Delta w_{ji}=\eta o_j(1-o_j)\sum_{k\in outputs}w_{kj}\delta_kx_{ji} Δwji=ηoj(1oj)koutputswkjδkxji,和 Δ w i = η ( t − o ) x i \Delta w_i=\eta(t-o)x_{i} Δwi=η(to)xi相比,除了有sigmoid函数的导数 o j ( 1 − o j ) o_j(1-o_j) oj(1oj)的影响外,还有 ∑ k ∈ o u t p u t s w k j δ k \sum_{k\in outputs}w_{kj}\delta_k koutputswkjδk的影响。它所代表的的含义是,该单元为隐藏层单元不能直接通过形如 ( t j − o j ) (t_j-o_j) (tjoj)的方式影响网络误差,只能间接通过下一层(输出层)影响网络误差。对输出层单元集合的权重为 w k j w_{kj} wkj,输出单元集合的直接影响为 δ k \delta_k δk w k j w_{kj} wkj δ k \delta_k δk相乘求和所代表的就是隐藏单元的所有间接影响和, w k j w_{kj} wkj又可叫做隐藏单元 j j j对输出单元 k k k的误差应负责的程度。

注2:增加冲量项
   将 Δ w j i ( n ) = η δ j x j i \Delta w_{ji}(n)=\eta\delta_jx_{ji} Δwji(n)=ηδjxji,变为 Δ w j i = η δ j x j i + α Δ w j i ( n − 1 ) \Delta w_{ji}=\eta\delta_jx_{ji}+\alpha\Delta w_{ji}(n-1) Δwji=ηδjxji+αΔwji(n1)
0 ≤ α &lt; 1 0\leq \alpha&lt;1 0α<1称为冲量常数, α Δ w j i ( n − 1 ) \alpha\Delta w_{ji}(n-1) αΔwji(n1)称为冲量项。 α \alpha α的作用在于增加冲量,使下一次的迭代的变化值,仍然能够按照上一次迭代的变化方向进行,没有该冲量项很可能 Δ w j i \Delta w_{ji} Δwji会在局部误差极小值 E E E或误差不变化 E E E的区域停止更新,增加以后则可以让 Δ w j i \Delta w_{ji} Δwji离开局部误差最小值 E E E和误差不变化 E E E的区域,同时在梯度不变的区域冲量项也起到增大搜索步长、加快收敛的作用。

3.任意深度层次有向无环网络训练算法的表示

在这里插入图片描述
对于训练样例集:

  • 创建 n i n n_{in} nin个输入、创建 m m m n m h i d d e n n_{m_{hidden}} nmhidden个隐藏单元、创建 n o u t n_{out} nout个输出单元的网络
  • 初始化网络中所有的权重值为较小的随机值
  • 在遇到终止条件之前:
    对于每一个样例 &lt; x → , t → &gt; &lt;\overrightarrow x,\overrightarrow t&gt; <x ,t >:
    把输入沿着网络前向传播
      a、把实例 x → \overrightarrow x x 输入网络中,计算网络中每个单元 u u u的输出 o u o_u ou
      b、对于网络中的每个输出单元 k k k,计算它的误差项 δ k \delta_k δk,由1.反向传播算法推导的case 1可知 δ k ← ( t k − o k ) o k ( 1 − o k ) \delta_k \leftarrow (t_k-o_k)o_k(1-o_k) δk(tkok)ok(1ok)
      c、对于网络中的输出层的每个隐藏单元 h h h,计算它的误差项 δ h \delta_h δh,由1.反向传播算法推导的case 2可知 δ h ← o h ( 1 − o h ) ∑ p ∈ D o w n s t r e a m s ( h ) δ p w p h \delta_h \leftarrow o_h(1-o_h)\sum_{p\in Downstreams(h)}\delta_pw_{ph} δhoh(1oh)pDownstreams(h)δpwph第一次计算输出层后倒数第一层的隐藏单元(网络中倒数第二层,即m+1层) δ 第 m + 1 层 h ← o 第 m + 1 层 h ( 1 − o 第 m + 1 层 h ) ∑ p ∈ o u t p u t s δ p w p 第 m + 1 层 h \delta_{第m+1层h} \leftarrow o_{第m+1层h}(1-o_{第m+1层h})\sum_{p\in outputs}\delta_pw_{p{第m+1层h}} δm+1hom+1h(1om+1h)poutputsδpwpm+1h,此时 δ p \delta_p δp δ k \delta_k δk相同;第二次计算输出单元后倒数第二层(网络中的第三层,即m层) δ 第 m 层 h ← o 第 m 层 h ( 1 − o 第 m 层 h ) ∑ p ∈ 第 m + 1 层 h δ p w p 第 m 层 h \delta_{第m层h} \leftarrow o_{第m层h}(1-o_{第m层h})\sum_{p\in第m+1层h }\delta_pw_{p{第m层h}} δmhomh(1omh)pm+1hδpwpmh,此时 δ p \delta_p δp δ m + 1 层 h \delta_{m+1层h} δm+1h相同,一直执行c步骤,最后一次计算时隐藏单元变为网络中的输入层的前一层(网络正数第二层)。
      d、更新网络中所有的权值 w j i w_{ji} wji w j i ← w j i + Δ w j i w_{ji}\leftarrow w_{ji}+\Delta w_{ji} wjiwji+Δwji,其中 Δ w j i = η δ j x j i \Delta w_{ji}=\eta\delta_jx_{ji} Δwji=ηδjxji

三、小结

    综上所述,可知不管是在二层sigmoid的前馈网络,还是在任意多层的有向无环神经网络中,每个样例输入后,沿着网络中inputs到ouputs的方向,最终得出经过网络的输出值。而在训练神经网络的算法却恰恰相反,它从ouputs到inputs方向逐层计算每层神经单元 j j j的误差项 δ j \delta_{j} δj,从而最终得出所有 Δ w j i \Delta w_{ji} Δwji w j i w_{ji} wji。所以该训练法则称为反向传播算法,其算法思想和递归函数类似。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值