全连接MLP中的反向传播计算
我们考虑一个与全连接多层感知机相关联的特定图,下面第一个算法首先给出了前向传播,它将参数映射到与单个训练样本(x,y)(x, y)(x,y)(输入,目标)相关联的监督损失函数L(y^,y)L(\hat {y}, y)L(y^,y),其中,戴帽的yyy是神经网络在得到输入xxx后的实际输出。下面第二个算法说明了将反向传播应用于该图所需要的相关计算。
首先讨论第一个算法,即典型深度神经网络中的前向传播和代价函数的计算。为了获得总代价JJJ,损失函数L(y^,y)L(\hat {y}, y)L(y^,y)可以加上正则项Ω(θ)\Omega (\theta )Ω(θ),其中,θ\thetaθ包含所有的权重和偏执组成的参数。为了简单起见,该算法仅仅演示使用单个输入样本xxx,实际上应该是小批量的输入。另外,假设网络深度是lll,则模型的权重矩阵是:W(i),i∈{ 1,⋯ ,l}W^{(i)}, i \in \left \{ 1, \cdots , l \right \}W(i),i∈{ 1,⋯,l},模型的偏执参数是:b(i),i∈{ 1,⋯ ,l}b^{(i)}, i \in \left \{ 1, \cdots , l \right \}b(i),i∈{ 1,⋯,l},那么,该算法如下:
- 利用输入进行初始化:h(0)=xh^{(0)} = xh(0)=x。
- 遍历网络深度k=1,⋯ ,lk = 1, \cdots , lk=1,⋯,l进行下面的计算:
a(k)=b(k)+W(k)hk−1a^{(k)} = b^{(k)} + W^{(k)}h^{k-1}a(k)=b(k)+W(k)hk−1
h(k)=f(a(k))h^{(k)} = f(a^{(k)})h(k)=f(a(k))- 得到神经网络的输出:y^=h(l)\hat {y} = h^{(l)}y^=h(l)。
- 最后获得总代价:J=L(y^,y)+λΩ(θ)J = L(\hat {y}, y) + \lambda \Omega (\theta )J=L(y^,y)+λΩ(θ)
接着讨论第二个算法,该算法说明了如何计算JJJ关于参数WWW和bbb的梯度,这是上一个算法的反向计算。它不止使用了输入xxx和目标yyy,该计算对每一层kkk都产生了对激活函数a(k)a^{(k)}a(k)的梯度,从输出层开始,一直向后计算,直到一个隐藏层。这些梯度可以看作对每层的输出应该如何调整从而减小误差的指导,根据这些梯度可以获得对每层参数的梯度。权重和偏置上的梯度可以立即用于随机梯度更新的一部分(梯度算出来后即可执行更新),或者可以与其它基于梯度的优化算法一起使用。算法如下:
- 在前向计算完成后,首先计算顶层的梯度:g⟵∇y^J=∇y^L(y^,y)\mathcal{g} \longleftarrow \nabla _{\hat{y} } J = \nabla _{\hat{y}}L(\hat{y} , y)g⟵∇