Luozm +

机器学习课程笔记-5

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

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

L = 网络层数 sl =l层的神经元数目(不包括偏置项) K = 输出类别数

Classification

Cost function for NN:

J(Θ)=1mi=1mk=1K[yk(i)log((hΘ(x(i)))k)+(1yk(i))log(1(hΘ(x(i)))k)]+λ2ml=1L1i=1slj=1sl+1(Θj,i(l))2

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

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

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

For 训练样本 t=1 to m:

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

由此我们更新矩阵:

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

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

最终我们得到:Θij(l)J(Θ)

二元分类时:

J(Θ)=1mt=1mk=1K[yk(t) log(hΘ(x(t)))k+(1yk(t)) log(1hΘ(x(t))k)]+λ2ml=1L1i=1slj=1sl+1(Θj,i(l))2

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

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

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

bp_intuition

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

© Luozm . All rights reserved. | Top

Life

Theory

Develop