Luozm +

机器学习课程笔记-5

Notes about Andrew Ng's Machine Learning course on Coursera-part 5

原创文章,转载请注明:转自Luozm's Blog

LL = 网络层数 slsl =l层的神经元数目(不包括偏置项) KK = 输出类别数

Classification

Cost function for NN:

J(Θ)=1mmi=1Kk=1[y(i)klog((hΘ(x(i)))k)+(1y(i)k)log(1(hΘ(x(i)))k)]+λ2mL1l=1sli=1sl+1j=1(Θ(l)j,i)2J(Θ)=1mmi=1Kk=1[y(i)klog((hΘ(x(i)))k)+(1y(i)k)log(1(hΘ(x(i)))k)]+λ2mL1l=1sli=1sl+1j=1(Θ(l)j,i)2

其中,hθ(x)RKhθ(x)RK(hθ(x))i=ith(hθ(x))i=ith 输出。

如何对每个参数求偏导?也就是Θ(l)i,jJ(Θ)Θ(l)i,jJ(Θ)

BP algorithm 具体步骤: 准备工作:给定训练集 {(x(1),y(1))(x(m),y(m))}{(x(1),y(1))(x(m),y(m))},对于所有的 (l,i,j)(l,i,j),令 Δ(l)i,j=0Δ(l)i,j=0

For 训练样本 t=1 to m:

  1. a(1):=x(t)a(1):=x(t)
  2. 对于 l=2,3,,Ll=2,3,,L,正向计算所有输出 a(l)a(l) forward
  3. 使用y(t)y(t) 来计算 δ(L)=a(L)y(t)δ(L)=a(L)y(t)(这是输出层的误差)
  4. 使用 δ(l)=((Θ(l))Tδ(l+1)).a(l).(1a(l))δ(l)=((Θ(l))Tδ(l+1)).a(l).(1a(l))(也就是每层线性组合及sigmoid的局部偏导数)来计算 δ(L1),δ(L2),,δ(2)δ(L1),δ(L2),,δ(2)
  5. Δ(l)i,j:=Δ(l)i,j+a(l)jδ(l+1)iΔ(l)i,j:=Δ(l)i,j+a(l)jδ(l+1)i(或向量版本:Δ(l):=Δ(l)+δ(l+1)(a(l))TΔ(l):=Δ(l)+δ(l+1)(a(l))T

由此我们更新矩阵:

D(l)i,j:=1m(Δ(l)i,j+λΘ(l)i,j)D(l)i,j:=1m(Δ(l)i,j+λΘ(l)i,j)(正则化)

D(l)i,j:=1mΔ(l)i,jD(l)i,j:=1mΔ(l)i,j(偏置不需要正则化)

最终我们得到:Θ(l)ijJ(Θ)Θ(l)ijJ(Θ)

二元分类时:

J(Θ)=1mmt=1Kk=1[y(t)k log(hΘ(x(t)))k+(1y(t)k) log(1hΘ(x(t))k)]+λ2mL1l=1sli=1sl+1j=1(Θ(l)j,i)2J(Θ)=1mmt=1Kk=1[y(t)k log(hΘ(x(t)))k+(1y(t)k) log(1hΘ(x(t))k)]+λ2mL1l=1sli=1sl+1j=1(Θ(l)j,i)2

其中一个样本(忽略正则化):

cost(t)=y(t) log(hΘ(x(t)))+(1y(t)) log(1hΘ(x(t)))cost(t)=y(t) log(hΘ(x(t)))+(1y(t)) log(1hΘ(x(t)))

最后一层的误差正式地说应该是损失函数对于scores function的偏导数: δ(l)j=z(l)jcost(t)

bp_intuition

注意有分支结构时,反向传播求导应该相加:δ(2)2=Θ(2)12δ(3)1+Θ(2)22δ(3)2

© Luozm . All rights reserved. | Top

Life

Theory

Develop