0 前言

    优化问题最常见的求解方式是迭代优化,常见的优化算法有梯度下降。因此来记录下梯度下降算法。

1  原理

    优化的目标是损失函数最小化,函数的梯度方向代表了函数值增长最快的方向,那么和它相反的方向就是函数减少速度最快的方向。梯度下降的优化思想是用当前位置负梯度(相反方向)方向作为搜索方向,也称“最速下降法”。梯度下降法是迭代算法,每一步需要求解目标函数与梯度向量。

                                                                       最优化算法之梯度下降法

                                                                               梯度搜索迭代示意图

2  算法

选取李航的《统计学习方法》

    输入:目标函数最优化算法之梯度下降法,梯度函数最优化算法之梯度下降法,计算精度最优化算法之梯度下降法

    输出:最优化算法之梯度下降法的极小点最优化算法之梯度下降法

    (1)取初始值最优化算法之梯度下降法,置k=0

      (2)   计算最优化算法之梯度下降法

      (3)   计算梯度最优化算法之梯度下降法,当最优化算法之梯度下降法 时,停止迭代,令最优化算法之梯度下降法=最优化算法之梯度下降法;否则,令最优化算法之梯度下降法,求最优化算法之梯度下降法,使

               最优化算法之梯度下降法

      (4)    置最优化算法之梯度下降法,计算最优化算法之梯度下降法,当最优化算法之梯度下降法最优化算法之梯度下降法时,停止迭代,令最优化算法之梯度下降法

    (5)否则,置k=k+,转(3)

当目标函数为凸函数时,梯度下降法的解是全局最优解,一般情况下,其解不保证是全局最优解,梯度下降法的收敛速度也未必是很快的

3 示例

直接使用梯度下降,如果数据集很大,每次迭代的时间都很长,而且需要超大的内存空间,因此实际使用中没人用它,在此基础上,梯度下降法有两种改进分:随机梯度下降法和批量梯度下降法。以线性回归为示例,假设最优化算法之梯度下降法为要的拟合函数,最优化算法之梯度下降法为损失函数,最优化算法之梯度下降法是参数,要迭代求解的值, 其中m是训练集的样本个数,n是特征的个数

最优化算法之梯度下降法最优化算法之梯度下降法

1) 批量梯度下降法:每次从样本特征训练集取一个mini-batch,这个样本数目m<<n

(1)将最优化算法之梯度下降法求偏导

最优化算法之梯度下降法

   (2)  由于是要最小化风险函数,所以按每个参数最优化算法之梯度下降法的负梯度方向,更新每个最优化算法之梯度下降法

最优化算法之梯度下降法

注意到上面得到的是一个全局最优解,没迭代一步,都要用到训练集,如果m比较大,那么速度会变慢,所以引入随机梯度下降

2)随机梯度下降:每次只取一个样本进行迭代求解

(1)上面的风险函数可以改写为如下,损失函数对应的是训练集中每个样本

 

最优化算法之梯度下降法最优化算法之梯度下降法

最优化算法之梯度下降法

 (2)  每个样本的损失函数,对最优化算法之梯度下降法求偏导,更新最优化算法之梯度下降法

最优化算法之梯度下降法

随机梯度下降是通过每个样本来迭代更新一次,如果样本很大(例如几十万),那么可能只用其中的几万条样本,就可以迭代到最优解,对比上面的批量梯度下降,迭代一次需要用到十几万样本,一次迭代不可能最优解,需要多次。但是随机梯度伴随的问题是没有全局性,噪音较多,不能保证每次更新都是朝着正确的方向前进。

4 总结

批量梯度下降---最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小,但是对于大规模样本问题效率低下。

随机梯度下降---最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近,适用于大规模训练样本情况。

跟原始的梯度下降算法比,批量梯度下降算法提高了学习速率,降低了内存开销,跟随机样本比,抑制了样本的随机性,降低了收敛的波动性,参数更新更加稳定。所以现在应用最多。

5 参考

1 李航  统计学习方法

2 python自然语言处理实战(核心技术与算法)

3 常见的几种最优化方法(csdn)

相关文章: