机器学习的常见优化方法在最近的学习中常常遇到,可是仍是不够精通.将本身的学习记录下来,以备不时之需git
机器学习几乎全部的算法都要利用损失函数 lossfunction 来检验算法模型的优劣,同时利用损失函数来提高算法模型.
这个提高的过程就叫作优化(Optimizer)
下面这个内容主要就是介绍能够用来优化损失函数的经常使用方法github
1.SGD&BGD&Mini-BGD:
SGD(stochastic gradient descent):随机梯度降低,算法在每读入一个数据都会马上计算loss function的梯度来update参数.假设loss function为L(w),下同.\[w-=\eta \bigtriangledown_{w_{i}}L(w_{i}) \]
Pros:收敛的速度快;能够实如今线更新;可以跳出局部最优
Cons:很容易陷入到局部最优,困在马鞍点.
BGD(batch gradient descent):批量梯度降低,算法在读取整个数据集后累加来计算损失函数的的梯度
\[w-=\eta \bigtriangledown_{w}L(w)\]
Pros:若是loss function为convex,则基本能够找到全局最优解
Cons:数据处理量大,致使梯度降低慢;不能实时增长实例,在线更新;训练占内存
Mini-BGD(mini-batch gradient descent):顾名思义,选择小批量数据进行梯度降低,这是一个折中的方法.采用训练集的子集(mini-batch)来计算loss function的梯度.\[w-=\eta \bigtriangledown_{w_{i:i+n}}L(w_{i:i+n})\]
这个优化方法用的也是比较多的,计算效率高并且收敛稳定,是如今深度学习的主流方法.算法
5.Adam:(adaptive moment estimation)是对RMSProp优化器的更新.利用梯度的一阶矩估计和二阶矩估计动态调整每一个参数的学习率.
优势:每一次迭代学习率都有一个明确的范围,使得参数变化很平稳.
\[m_{w}^{t+1}=\beta_{1}m_{w}^{t}+(1-\beta_{1}) \bigtriangledown L^{t} ,m为一阶矩估计\]
\[v_{w}^{t+1}=\beta_{2}m_{w}^{t}+(1-\beta_{2}) (\bigtriangledown L^{t})^{2},v为二阶矩估计\]
\[\hat{m}_{w}=\frac{m_{w}^{t+1}}{1-\beta_{1}^{t+1}},估计校订,实现无偏估计\]
\[\hat{v}_{w}=\frac{v_{w}^{t+1}}{1-\beta_{2}^{t+1}}\]
\[w^{t+1} \leftarrow=w^{t}-\eta \frac{\hat{m}_{w}}{\sqrt{\hat{v}_{w}}+\epsilon}\]
Adam是实际学习中最经常使用的算法
机器学习