本文共 1230 字,大约阅读时间需要 4 分钟。
优化问题最常见的求解方式是迭代优化,常见的优化算法有梯度下降。因此来记录下梯度下降算法。
优化的目标是损失函数最小化,函数的梯度方向代表了函数值增长最快的方向,那么和它相反的方向就是函数减少速度最快的方向。梯度下降的优化思想是用当前位置负梯度(相反方向)方向作为搜索方向,也称“最速下降法”。梯度下降法是迭代算法,每一步需要求解目标函数与梯度向量。
梯度搜索迭代示意图
选取李航的《统计学习方法》
输入:目标函数,梯度函数,计算精度
输出:的极小点
(1)取初始值,置k=0
(2) 计算
(3) 计算梯度,当 时,停止迭代,令=;否则,令,求,使
(4) 置,计算,当或时,停止迭代,令
(5)否则,置k=k+,转(3)
当目标函数为凸函数时,梯度下降法的解是全局最优解,一般情况下,其解不保证是全局最优解,梯度下降法的收敛速度也未必是很快的
直接使用梯度下降,如果数据集很大,每次迭代的时间都很长,而且需要超大的内存空间,因此实际使用中没人用它,在此基础上,梯度下降法有两种改进分:随机梯度下降法和批量梯度下降法。以线性回归为示例,假设为要的拟合函数,为损失函数,是参数,要迭代求解的值, 其中m是训练集的样本个数,n是特征的个数
,
1) 批量梯度下降法:每次从样本特征训练集取一个mini-batch,这个样本数目m<<n
(1)将求偏导
(2) 由于是要最小化风险函数,所以按每个参数的负梯度方向,更新每个
注意到上面得到的是一个全局最优解,没迭代一步,都要用到训练集,如果m比较大,那么速度会变慢,所以引入随机梯度下降
2)随机梯度下降:每次只取一个样本进行迭代求解
(1)上面的风险函数可以改写为如下,损失函数对应的是训练集中每个样本
(2) 每个样本的损失函数,对求偏导,更新
随机梯度下降是通过每个样本来迭代更新一次,如果样本很大(例如几十万),那么可能只用其中的几万条样本,就可以迭代到最优解,对比上面的批量梯度下降,迭代一次需要用到十几万样本,一次迭代不可能最优解,需要多次。但是随机梯度伴随的问题是没有全局性,噪音较多,不能保证每次更新都是朝着正确的方向前进。
批量梯度下降---最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小,但是对于大规模样本问题效率低下。
随机梯度下降---最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近,适用于大规模训练样本情况。
跟原始的梯度下降算法比,批量梯度下降算法提高了学习速率,降低了内存开销,跟随机样本比,抑制了样本的随机性,降低了收敛的波动性,参数更新更加稳定。所以现在应用最多。
1 李航 统计学习方法
2 python自然语言处理实战(核心技术与算法)
3 常见的几种最优化方法(csdn)
转载地址:http://kxtmi.baihongyu.com/