- 深度学习:卷积神经网络技术与实践
- 高敬鹏
- 1142字
- 2020-08-27 05:49:02
3.6 优化算法
当损失函数衡量出预测值与真实值之间的误差大小后,需要对神经网络进行参数优化,进而得到最小损失函数输出,这一过程将由梯度下降算法作为优化算法实现。梯度下降算法可以这样理解:一个人从山上某一点出发,需要找到山上的最低点。他先找到最陡的坡,往前走一步,接着再寻找下一个最陡的坡,再走一步,重复这两个步骤,直到走到最低点。这个最陡的坡就对应着优化算法中的梯度方向。
本节将介绍3种梯度下降算法:批量梯度下降法(Batch Gradient Descent,BGD)、小批量梯度下降法(Mini-Batch Gradient Descent,MBGD)、随机梯度下降法(Stochastic Gradient Descent,SGD)。
在介绍这3种算法之前,需要先介绍几个常见名词:批(batch),批尺寸(batchsize),迭代(iteration),时期(epoch)。
·批:将训练集的全体样本分为若干批次,样本数目过大时,可考虑每次选取一批数据进行训练。
·批尺寸:每批样本的数量。
·迭代:对一批数据完成一次前向传播和一次反向传播。
·时期:对训练集的全体样本完成一次前向传播和一次反向传播。
1.批量梯度下降法
批量梯度下降法是梯度下降最原始的方法,针对整个数据集,其思路是在优化某个参数时使用所有的样本来更新,进而得到一个全局最优解。也正是因为每次都调用全体样本,使得该梯度下降法的迭代速度比较慢,尤其是当样本数目过大时。BGD的损失函数公式如下:
由该损失函数可进一步得到BGD算法的迭代式,公式如下:
2.随机梯度下降法
由于批量梯度下降法每次运算数据量过大,迭代速度较慢,所以针对这一弊端,提出了随机梯度下降法。SGD的思路是通过单个样本对神经网络参数进行优化更新,当样本数目过大时,可能只通过其中一部分的样本进行迭代就可达到最优值输出。也就是说,SGD运算速度快,但其所能达到的最优值是局部最优值。
3.小批量梯度下降法
BGD运算较慢,SGD容易陷入局部最优解,针对这两者的弊端,小批量梯度下降法采取了一种折中的思路:首先将样本随机打乱,分成若干批次,每个批次有若干样本,其样本数量一般为2的幂;每次训练时,选取一个批次进行迭代,进而加快了迭代的速度。
基于Keras搭建神经网络后,需要对该神经网络进行编译,即确定训练方式,包括损失函数的选择、优化算法的选择、评估标准的选择。损失函数有多种选择,如均方差(mse)、二分类交叉熵(binary_crossentropy)、多分类交叉熵(categorical_crossentropy)等;优化算法可选择随机梯度下降法(sgd)、小批量梯度下降法(mbgd),以及adam、rmsprop等;评估标准一般选取准确率。主要语句如下:
model.compile( #损失函数选择多分类交叉熵函数 loss='categorical_crossentropy', #优化算法选择随机梯度下降法 optimizer='sgd', #评估标准选择准确率 metrics=['accuracy'], )
编译完成之后,可以通过model.fit开始进行网络的训练。主要语句如下:
Training=model.fit( #输入训练数据及训练标签 X_train,Y_train, #设定批尺寸batch_size batch_size=BATCH_SIZE, #设定迭代次数 epochs=N_EPOCHS, #设定验证集比例,评估模型训练准确度,只能反映训练集在模型上的准确度,不能反映算法对新数据的预测结果 validation_split=VALIDATION_SPLIT, verbose=2 #1为不显示训练过程,2为显示训练过程 )