版权声明:本文为博主原创文章,如有转载请标注来源。 https://blog.csdn.net/shengchaohua163/article/details/79747381
神经网络 相关数学公式证明
0. Coursera机器学习神经网络的其他笔记:
- Coursera机器学习笔记 第4周 第八章 神经网络:表述(一)
- Coursera机器学习笔记 第4周 第八章 神经网络:表述(二)
- Coursera机器学习笔记 第5周 第九章 神经网络:学习(一)
- Coursera机器学习笔记 第5周 第九章 神经网络:学习(二)
1. 神经网络的回顾
我们仍然沿用上图中的神经网络结构。该网络共有四层,输入层有3个神经元,第二、三层均有5个神经元,输出层有4个神经元(偏置单元未画出),所以权重矩阵
Θ(1),Θ(2),Θ(3)
的大小分别是
[5×4],[5×6],[4×6]
。权重矩阵如下:
Θ(1)=⎡⎣⎢⎢Θ(1)10...Θ(1)50.........Θ(1)13...Θ(1)53⎤⎦⎥⎥Θ(2)=⎡⎣⎢⎢Θ(2)10...Θ(2)50.........Θ(2)15...Θ(2)55⎤⎦⎥⎥Θ(3)=⎡⎣⎢⎢Θ(3)10...Θ(3)40.........Θ(1)15...Θ(1)45⎤⎦⎥⎥
为了和代价函数的形式统一,我们用 j 和 i 分别表示权重矩阵的行和列。注意:j=1 代表矩阵的第 1 行,i=1 代表矩阵的第 2 列(第 1 列相当于线性回归中的
θ0
)。
神经网络的一般化代价函数为:
J(Θ)=−1m∑t=1m∑k=1K[y(t)k log(hΘ(x(t))k)+(1−y(t)k) log(1−hΘ(x(t))k)]+λ2m∑l=1L−1∑i=1sl∑j=1sl+1(Θ(l)j,i)2
我们只用一条数据(x,y),并且忽略正则化,则代价函数(K=4)为:
Cost(x)=∑k=1KCost(x)kCost(x)k=−[yk log(hΘ(x)k)+(1−yk) log(1−hΘ(x)k)]
2. 证明
∂Cost(x)∂Θ(3)
针对该神经网络,声明一些事实:
-
hΘ(x)
就是
a(4)
,即
hΘ(x)=a(4)
-
a(4)=g(z(4))
,且
∂a(4)∂z(4)=a(4)(1−a(4))
-
z(4)j=∑5i=0Θ(3)jia(3)i
,其中
1⩽j⩽4
- j=1 代表矩阵的第 1 行,i=1 代表矩阵的第 2 列(第 1 列相当于线性回归中的
θ0
)
举例:
∂Cost(x)∂Θ(3)10=∂∑Kk=1Cost(x)k∂Θ(3)10=∑k=1K∂Cost(x)k∂Θ(3)10=∂Cost(x)1∂Θ(3)10+0+0+0=∂Cost(x)1∂hΘ(x)1×∂hΘ(x)1∂z(4)1×∂z(4)1∂Θ(3)10=−[y11hΘ(x)1+(1−y1)−11−hΘ(x)1]×hΘ(x)1(1−hΘ(x)1)×a(3)0=[hΘ(x)1−y1]a(3)0=[a(4)1−y1]a(3)0
∂Cost(x)∂Θ(3)20=0+∂Cost(x)2∂Θ(3)20+0+0=∂Cost(x)2∂hΘ(x)2×∂hΘ(x)2∂z(4)2×∂z(4)2∂Θ(3)20=−[y21hΘ(x)2+(1−y2)−11−hΘ(x)2]×hΘ(x)2(1−hΘ(x)2)×a(3)0=[hΘ(x)2−y2]a(3)0
∂Cost(x)∂Θ(3)21=0+∂Cost(x)2∂Θ(3)21+0+0=∂Cost(x)2∂hΘ(x)2×∂hΘ(x)2∂z(4)2×∂z(4)2∂Θ(3)21=−[y21hΘ(x)2+(1−y2)−11−hΘ(x)2]×hΘ(x)2(1−hΘ(x)2)×a(3)1=[hΘ(x)2−y2]a(3)1
综上:
∂Cost(x)∂Θ(3)ji=∂Cost(x)j∂hΘ(x)j×∂hΘ(x)j∂z(4)j×∂z(4)j∂Θ(3)ji=−[yj1hΘ(x)j+(1−yj)−11−hΘ(x)j]×hΘ(x)j(1−hΘ(x)j)×a(3)i=[hΘ(x)j−yj](a(3)i
引入
δ(4)=a(4)−y
,再加上
hΘ(x)=a(4)
,所以
∂Cost(x)∂Θ(3)ji=δ(4)ja(3)i
把矩阵下标去掉,公式变为:
∂Cost(x)∂Θ(3)=δ(4)(a(3))T
3. 证明
∂Cost(x)∂Θ(2),∂Cost(x)∂Θ(1)
举例:
∂Cost(x)∂Θ(2)10=∑k=1K∂Cost(x)k∂Θ(2)10=∑k=1K[∂Cost(x)k∂hΘ(x)k×∂hΘ(x)k∂z(4)k×∂z(4)k∂a(3)1×∂a(3)1∂z(3)1×∂z(3)1∂Θ(2)10]=∑k=1K[(hΘ(x)k−yk)×Θ(3)k1×a(3)1(1−a(3)1)×a(2)0]
∂Cost(x)∂Θ(2)20=∑k=1K∂Cost(x)k∂Θ(2)20=∑k=1K[∂Cost(x)k∂hΘ(x)k×∂hΘ(x)k∂z(4)k×∂z(4)k∂a(3)2×∂a(3)2∂z(3)2×∂z(3)2∂Θ(2)20]=∑k=1K[(hΘ(x)k−yk)×Θ(3)k2×a(3)2(1−a(3)2)×a(2)0]
∂Cost(x)∂Θ(2)21=∑k=1K∂Cost(x)k∂Θ(2)21=∑k=1K[∂Cost(x)k∂hΘ(x)k×∂hΘ(x)k∂z(4)k×∂z(4)k∂a(3)2×∂a(3)2∂z(3)2×∂z(3)2∂Θ(2)21]=∑k=1K[(hΘ(x)k−yk)×Θ(3)k2×a(3)2(1−a(3)2)×a(2)1]
∂Cost(x)∂Θ(2)32=∑k=1K∂Cost(x)k∂Θ(2)32=∑k=1K[∂Cost(x)k∂hΘ(x)k×∂hΘ(x)k∂z(4)k×∂z(4)k∂a(3)3×∂a(3)3∂z(3)3×∂z(3)3∂Θ(2)32]=∑k=1K[(hΘ(x)k−yk)×Θ(3)k3×a(3)3(1−a(3)3)×a(2)2]
扫描二维码关注公众号,回复:
3437484 查看本文章
记住
δ(4)=a(4)−y,hΘ(x)=a(4)
。根据前面的例子把公式进行一般化(其中
(Θ(3))Tj:
表示矩阵
((Θ(3))T
第 j 行,第一个乘号是矩阵相乘,其他乘号是实数相乘):
∂Cost(x)∂Θ(2)ji=∑k=1K[(hΘ(x)k−yk)×Θ(3)kj×a(3)j(1−a(3)j)×a(2)i]=∑k=1K[δ(4)k×Θ(3)kj]×a(3)j(1−a(3)j)×a(2)i=(Θ(3))Tj:×δ(4)×a(3)j(1−a(3)j)×a(2)i
把矩阵下标去掉,公式变为(两个乘号表示矩阵相乘,.* 表示对应元素相乘):
∂Cost(x)∂Θ(2)=((Θ(3))T×δ(4)).∗ a(3).∗ (1−a(3))×a(2)
再引入
δ(3)=((Θ(3))Tδ(4)) .∗ a(3) .∗ (1−a(3))
,公式变为:
∂Cost(x)∂Θ(2)=δ(3)a(2)
再引入
δ(2)=((Θ(2))Tδ(3)) .∗ a(2) .∗ (1−a(2))
,所以
∂Cost(x)∂Θ(1)=δ(2)a(1)
4. 总结
一条数据的反向传播如下:
- 计算输出层的误差:
δ(4)=a(4)−y
- 计算第三层的误差:
δ(3)=((Θ(3))Tδ(4)) .∗ a(3) .∗ (1−a(3))
- 计算第二层的误差:
δ(2)=((Θ(2))Tδ(3)) .∗ a(2) .∗ (1−a(2))
。第一层是输入变量,不存在误差,所以到第二层即可。
- 为什么计算每一层的误差
δ
?因为经过一系列复杂的求导后,我们通过
δ
可以计算代价函数对每一层权重矩阵的每一个参数的偏导数(无正则化处理或
λ=0
):
∂∂Θ(l)i,jJ(Θ)=δ(l+1)ia(l)j
,其中每个元素都是一个实数!
重点:
- 误差公式:
δ(l)=((Θ(l))Tδ(l+1)) .∗ g′(z(l))
,其中
g′(z(l))=a(l) .∗ (1−a(l))
- 偏导数(梯度)公式:
∂∂Θ(l)i,jJ(Θ)=δ(l+1)ia(l)j
- 偏导数(梯度)公式(矩阵形式):
∂∂Θ(l)J(Θ)=δ(l+1)(a(l))T