以如图1所示二层神经网络为例,梳理神经网络的学习流程。
1. 说明各变量定义
1. 输入量个数为3:
2. 输出量个数为2:
3. 中间层个数为4:
4. 权重矩阵W1、W2(不带偏置)的维度分别为3*4, 4*2.
5. 偏置矩阵b1、b2的维度分别为1*4,1*2
,
6. 训练数据(X,Y):假设有60000个训练数据,每个训练数据称之为一个样本,样本=[x1,x2,x3, y1, y2].
一般将训练数据放在一个大矩阵中,矩阵的每一行为一个样本。如表1中所示训练数据可写成如下矩阵(60000, 5)
1 | 42.8 | 56.1 | 73.0 | 4.5 | 2.8 |
2 | 35.2 | 24.6 | 98.5 | 5.5 | 1.9 |
... | |||||
60000 | 65.5 | 75.1 | 94.6 | 6.6 | 3.5 |
2. 明确神经网络训练的是什么
从第一节可以看出,已知的是输入X和输出Y,未知的是权重W(和)和偏置b(和)。
神经网络要得到的就是权重W和偏置b,我们统称其为神经网络的参数,下文中参数(除非另有说明)均指权重和偏置。
3. 如何利用训练数据训练网络获得合适的参数值
首先,判断参数值是否合适,我们需要一个标准,这个标准在神经网络中就是损失函数(loss function)https://blog.csdn.net/eowyn0406/article/details/87164864,我们可以用均方误差或者交叉熵误差。
其次,如果当前参数不合适,我们需要一种方法让他变得合适,这种方法可以用梯度下降法。
梯度下降法是一种最优化方法,针对一个目标函数,要求其最小值,就可以使用梯度下降法。
举个简单的例子:目标函数,求此函数最小值,其梯度为, 取更新步长为,更新步骤为. 其迭代次数由收敛条件决定,如达到指定收敛条件则停止迭代,否则迭代至最大次数。收敛条件一般取前后两次的y值之差,若其小于一个较小的数,如0.001则满足收敛条件。
1. 取初值x1 = 10, x2 = -5;
2. 迭代第一次 ,,判断是否满足收敛条件:,,不满足收敛条件,但是可以看出在新的参数下,函数值下降了。
3. 迭代第二次,,判断是否满足收敛条件:
,,不满足收敛条件,但是可以看出函数值继续下降。
4. 重复上述步骤,直至或到达最大迭代次数。
本例中为示例方便,选择的步长较大,不一定能收敛,可以选择或其他较小的数值,最终x1和x2将收敛至(0,0)点附近。
总之,在这里,梯度下降法的作用是使参数(W, b)往使损失函数最小的方向发展。损失函数就是梯度下降法中的目标函数,要注意这里的未知量是参数W和b,与X和Y无关,X和Y是已知量。这点初学时非常容易困惑,因为一般数学中都习惯用X来表示未知数,这里只要明白,已知未知可以用任何变量名来代替,就不会困惑了。
其实到了这一步就已经完成了神经网络的学习。
最简单粗暴的学习就是把60000个训练样本都输入网络,利用最小梯度法(以损失函数为目标函数进行梯度下降)求出最优参数即可。但是这样做的问题是计算量过大,损失函数值过大,会超过计算机的数据类型最大能计算的值。
因此,可以使用mini-batch的方法。即每次只使用随机少量样本,比如100个,进行梯度下降,求出最优参数,将此参数作为下一次迭代的初始值,如此多次迭代获得最终的最优参数。