![图深度学习从理论到实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/488/47216488/b_47216488.jpg)
1.3.2 前馈神经网络的学习
一般而言,对于已经搭建好的多层神经网络,输入的信息依次通过所有神经网络层,最终得到输出结果的过程称为前向传播(Forward Propagation)。因为神经网络的权重参数往往是随机初始化的,导致预测得到的结果与真实结果会存在误差。现在我们希望根据误差来调节权重参数和偏置,使得预测值更加接近真实值,这种采用“误差反向传播算法”的方法简称反向传播(Back Propagation,BP)。反向传播是深度神经网络中更新权重参数最常用的方式。反向传播是利用预测值与真实值的误差来反向逐层计算权重梯度并进行权重参数的迭代,最终达到收敛。
1.前向传播
一个完整的神经网络包括前向传播过程和后向传播过程,如图1-8所示。其中表示第l层的第i的神经元的输出值。W(l)表示参与计算的第l层神经元的参数,
对应第l层的第i个元素与上一层的第j个元素的权重系数。例如,第一层隐藏层的计算公式为
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P15_10123.jpg?sign=1739288028-lDFJlmHRF2n6qqh0Gq3PgRJfsQMqTw2I-0-3df0702ee9228f6fa76c59c4a2985e68)
第二层隐藏层的计算公式为
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P15_10124.jpg?sign=1739288028-EPAGTJiccDuO1T7r1g6YaMqj6yhj3yck-0-d2959d6e05de2a1193e0a37a921e93e2)
第三层隐藏层的计算公式为
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P16_5695.jpg?sign=1739288028-uubgUYuzyvyqkXqnmXKrIeDi89HLnbPY-0-0d5f5acce9cc521ed4c173eacd033f7a)
图1-8 前向、后向传播过程
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P15_10125.jpg?sign=1739288028-Ixcmpyc9YDDK0I9hSOjx6VPxMm69pLxq-0-eaa445a6ed9308a1d466e44dbe500de8)
输出层公式为
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P15_10127.jpg?sign=1739288028-XGTE22TND1iOwR6cpUskCMsJ4X7s0FUO-0-be55c8a3d86edfa55c8b81d228fb769b)
其中,σ(·)表示Sigmoid激活函数,指经过激活函数的神经元数值。用矩阵的形式可以表示为
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P16_10133.jpg?sign=1739288028-Qab4I4NhGEXTq5k4ODDPn9rgapBSB2Nn-0-8bca8a22c2e45ff7239e23699454d1a0)
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P16_10134.jpg?sign=1739288028-8clVpIWpMpZ0NQM0gHiTfGy2PQTZO93V-0-a4d47bf1d8af12cd1033a52d2b3d011a)
其中,l=1,2,3,4表示网络层数,。
2.损失函数
通过前向过程进行结果预测得到,损失函数(Loss Function)用来估量模型的输出
与真实值y之间的差距。损失函数越好,通常模型的预测效果越好,深度学习过程就是对损失函数求最小化的过程。所谓真实值,通常指经过人工处理标注数据的值(Labeled Data),往往对应为监督学习(Sup ervised Learning)的任务。损失函数的确定也需要依据具体问题而定,例如,回归问题一般采用欧氏距离(Euclidean Distance),如平方损失(Mean Squared Loss)函数,分类问题常用的损失函数如交叉熵损失(Cross Entropy Loss)函数。
平方损失函数采用均方差(Mean Squared Error,MSE)来衡量预测值与真实值的误差,其基本形式如下:
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P16_10140.jpg?sign=1739288028-YyOZ4KkLNnpZbtIboV0IX8gAGoSn5bpD-0-e6ce0afbdb7551dff1145fe0d7843858)
平方损失函数的导数连续,计算简单。假设模型预测与真实值之间的误差服从标准高斯分布,其中σ2为方差。但是平方损失函数容易受异常点的影响,异常值往往带来极大的平方误差,不利于参数的更新。对于分类问题,均方差分布难以满足高斯分布,因此一般不使用平方损失函数。
交叉熵是信息论中的一个重要概念,主要用于度量两个概率分布间的差异性,往往用于分类问题。对于二分类问题,损失函数
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P17_10146.jpg?sign=1739288028-mD6WroDcz7i7haL4ixVaxdqoyC5kVaD0-0-247c860142841af2145b9ac06fe6f6f0)
对于多分类问题的损失函数,则可以定义为
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P17_10147.jpg?sign=1739288028-W8Gd5LzoRGKBHng6wvIwsvwlsgCVnNO7-0-16eca46362011c01dcc852e3c6cf580c)
其中,C为类别的数量,yc等于0或者1,如果预测出的类别和样本标记相同则为1,否则为0,yc为样本属于类别c的概率。
在实际深度学习训练任务中,并不一定能保证所有训练样本都是标注好的,若训练样本只有部分数据被标注,这种训练任务一般称为半监督学习任务(Semi-Supervised Learning),半监督学习只对有标注的训练样本求损失函数;若训练样本都没有标注,这种训练任务称为无监督学习(Unsupervised Learning),用于学习样本数据的统计规律或样本数据的内在结构。
3.反向传播
损失函数给出了预测值与真实值之间的差异,为模型的优化指引方向,即需要调整模型参数W(l)和b(l)。著名数学家高斯提出的最小二乘法(Least Squares Method)是一个经典的方法,然而对于待定系数太多的问题,最小二乘法需要面对大型矩阵求逆计算量较大的问题,为此前人提出了基于迭代算法的优化方法。具体而言,为了弥合预测值与真实值y的差异,将误差进行后向传播,并使用梯度下降算法进行模型参数的调整,即采用反向传播算法,调整权重参数的优化算法可采用随机梯度下降(Stochastic Gradient Descent,SGD)算法。
随机梯度下降算法更新权重参数的具体形式如下
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P17_10150.jpg?sign=1739288028-4OM883qz70JCXUVeogeTpjlD9zdGc0Go-0-4b07766e64f012e77d08fea7142850b4)
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P17_10151.jpg?sign=1739288028-6w6DDGJdDUC4Ih51LHmrsPIAqUdAgS47-0-a6427705498a121e2d4cc8c46dd43ac6)
其中,权重矩阵的偏导和偏置导数
是计算的核心,η是学习率(Learning Rate),表示梯度更新步伐的大小。由于神经网络是逐层搭建的,
和
一般需要反向逐层计算得到。下面举一个简单例子来说明多元复合函数求导法则(又称为多元函数的链式法则)。假设可微函数z=f(u,v),且u=h(s,t),v=g(s,t),则z是s、t的复合函数。
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P17_10165.jpg?sign=1739288028-kbwTzjc8qIDEPlTQ9QFycBTARi8CNOQH-0-ea83d2e1f10a6781dda9b6e7cef19363)
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P17_10166.jpg?sign=1739288028-JKLOJzgEapyOgTxQTzaIV9RMpNNIgIY3-0-4474283db5793d25eaeaaa66578ace6b)
依照链式法则可计算各参数梯度,如表1-1所示。
表1-1 反向传播计算权重和偏置
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-T18_10168.jpg?sign=1739288028-aLZfprJr2qvsNge5jlCwzCl8plJhXXto-0-de01abb4f98cce380cdd8f862d20117f)
对深度神经网络的计算方式,能够总结出什么规律呢?若以图的角度来审视权重参数的传递路径,可能会更直观。以图1-8中神经节点相应的权重参数为例,如果将图视为一个有向图,从损失函数L出发,有
、
和
等四条路径。那么对
产生贡献的
和
可以计算为
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P18_10181.jpg?sign=1739288028-3iVpHO41VyjKZY75ujP7TpCGxJ75fR1e-0-de1bd3d77f7a97a2a5850d8888669960)
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P18_10184.jpg?sign=1739288028-ct2A9XNIBmTqVF06dTZXiCZK5KiUQEoj-0-4276699ecab61dfd840d0bed1a4e6b5a)
![](https://epubservercos.yuewen.com/A97910/26580960009092706/epubprivate/OEBPS/Images/Figure-P18_10185.jpg?sign=1739288028-PYSOJ98dsucNsROmr9UNMNrkoJlI9IFV-0-9d25bcd29a0e019c025f0753960005ff)
在训练神经网络时,正向传播和后向传播相互依赖。一方面,在正向传播期间认为W(l)和b(l)是已知模型参数,用来逐层计算,得出神经元a(l)和预测结果。另一方面,反向传播期间模型参数的偏导数
、
的计算取决于由正向传播给出的隐藏变量a(l)的当前值。更新的模型参数则是由优化算法根据最近迭代的反向传播给出的。总的来说,在初始化模型参数后,交替使用正向传播和反向传播,利用反向传播给出的梯度更新模型参数,直到模型参数收敛。