目录
4.Cyclical LR/SGDR/One-cycle LR
前言
本文介绍了经典和前沿的深度学习中的优化器(优化算法)。文章整体思路、图片、公式均源自李宏毅2020机器学习深度学习(完整版)国语_哔哩哔哩_bilibili。Optimization部分在网课中是由课程助教讲解的选学课程,难度较大(我在第一次学习的时候甚至连Adam算法都没有理解,就匆匆跳过了课程)。之所以整理出该文章,一方面用于以后自己经常回顾,一方面希望可以帮助向曾经的我一样被直接劝退的朋友们。视频中Adagrad、RMSProp等算法等讲解得过快,我在文中写入了自己对不同算法的理解、思考以及直观上的分析,如果能恰好帮助你理解,并与网课视频相互补充,那我将十分荣幸。
本文分为三个部分,第一个部分介绍梯度下降的思想及实际训练模型常用的批梯度下降法,第二部分介绍了五种经典的算法,第三部分介绍了一些前沿算法。在第二三部分的介绍中,每种算法在介绍时以算法的优势、步骤和直观理解为主,不讨论其理论性质的证明。
无论是DNN还是CNN,都追求模型预测值和真实值间的差异最小化,通常构造损失函数来度量这种差异(如回归问题中的平方损失,分类问题中的交叉熵损失),损失函数是模型参数的函数。因此,我们一定会面临一个最小化问题,目标函数是损失函数,决策变量是模型参数。于是,我们需要优化算法来求解这个最小化问题,梯度下降法或者说它的思想贯穿着深度学习优化算法的始终。
一、梯度下降的思想与批梯度下降法
梯度下降是经典的优化算法,它的思想是:参数在更新时始终朝着目标函数(最小化问题)下降最快的方向移动,而这个方向就是梯度(梯度是上升最快的方向)的反方向,用公式可以表达为
是损失函数
对第
时刻的参数
的梯度,
学习率是一个超参数,需要人为设定,通常设为0.001、0.01等。
算法的流程非常简单:初始化参数向量,然后根据该公式不断更新梯度,使得损失函数收敛到较低水平时停止。
基于梯度下降优化算法的思想,通常有三种不同的模式来训练模型,分别是:随机梯度下降,标准梯度下降法,和批梯度下降法:
1.随机梯度下降法
每次只使用一个训练集样本来更新参数。该方法的不足是参数更新不够稳定,收敛速度较慢,这是因为一个样本很难代表整体,每次更新只是减小了该样本的损失函数值,却可能造成在其他样本上损失函数值的增大。
2.标准梯度下降法
每次利用全部训练集样本来更新参数。该方法虽然直观上解决了上述问题,但通常深度学习问题的数据量庞大,一次性将全部数据丢计算机进行训练几乎是不可能的。其次,由于包括了所有样本,不同样本对参数更新的影响可能会相互抵消,使得参数每轮更新值都很小。
3.批梯度下降法
批梯度下降法是对上述两种方法的集中,明显规避了两种方法的缺点,成为现在几乎一定会使用的方法。该方法就是将数据集分成几个批(batch),每个batch的数据量根据实际数据量的大小由自己定义,每次丢进一个batch进入模型进行训练。
二、经典的五类优化器
1.SGD
见一,1。(虽然算法名叫随机梯度下降,但实际上,仍然采用的是mini-batch gradient descent,批梯度下降法。无论采用什么优化器,都需要用用mini-batch的方式训练。)
2.SGDM(SGD with momentum)
随机梯度下降法虽然有效,但容易陷入局部最小值点,甚至在驻点附近以及梯度值非常小的点附近时参数更新极为缓慢。为了改进这个缺点,引入物理中动量的概念,参数更新量,是当前梯度的方向