Loading [MathJax]/jax/output/CommonHTML/jax.js

Blog

懒癌晚期


Project maintained by VirusPC Hosted on GitHub Pages — Theme by mattgraham

Back Home

bp神经网络


代价函数

反向传播算法

图示:
four layers network
对给定的训练集:{(x(1),y(1)),...,(x(m),y(m))}
δ(l)j 表示样本在第l层的第j个神经元的误差。
δ(l)j=z(i)jcost(i)
设置 Δ(l)i,j

  1. a(1):=x(t)
  2. 执行正向传播(forward propagation)来计算 a(l) (l=2,3,…L) :
    a(1)=xz(2)=Θ(1)a(1)a(2)=g(z(2))(adda(2)0)z(3)=Θ(2)a(2)a(3)=g(z(3))(adda(3)0)z(3)=Θ(3)a(3)a(4)=hΘ(x)=g(z(4))()
  3. 反向传播部分的第一步是计算 δ(L)=a(L)y(t)
    其中L是我们的总层数,a(L) 是最后一层的激励单元的输出向量。所以我们最后一层的“误差值”就是我们最后一层的输出与正确值的差。
    δ(L)j=a(L)jyj=(hθ(x))jyj
  4. 为了得到最后一层之前所有层的delta值,我们可以使用一个方程来从右到左求解。
    δ(l)=z(l)jcost(i)=(Θ(l))Tδ(l+1).g(z(l))(l=2,3,...,L1)g(z(l))=a(l).(1a(l))
  5. 更新delta矩阵(将所有样本的偏差累加起来): Θ(l)i,jcost(i)=aljδ(l+1)iΔ(l)i,j:=Δ(l)i,j+a(l)jδ(l+1)i
    或者向量化:
    Δ(l):=Δ(l)+δ(l+1)(a(l))T
    由此我们得到我们新的delta矩阵
    • D(l)i,j:=1m(Δ(l)i,j+λΘ(l)i,j), if j0
    • D(l)i,j:=1mΔ(l)i,j, if j=0
      这个大写的delta矩阵D作为累加器随着时间的推移来把我们的值加起来,并且最终计算我们的骗到。由此我们得到:
      Θ(l)i,jJ(Θ)=a(l)jδ(l+1)i

伪代码

Set Δ(l)i,j=0(for all l,i,j)For i=1 to mSet a(1)=x(i)Perform forward propagation to compute a(l) for l=2,3,...,LUsing y(i),compute δ(L2),...,δ(2)Compute δ(L1),δ(L2),...,δ(2)Δ(l)i,j:=Δ(l)i,j+a(l)jδ(l+1)iD(l)i,j:=1mΔ(l)i,j+λΘ(l)i,jif j0D(l)i,j:=1mΔ(l)i,jif j=0 其中:
Θ(l)i,jJ(Θ)=D(l)i,j

推导

图示:
formula_picture
推导过程:
formula_derivation


课程链接: