[机器学习]优化算法
优化算法
梯度下降
- 全批量梯度下降[每次使用全量数据更新产生,易产生内存瓶颈及收敛速度慢]
\[\theta = \theta - \eta \nabla_\theta J(\theta)
\]
- 随机梯度下降[每次使用单个样本进行训练,收敛波动性大]
\[\theta = \theta - \eta \nabla_\theta J(\theta;x_i;y_i)
\]
- 小批量梯度下降[在收敛波动性和收敛速度之间做出平衡]
\[\theta = \theta - \eta \nabla_\theta J(\theta;x_{i:i+m};y_{i:i+m})
\]
问题
- 学习速率的选择困难。学习速度过小,收敛速度慢;学习速率过大,会在极值点附近反复震荡,阻碍收敛;
- 学习速率的调整。比如退火等学习速率调整策略是实现固定的,没有适应每次学习的数据集特点;
- 模型的所有参数更新都是使用相同的学习速率。比如稀疏特征或者特征间具有不同的取值统计特征和空间,则不能使用相同速率;稀疏特征应该使用较大的学习速率;
- 对于非凸目标函数,容易陷入次优的局部极值点。
梯度下降优化算法
- 动量[\(\gamma\)一般小于等于0.9;加强了本次梯度与上次梯度方向相同的参数,减慢了本次梯度与上次梯度方向不同的参数,以获得更快的收敛速度与减少收敛振荡]
\[v_i = \gamma v_{i-1}+\eta\nabla_\theta J(\theta;x_{i:i+m};y_{i:i+m})
\]
\[\theta = \theta - v_i
\]
- Adagrad[稀疏特征得到较大的学习更新;稠密特征得到较小的学习更新;分母在模拟退火过程;\(\eta\)=0.01]
\[g_{t,i} = \nabla_\theta J(\theta;x_{i:i+m};y_{i:i+m})
\]
\[\theta_{t+1,i} = \theta_{t,i} - \frac{\eta}{\sqrt{G_{t,ii}+\epsilon}} g_{t,i}
\]
说明:Adagrad可以位不同的参数适应不同的学习速率,缺点在于需要计算梯度序列的平方和及学习率最终会衰减为很小的值。
3. RMSProp[\gamma=0.9;\eta=0.001;使用微分平方加权平均带来微分平方和,可以修正摆动幅度过大的问题]
\[E(g^2)_{t} = \gamma E(g^2)_{t-1}+(1-\gamma)g_t^2
\]
\[\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt {E(g^2)_t + \epsilon}}g_t
\]
- Adam优化器[Momentum与RMSprop的结合;惯性保持:一阶矩,环境感知:二阶矩;]
\[带权平均 m_{t+1} = \beta_1 m_t + (1-\beta_1)g_t
\]
\[带权有偏方差 v_{t+1} = \beta_2 v_t = (1-\beta_2)g_t^2
\]
\[偏差修正,针对初始值梯度及梯度平方期望的差异过大问题
\]
\[\hat {m_{t+1}} = \frac{m_{t+1}}{1-\beta_1}
\]
\[\hat {v_{t+1}} = \frac{v_{t+1}}{1-\beta_2}
\]
\[\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt {v_{t+1}+\epsilon}} m_{t+1}
\]
说明:\(\beta_1 = 0.9,\beta_2=0.99,\epsilon=10^{-8}\);一阶矩相当于梯度的期望,二阶矩相当于梯度平方的期望.\(||m_t||大v_t\)大,说明遇到个明显的大坡,且梯度正确;\(||m_t||大V_t\)趋近于零,遇到峡谷,可能会出现振荡的情况;\(||m_t||趋近于零V_t\)大,不可能;\(||m_t||趋近于零V_t\)趋近于零,则梯度趋于0,可能落入局部极值点也可能陷入平原。