Machine Learning-Andrew Ng 课程第五周——Back Propagation

版权声明: https://blog.csdn.net/Dr_destiny/article/details/82941042

这周的编程作业真的麻烦…因为涉及的矩阵比较多,每个矩阵的尺寸又不尽相同,光是把每个公式的运算问题改过来都用了不少时间,而且反向传播的过程又不是很直观,整个过程就用了很长时间。刚刚把作业提交上去,因为中间改的东西忘了不少,现在就把能记得的一些要点提出来,之后想到了再补充。

1. 关于 δ ( l ) \delta^{(l)} 的一些问题

在反向传播中很重要的一点就是 δ ( l ) \delta^{(l)} 了,从输出层开始计算,一层层传回去,直到 δ ( 2 ) \delta^{(2)} (第一层的误差不计算)。在这里每个 δ ( l ) \delta^{(l)} 的矩阵尺寸都是很重要的:
δ ( L ) = a ( L ) y \delta^{(L)} = a^{(L)} - y
δ ( l ) = ( Θ ( l ) ) T δ ( l + 1 ) . a ( l ) . ( 1 a ( l ) ) ( l < L ) \delta^{(l)} = (\Theta^{(l)})^T*\delta^{(l+1)}.*a^{(l)}.*(1-a^{(l)}) \qquad(l<L)
其中 L L 为层数, δ ( L ) \delta^{(L)} 意为最后一层的误差。
根据以上 δ ( l ) \delta^{(l)} 的计算公式,可以得出 l < L l<L 的情况下, δ ( l ) \delta^{(l)} 的尺寸为: ( S l + 1 ) × 1 (S_{l}+1) \times 1 。( S j S_{j} 是第 j j 层的神经元个数,不包括bias项)

又,根据公式 Δ ( l ) = Δ ( l ) + δ ( l + 1 ) ( a ( l ) ) T \Delta^{(l)} = \Delta^{(l)}+ \delta^{(l+1)}(a^{(l)})^T ,可以看出 δ ( l + 1 ) ( a ( l ) ) T \delta^{(l+1)}(a^{(l)})^T 是和 Δ ( l ) \Delta^{(l)} 同尺寸的,而 Δ ( l ) \Delta^{(l)} 又和 Θ ( l ) \Theta^{(l)} 是同尺寸的,都是 S ( l + 1 ) × ( S l + 1 ) S_{(l+1)} \times (S_{l}+1) ,这就说明这里的 δ ( l ) \delta^{(l)} S ( l + 1 ) × 1 S_{(l+1)} \times 1 的,然而我们上面才得到——

δ ( l ) \delta^{(l)} 的尺寸为: ( S l + 1 ) × 1 (S_{l}+1) \times 1

所以,用来运算 Δ ( l ) \Delta^{(l)} δ ( l ) \delta^{(l)} 是要去掉一项的,即 δ 0 l \delta^{l}_0
MATLAB代码实现就是:
delta_l = delta_l(2:end)

这个问题真的一直没有发现…还是看作业附带的材料才发现的,这个问题上课时并没有说,只是一个很细微的问题,但是很要命…所以以后一定要先仔细过一遍给的材料啊!

猜你喜欢

转载自blog.csdn.net/Dr_destiny/article/details/82941042