反向传播算法
基础知识
我们在计算神经网络预测结果时采用了正向传播方法,从第一层开始正向一层一层进行计算算,直到最后一层的hθ(x)。在不作正则化处理的情况下,逻辑回归中的代价函数如下所示:
J(θ)=−m1[j=1∑ny(i)loghθ(xi)+(1−y(i))log(1−hθ(x(i)))]
在神经网络中可以有很多输出变量,所以hθ(x)是一个维度为K的向量。此时代价函数如下所示:
J(θ)=−m1[i=1∑mk=1∑kyk(i)log(hθ(x(i)))k+(1−yk(i))log(1−(hθ(x(i))))k]
为了计算代价函数的偏导数∂θij(l)∂J(θ),我们需要一种反向传播算法,也就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层(第一层不存在误差)。以下面例子说明反向传播算法。
假设我们的训练集只有一个实例(x(1),y(1)),神经网络是一个四层的神经网络,其中K=4,SL=4,L=4:
前向传播算法


反向传播相关公式推导
我们从最后一层的误差算起,误差是**单元的预测(ak(4))与实际值(yk)之间的误差,(k=1:k)。
用δ表示误差,则δ(4)=a(4)−y。我们用这个误差值来计算前一层的误差。
此时,我们可令代价函数为:J(θ)=−ylogh(x)−(1−y)log(1−h(x))
误差计算公式δ(l)=∂z(l)∂J(θ)
推导δ(3),δ(2)(链式求导法则):
δ(3)=∂z(3)∂J
=∂a(4)∂J⋅∂z(4)∂a(4)⋅∂a(3)∂z(4)⋅∂z(3)∂a(3)
=(a(4)−y+1−a(4)(1−y))⋅∂z(4)∂g(z(4))⋅θ(3)⋅∂z(3)∂g(z(3))
=(a(4)−y+1−a(4)(1−y))⋅a(4)⋅(1−a(4))⋅θ(3)⋅g′(z(3))
=(a(4)−y)⋅θ(3)⋅a(3)⋅(1−a(3))
=(θ(3))T⋅δ(4)⋅g′(z(3))(考虑维度问题)
同理得:
δ(2)=∂z(2)∂J
=∂a(4)∂J⋅∂z(4)∂a(4)⋅∂a(3)∂z(4)⋅∂z(3)∂a(3)⋅∂a(2)∂z(3)⋅∂z(2)∂a(2)
=δ(3)⋅θ(2)⋅g′(z(2))
=(θ(2))T⋅δ(3)⋅g′(z(2))(考虑维度问题)
推导误差矩阵Δ(3),Δ(2):
Δ(3)=∂θ(3)∂J=∂a(4)∂J⋅∂z(4)∂a(4)⋅∂θ(3)∂z(4)=(a(4)−y)⋅a(3)=a(3)⋅δ(4)
同理得:
Δ(2)=∂θ(2)∂J=∂a(4)∂J⋅∂z(4)∂a(4)⋅∂a(3)∂z(4)⋅∂z(3)∂a(3)⋅∂θ(2)∂z(3)=δ(3)⋅a(2)=a(2)⋅δ(3)
至此,推导了相关公式,这里主要需要了解的是误差的计算公式,然后利用链式求导法则得到结果,通过神经网络查询变量之间的相关关系。