最优化算法之梯度下降法

0 前言

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

1  原理

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

                                                                       

                                                                               梯度搜索迭代示意图

2  算法

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

    输入:目标函数f(x),梯度函数g(x)=\bigtriangledown f(x),计算精度\varepsilon

    输出:f(x)的极小点{x}'

    (1)取初始值x^0\in R^{n},置k=0

      (2)   计算f(x^{k})

      (3)   计算梯度g_{k}=g(x^{k}),当\left \| g_{k} \right \|<\varepsilon 时,停止迭代,令{x}'=x^{k};否则,令p_{k}=-g(x^{k}),求\lambda _{k},使

               f(x^{k}+\lambda _{k}p_{k})=minf(x^{k}+\lambda p_{k})

      (4)    置x^{k+1}=x^{k}+\lambda _{k}p_{k},计算f(x^{k+1}),当\left \| f(x^{k+1})-f(x^{k}) \right \|<\varepsilon\left \| x^{k+1}-x^{k} \right \|<\varepsilon时,停止迭代,令x{}'=x^{k+1}

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

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

3 示例

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

h(\Theta )=\sum_{j=0}^{n}\Theta _{i}x_{j}J(\Theta )=\frac{1}{2m}\sum_{i=1}^{m}(y^{i}-h_{\Theta }(x^{i}))^{2}

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

(1)将J(\Theta )求偏导

\frac{\partial J(\Theta )}{\partial \Theta _{j}}=-\frac{1}{m}\sum_{i=1}^{m}(y^{i}-h_{\Theta }(x^{i}))x_{j}^{i}

   (2)  由于是要最小化风险函数,所以按每个参数\Theta的负梯度方向,更新每个\Theta

\Theta {}'_{j}=\Theta _{j}+\frac{1}{m} \sum_{i=1}^{m}(y^{i}-h_{\Theta }(x^{i}))x_{j}^{i}

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

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

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

J(\Theta )=\frac{1}{2m}\sum_{i=1}^{m}(y^{i}-h_{\Theta }(x^{i}))^{2}=\frac{1}{m}\sum_{i=1}^{m}\cos t(\Theta ,(x^{i},y^{i}))

\cos t(\Theta ,(x^{i},y^{i}))=\frac{1}{2}(y^{i}-h_{\Theta }(x^{i}))^{2}

 (2)  每个样本的损失函数,对\Theta求偏导,更新\Theta

\Theta {}'_{j}=\Theta _{j}+(y^{i}-h_{\Theta }(x^{i}))x_{j}^{i}

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

4 总结

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

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

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

5 参考

1 李航  统计学习方法

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

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

猜你喜欢

转载自blog.csdn.net/tian_panda/article/details/82109617