1.1 神经网络的前向传播
我们首先定义如下图所示的神经网络,为了简单起见,所有的层都不加偏置。其中,??X 表示输入层,??????Zij 表示第 ??j 个隐含层的所有神经元,????Wj 表示第 ??j 层的权重。
因此:
??1=???????111??112??113??121??122??123?????,??2=[??211??212??221??222??231??232],??3=[??311,??321]W1=[w111w211w121w221w131w231],W2=[w112w212w312w122w222w322],W3=[w113,w213]
所以:
??1=???????11??12??13?????=???????111??112??113??121??122??123?????[??1??2]=???????11??12??13?????=??1??,??2=??2??1,????????=??3??2Z1=[z11z21z31]=[w111w211w121w221w131w231][x1x2]=[z11z21z31]=W1X,Z2=W2Z1,yout=W3Z2
最终的 ????????Loss 函数可以表示为:????????=12(?????????????)2Loss=12(yi?yout)2
在训练过程中,我们要保证 ????????Loss 越小越好,因此采用梯度下降的方法来求解网络的参数 ??=[??111,??121,...,??321]W=[w111,w211,...,w213],于是就需要求解 ????????Loss 对所有参数的偏导数 ???(??)=[???(??)???111,???(??)???112,...???(??)???321]???L(w)=[?L(w)?w111,?L(w)?w121,...?L(w)?w213]T,于是权重更新公式可以写为:
????+1=??????????(??)Wk+1=Wk?α?L(w)
1.2 神经网络的反向求导
在上一节中, 我们大致对神经网络的梯度更新有了了解,其中最核心的部分就是求出损失函数对权重 ????????wijl 的导数。由于网上大多数资料都是生搬硬套,因此我们以计算 ??1W1 的导数为例,对整个反向求导过程进行细致的剖析。如下图所示:
其中,????????wjkl 表示从第 ??l 层的第 ??j 个节点到第 ??+1l+1 层中的第 ??k 个节点的权重,根据前向传播的计算我们可以得到:
????????~(??311??211+??3