机器学习课程笔记-5
2017-03-26
Notes about Andrew Ng's Machine Learning course on Coursera-part 5
原创文章,转载请注明:转自Luozm's Blog1. Neural Networks–Learning
1.1 Cost function
LL = 网络层数 slsl =l层的神经元数目(不包括偏置项) KK = 输出类别数
Classification
Cost function for NN:
J(Θ)=−1mm∑i=1K∑k=1[y(i)klog((hΘ(x(i)))k)+(1−y(i)k)log(1−(hΘ(x(i)))k)]+λ2mL−1∑l=1sl∑i=1sl+1∑j=1(Θ(l)j,i)2J(Θ)=−1mm∑i=1K∑k=1[y(i)klog((hΘ(x(i)))k)+(1−y(i)k)log(1−(hΘ(x(i)))k)]+λ2mL−1∑l=1sl∑i=1sl+1∑j=1(Θ(l)j,i)2其中,hθ(x)∈RKhθ(x)∈RK,(hθ(x))i=ith(hθ(x))i=ith 输出。
1.2 Backpropagation
如何对每个参数求偏导?也就是∂∂Θ(l)i,jJ(Θ)∂∂Θ(l)i,jJ(Θ)
具体步骤:
准备工作:给定训练集 {(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:
- 令 a(1):=x(t)a(1):=x(t)
- 对于 l=2,3,…,Ll=2,3,…,L,正向计算所有输出 a(l)a(l)
- 使用y(t)y(t) 来计算 δ(L)=a(L)−y(t)δ(L)=a(L)−y(t)(这是输出层的误差)
- 使用 δ(l)=((Θ(l))Tδ(l+1)).∗a(l).∗(1−a(l))δ(l)=((Θ(l))Tδ(l+1)).∗a(l).∗(1−a(l))(也就是每层线性组合及sigmoid的局部偏导数)来计算 δ(L−1),δ(L−2),…,δ(2)δ(L−1),δ(L−2),…,δ(2)
- Δ(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(Θ)
1.3 BP–Intuition
二元分类时:
J(Θ)=−1mm∑t=1K∑k=1[y(t)k log(hΘ(x(t)))k+(1−y(t)k) log(1−hΘ(x(t))k)]+λ2mL−1∑l=1sl∑i=1sl+1∑j=1(Θ(l)j,i)2J(Θ)=−1mm∑t=1K∑k=1[y(t)k log(hΘ(x(t)))k+(1−y(t)k) log(1−hΘ(x(t))k)]+λ2mL−1∑l=1sl∑i=1sl+1∑j=1(Θ(l)j,i)2其中一个样本(忽略正则化):
cost(t)=y(t) log(hΘ(x(t)))+(1−y(t)) log(1−hΘ(x(t)))cost(t)=y(t) log(hΘ(x(t)))+(1−y(t)) log(1−hΘ(x(t)))最后一层的误差正式地说应该是损失函数对于scores function的偏导数: δ(l)j=∂∂z(l)jcost(t)
注意有分支结构时,反向传播求导应该相加:δ(2)2=Θ(2)12∗δ(3)1+Θ(2)22∗δ(3)2