2017-03-26
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(Θ)=−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)∈RK,(hθ(x))i=ith 输出。
如何对每个参数求偏导?也就是∂∂Θ(l)i,jJ(Θ)
具体步骤:
准备工作:给定训练集 {(x(1),y(1))⋯(x(m),y(m))},对于所有的 (l,i,j),令 Δ(l)i,j=0
For 训练样本 t=1 to m:
- 令 a(1):=x(t)
- 对于 l=2,3,…,L,正向计算所有输出 a(l)

- 使用y(t) 来计算 δ(L)=a(L)−y(t)(这是输出层的误差)
- 使用 δ(l)=((Θ(l))Tδ(l+1)).∗a(l).∗(1−a(l))(也就是每层线性组合及sigmoid的局部偏导数)来计算 δ(L−1),δ(L−2),…,δ(2)
- Δ(l)i,j:=Δ(l)i,j+a(l)jδ(l+1)i(或向量版本:Δ(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)ijJ(Θ)
二元分类时:
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)2
其中一个样本(忽略正则化):
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