梯度下降法,又称“最速下降法”,是机器学习领域最常用的优化算法之一,适用于各种无约束的优化问题。
下面我们简单叙述梯度下降法的原理。假设无约束优化函数是:
我们需要求解上式的极小值,当然我们可以直接求解偏导数,令偏导数等于0,但是有时这种方法并不现实,因为偏导数可能非常复杂,难以求解零点。梯度下降法尝试从任意点出发,采用迭代的方式,每次都使函数的值下降一点点。
其中是一个很小的正数,一般为一个常数(当然也可以随着梯度下降法的进行动态调整大小),我们的目标是让
为了达到目标,我们尝试让在
处做泰勒展开:
通过让右边第二项恒小于等于0,左边就会小于,令
即可满足条件,所以很容易得到
的更新方法:
从函数图像上看,某点的梯度方向是该点处函数上升最快的方向,因此我们每次向梯度的反方向取值,企图寻找到函数值下降较快的方向。梯度下降法用于凸函数时能寻找到全局最优,但是对于非凸函数可能找到的是局部最优点,此时需要用其他方法保证解是可接受的(全局最优或者一个可接受范围内的局部最优),如选取多个初始点,或者模拟退火等。
对于机器学习问题来说,优化函数一般是关乎训练集中所有数据(点)的一个函数,比如最小二乘的目标函数(假设训练集的数据格式为:
, 函数
为训练模型):
是模型
的参数,为了求解关于
的导数,我们需要对整个数据集进行运算以对参数做一次更新,对于大规模数据而言,这无疑是非常耗时的。为了适应现实需求,人们发展了各种实现梯度下降的方法,整体分为三种:批量梯度下降,随机梯度下降,小批量梯度下降。
批量梯度下降法
最简单的方法, 每次使用数据集中所有数据计算\theta的偏导数,更新公式为:
适用于小规模的数据,每次下降的方向都是整体函数值减小的方向,缺点就是下降太慢了,不能直接应用于大规模数据,且无法进行在线学习。

随机梯度下降法
随机取点,每次针对一个数据点求偏导进行更新,更新公式为:
这样更新更快,虽然每一次下降的方向不一定是全局下降的方向,但是多个样本累加起来整体的方向是下降的方向。更新的路线更加曲折。

小批量梯度下降法
对于上面两种方法的折中,选取一小批样本,在这一批样本上求解偏导数对参数进行迭代更新。
