版权声明: https://blog.csdn.net/Dr_destiny/article/details/82941042
这周的编程作业真的麻烦…因为涉及的矩阵比较多,每个矩阵的尺寸又不尽相同,光是把每个公式的运算问题改过来都用了不少时间,而且反向传播的过程又不是很直观,整个过程就用了很长时间。刚刚把作业提交上去,因为中间改的东西忘了不少,现在就把能记得的一些要点提出来,之后想到了再补充。
1. 关于
δ(l)的一些问题
在反向传播中很重要的一点就是
δ(l)了,从输出层开始计算,一层层传回去,直到
δ(2)(第一层的误差不计算)。在这里每个
δ(l)的矩阵尺寸都是很重要的:
δ(L)=a(L)−y
δ(l)=(Θ(l))T∗δ(l+1).∗a(l).∗(1−a(l))(l<L)
其中
L为层数,
δ(L)意为最后一层的误差。
根据以上
δ(l)的计算公式,可以得出
l<L的情况下,
δ(l)的尺寸为:
(Sl+1)×1。(
Sj是第
j层的神经元个数,不包括bias项)
又,根据公式
Δ(l)=Δ(l)+δ(l+1)(a(l))T,可以看出
δ(l+1)(a(l))T是和
Δ(l)同尺寸的,而
Δ(l)又和
Θ(l)是同尺寸的,都是
S(l+1)×(Sl+1),这就说明这里的
δ(l)是
S(l+1)×1的,然而我们上面才得到——
δ(l)的尺寸为:
(Sl+1)×1
所以,用来运算
Δ(l)的
δ(l)是要去掉一项的,即
δ0l。
MATLAB代码实现就是:
delta_l = delta_l(2:end)
这个问题真的一直没有发现…还是看作业附带的材料才发现的,这个问题上课时并没有说,只是一个很细微的问题,但是很要命…所以以后一定要先仔细过一遍给的材料啊!