机器学习的过程中涉及了许多的公式推导,扎实的数学基础是尤为重要的。在此记录学习过程中的所学所想。
微积分
SGD原理
SGD(Stochastic Gradient Descent)随机梯度下降。要理解随机梯度下降,首先需要先理解梯度下降。然后再介绍小批量
梯度下降法
大多数机器学习或者深度学习算法都涉及某种形式的优化。 优化指的是改变 输入 以最小化或最大化某个函数 的任务。 我们通常以最小化 指代大多数最优化问题。 最大化可经由最小化算法最小化 来实现。我们把要最小化或最大化的函数称为目标函数或准则。 当我们对其进行最小化时,我们也把它称为代价函数、损失函数或误差函数。也可以当作我们训练过程中提到的损失函数Loss。
假设有损失函数如下:
其中 是预测值, 是真实值,要让预测值接近真实值就要最小化该损失函数。对其中所有的参数 运用梯度下降法:
其中 是损失函数对参数 的偏导数、 是学习率,也是每一步更新的步长。也可以理解为学习率(learning rate)。在直观上,我们可以这样理解,看下图,一开始的时候我们随机站在一个点,把他看成一座山,每一步,我们都以下降最多的路线来下山,那么,在这个过程中我们到达山底(最优点)是最快的,而上面的a,它决定了我们“向下山走”时每一步的大小,过小的话收敛太慢,过大的话可能错过最小值,在最小点附近震荡)。这是一种很自然的算法,每一步总是寻找使J下降最“陡”的方向(就像找最快下山的路一样)。
随机梯度下降
在机器学习和深度学习场景中,目标函数的损失函数通常取各个样本损失函数的平均,那么假设目标函数为:
其中 是第 个样本的目标函数,那么目标函数在在 处的梯度为:
如果使用梯度下降法(批量梯度下降法),那么每次迭代过程中都要对 个样本进行求梯度,所以开销非常大,随机梯度下降的思想就是随机采样一个样本 来更新参数,那么计算开销就从 下降到 。
小批量梯度下降
小批量梯度下降又算是对随机梯度下降的改进,随机梯度下降虽然提高了计算效率,降低了计算开销,但是由于每次迭代只随机选择一个样本,因此随机性比较大,所以下降过程中会非常曲折。
所以,样本的随机性会带来很多噪声,我们可以选取一定数目的样本组成一个小批量样本,然后用这个小批量更新梯度,这样不仅可以减少计算成本,还可以提高算法稳定性。小批量梯度下降的开销为 其中 是批量的大小。
Momentum原理
“动量”这个概念源自于物理中的力学,表示力对时间的积累效应。从这句话大概就能猜到在梯度下降的过程中,前几轮的下降对当前也在产生影响。
在普通的梯度下降法中,
每次 的更新量为 。 而在加入动量Momentum之后,每次的更新量不但要考虑本次,还要考虑上一次的更新量并乘上一个 Momentum 因子 ,如下:
这样改动的作用是:
- 当本次梯度下降的方向与上次更新量的方向相同时,上次的更新量能够对本次的搜索起到一个正向加速的作用。
- 当本次梯度下降的方向与上次更新量的方向相反时,上次的更新量能够对本次的搜索起到一个减速的作用。
从下图的实验:
在实验中也证明了在梯度下降过程中,
- 从第一行可看出:在学习率较小的时候,适当的momentum能够起到一个加速收敛速度的作用。
- 从第四行可看出:在学习率较大的时候,适当的momentum能够起到一个减小收敛时震荡幅度的作用。
Adagard原理
与梯度下降不同的是,更新规则中,对于学习率不在设置固定的值,每次迭代过程中,每个参数优化时使用不同的学习率。
普通的随机梯度下降算法,对于所有的 都使用相同的学习率,
Adagrad在每轮训练中对每个参数 的学习率进行更新。因此迭代到某次 时,某一个参数向量 的变化过程如下:
其中 为对角矩阵,每个对角线位置 , 为对应参数 从第1轮到第 轮梯度的平方和。 是平滑项,用于避免分母为0,一般取值很小。Adagrad的缺点是在训练的中后期,分母上梯度平方的累加将会越来越大,从而梯度趋近于0,使得训练提前结束。 Adagrad算法能够在训练中自动的对learning rate进行调整,对于出现频率较低参数采用较大的 更新;相反,对于出现频率较高的参数采用较小的 更新。因此,Adagrad非常适合处理稀疏数据。
Adam原理
Adam 算法和传统的随机梯度下降不同。随机梯度下降保持单一的学习率 更新所有的权重,学习率在训练过程中并不会改变。而 Adam 通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率。
Adam 算法的提出者描述其为两种随机梯度下降扩展式的优点集合,即:
- 适应性梯度算法(AdaGrad)为每一个参数保留一个学习率以提升在稀疏梯度(即自然语言和计算机视觉问题)上的性能。
- 均方根传播(RMSProp)基于权重梯度最近量级的均值为每一个参数适应性地保留学习率。这意味着算法在非稳态和在线问题上有很有优秀的性能。
Adam 算法同时获得了 AdaGrad 和 RMSProp 算法的优点。Adam 不仅如 RMSProp 算法那样基于一阶矩均值计算适应性参数学习率,它同时还充分利用了梯度的二阶矩均值(即有偏方差/uncentered variance)。具体来说,算法计算了梯度的指数移动均值(exponential moving average),超参数 beta1 和 beta2 控制了这些移动均值的衰减率。
移动均值的初始值和 beta1、beta2 值接近于 1(推荐值),因此矩估计的偏差接近于 0。该偏差通过首先计算带偏差的估计而后计算偏差修正后的估计而得到提升。如果对具体的实现细节和推导过程感兴趣,可以继续阅读该第二部分和原论文。
Adam的高效性
Adam 在深度学习领域内是十分流行的算法,因为它能很快地实现优良的结果。经验性结果证明 Adam 算法在实践中性能优异,相对于其他种类的随机优化算法具有很大的优势。
在原论文中,作者经验性地证明了 Adam 算法的收敛性符合理论性的分析。Adam 算法可以在 MNIST 手写字符识别和 IMDB 情感分析数据集上应用优化 logistic 回归算法,也可以在 MNIST 数据集上应用于多层感知机算法和在 CIFAR-10 图像识别数据集上应用于卷积神经网络。他们总结道:「在使用大型模型和数据集的情况下,我们证明了 Adam 优化算法在解决局部深度学习问题上的高效性。」
Adam产生了许多其他变种,同样有优秀的性能表现。
参考引用
【1】https://www.zhihu.com/question/264189719
【2】https://www.jianshu.com/p/58b3fe300ecb
【3】https://blog.csdn.net/u010089444/article/details/76725843
【4】https://www.jiqizhixin.com/articles/2017-07-12