直观理解反向传播(Backpropagation intuition)
反向传播的推导
下图是逻辑回归的推导:
正向传播,其中我们计算?,然后?,然后损失函数?。
神经网络的计算中,与逻辑回归十分类似,但中间会有多层的计算。
假设一个双层神经网络,有一个输入层,一个隐藏层和一个输出层。
前向传播:
计算?[1],?[1],再计算?[2],?[2],最后得到 loss function。
反向传播:
向后推算出??[2],然后推算出??[2],接着推算出??[1],然后推算出??[1]。我们不需要
对?求导,因为?是固定的,我们也不是想优化?。向后推算出??[2],然后推算出??[2]的步骤
可以合为一步:
??[2] = ?[2] − ? , ??[2] = ??[2]?[1]?
??[2] = ??[2]
??[1] = ?[2]???[2] ∗ ?[1]′(?[1])
注意:
这里的矩阵: ?[2]的维度是: (?[2],?[1])。
?[2] , ??[2]的维度都是:(?[2],1),如果是二分类,那维度就是(1,1)。
?[1],??[1]的维度都是:(?[1],1)。
证明过程:
其中?[2]???[2]维度为: (?[1],?[2])、 (?[2],1)相乘得到(?[1],1),和 ?[1]维度相同, ?[1]′(?[1])
的维度为(?[1],1),这就变成了两个都是(?[1],1)向量逐元素乘积。
实现后向传播有个技巧,就是要保证矩阵的维度相互匹配。最后得到??[1]和??[1]
??[1] = ??[1]??,??[1] = ??[1]
可以看出??[1] 和??[2] 非常相似,其中?扮演了?[0]的角色,?? 等同于?[0]?。
由: ?[1] = ?[1]? + ?[1] , ?[1] = ?[1](?[1]) 得到: ?[1] = ?[1]? + ?[1],?[1] = ?[1](?[1])
注意:大写的?[1]表示?[1](1),?[1](2),?[1](3)...?[1](?)的列向量堆叠成的矩阵,以下类同。
下图写了主要的推导过程