1. 梯度下降概念
在深度学习中,你一定听说过“梯度下降”,在绝大部分的神经网络模型里有直接或者间接地使用了梯度下降的算法。深度学习的核心:就是把数据喂给一个人工设计的模型,然后让模型自动的“学习”,通过反向传播进而优化模型自身的各种参数,最终使得在某一组参数下该模型能够最佳的匹配该学习任务。那么如果想要这个模型达到我们想要的效果,这个“学习”的过程就是深度学习算法的关键。梯度下降法就是实现该“学习”过程的一种最常见的方式,尤其是在深度学习(神经网络)模型中,BP反向传播方法的核心就是对每层的权重参数不断使用梯度下降来进行优化。虽然不同的梯度下降算法在具体的实现细节上会稍有不同,但是主要的思想是大致一样的。
2. 梯度下降的目的
在之前我们介绍过交叉熵函数,交叉熵函数就是损失函数的一种,损失函数用来衡量模型的精确度。一般来说,损失函数的值越小,我们训练的模型的精确度就越高。如果要提高模型的精确度,就需要尽可能降低损失函数的值。而降低损失函数的值,我们一般采用梯度下降这个方法。所以,梯度下降的目的,就是最小化损失函数。
3. 梯度下降的原理
梯度下降就是寻找损失函数的最低点。那么如何寻找损失函数的最低点呢?在这里,我们使用了微积分里导数,通过求出函数导数的值,从而找到函数下降的方向或者是最低点(极值点)。
计算梯度后如何找到最低点?如下图路线所示
4. 梯度计算
梯度的计算分为数值法和解析法:
5. 梯度下降算法的类别及计算效率
5.1 批量梯度下降(BGD)
在梯度下降的每一步中,我们都用到了所有的训练样本,我们需要进行求和运算,在梯度下降中,在计算微积分时,每一个样本都需要计算,会导致运算速度比较慢。
5.2 随机梯度下降(SGD)
随机梯度下降法和批量梯度下降法是两个极端,批量梯度下降每次采用所有数据下降,随机梯度下降每次用一个样本来梯度下降。
- 训练速度:随机梯度下降法由于每次仅仅采用一个样本来迭代,训练速度很快。
- 精准度:随机梯度下降法每次训练仅仅用一个样本决定梯度的方向,可能得到局部最小值,精准度不高。
- 收敛速度:由于随机梯度下降法一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解。
5.3 小批量梯度下降(MBGD)
小批量梯度下降每次迭代使用一个以上但又不是全部的样本。小批量梯度下降是集中了随机梯度下降(SGD)和批量梯度下降(BGD)的优点:使用多个样本相比SGD提高了梯度估计的精准度,小批量的估计。缺点:同SGD一样,每次梯度的方向不确定加粗样式,可能陷入局部最优。通常在使用MBGD之前先将数据随机打乱,然后划分Mini-batch,所以MBGD有时也称SGD。Mini-batch 大小的选择通常使用2的幂数,可以获得更少的运行时间。
但是梯度下降3种算法都有缺点,都可能会陷入局部最优或者计算量大。应该如何改进?
目前人们已经提出动量法和自适应梯度来解决本文中的问题。详情见我的下一篇博客——深度学习相关概念:动量法与自适应梯度