优化算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
优化算法(1)
1. 梯度下降
1)分类
批量梯度下降(BGD ):
i 10110((,...))=()m
j j j j i n j i i j h x x x y x ag t θθθαθ--==---∑ (1)
说明:在实际训练中,上式既可以是将所有样本训练完,计算所有样本的梯度和,然后与前一时刻的参数做差。也可以是训练一个样本就计算梯度然后做差,之后依次迭代下去。
随机梯度下降(SGD )
i 101((,...))j j j j i n j i h x x x y x θθθα-=--
小批量梯度下降(MGD ).
1i 101t
((,...))t x j j j i n j j h x x x y θθθα+--==--∑
2. Momentum
由(1)得到:
t ()ag t θ∆=-
即:参数的更新方向完全取决于当前时刻梯度的方向,因而其更新是十分不稳定的。一个改进的方法就是引入动量的概念:momentum,它模拟物体运动时候的惯性,即在更新的时候不仅考虑梯度的方向,而且在一定程度上保留之前的方向。经实验验证,其能够在一定程度上增加参数更新的稳定性,某些情况下能够加快训练速度,并且具有一定摆脱陷入局部最优的能力。
t 1()t ag t θρθ-∆=∆-
特点:
前后梯度方向一致时,能够加速学习 前后梯度方向不一致时,能够抑制震荡
3. Nestrov Momentum (NAG )
根据之前的动量进行大步跳跃,然后计算梯度进行校正,从而实现参数更新。这种预更新方法能防止大幅振荡,不会错过最小值,并对参数更新更加敏感 与Momentum 的区别在于梯度计算的时刻不同。Nestrov Momentum 方法是先按照原来的方向对参数进行估计,然后使用估计后位置的梯度来纠正方向。
t 11g((;),)t t t t a L x g y θρθθα--∆=∆-+
4. Adagrad
Adagrad 算法能够在训练中自动的对learning rate 进行调整,对不同的参数使用不同的学习速率。可以想象在训练的某个阶段,各个参数的收敛程度是不同的。有的参数接近收敛,需要娇小的学习率,而有的参数还有很大的程度才能收敛,所以各个参数应该具有不同的学习速率。Adagrad 方法可以自适应的为不同参数分配不同的学习速率:
其中,eta 是初始学习速率。
使得在参数空间更为平缓的方向, 会取得更大的进步,并且能够使得陡峭的方向变得平缓,从而加快训练速度。善于处理稀疏梯度。
5. Adadelta
Adagrad 存在的问题:
(1) 学习率单调递减,训练后期学习率非常小。 (2) 需要手动设置一个全局的初始学习率
针对第一个问题,我们只是用距离当前时间较近的梯度项。即:
其中,ρ是衰减系数,相当于将前面的梯度随时间按衰减系数进行衰减,相当于仅适用了离当前时刻较近的梯度。可以发现,学习率并不一定是一个单调的过程。
上面的5种方法都是基于梯度的优化方法,下面将介绍一些其他的优化方法。
6. 牛顿法(牛顿二阶导数法)
基本思想:在极小点的估计值附近,对f(x)做二阶泰勒展开,进而找到极小值的下一个估计值。
考虑下面的无约束优化问题:
令:
由于求的是最值,对上式求导得(后两项求导结果):
则:
当X为多维情况时:
其中,H为Hessian矩阵,g为梯度。
综上,牛顿法的算法流程是:
7. 阻尼牛顿法
上述x的迭代过程可以发现是一个定步长的过程,所以在某些情况下可能越过最小值。阻尼牛顿法是在每次迭代之前寻找最优的步长进行迭代。
步长的计算公式;
(1.13)
其中:
。
则,阻尼牛顿法的算法流程是:
牛顿法的问题:
目标函数必须有一阶,二阶导数偏导数,且多维情况下的海森矩阵必须是正定的。所以在求解凸优化问题的时候,前提条件是嗨森矩阵是正定的。如果不是正定,不能保证所产生的方向是目标函数在xk处的下降方向。
计算复杂。不仅要计算梯度,还要计算嗨森矩阵及其逆矩阵。计算量和存储量都已维数N的平方比增加。
8. 拟牛顿法
原始牛顿法问题:Hessian矩阵或其逆矩阵计算复杂,且无法保证正定(嗨森矩阵不是正定时,不能保证所产生的方向是目标函数在x k处的下降方向)。拟牛顿法就是采用一定的方法对Hessian矩阵或者其逆矩阵做近似(设分别为BD)。然后按照牛顿法的计算方式进行计算。因为Hessian为对称矩阵,所以可以初始化B(或者D)为单位阵,并通过不断地迭代来使B(D)趋近于原始的Hessian矩阵。其中,DFP算法是近似Hessian矩阵的逆,BFGS算法是近似Hessian矩阵。
这里以拟牛顿方法中的BFGS算法讲述拟牛顿的工作流程:
从拟牛顿条件说起(或者可以解释为牛顿法中海森矩阵应满足的条件):
经过k+1次迭代,我们的目标函数变为:
在两边同时作用一个梯度算子有:
取X=Xk有:
令:
则有:
(1)
上式即称为拟牛顿条件。
BFGS算法的思想是直接使用一个矩阵B逼近海森矩阵H。
因为H为对称阵,所以初始化B为单位阵。并每次迭代更新:
设B的变化量为:
将上式带入(1)得:
本式子推到过程:
令:
则有:
所以:
T T T k k k k k k
K T T k k k k k
y y B s s B B y s s B s ∆=-
给出BFGS 的算法流程(解释前面只是推导B 的迭代过程,在实际算法里面前
面依然借用的是牛顿法的思想。):
9. 期望最大化(EM )
10. 共轭梯度法
共轭方向法(不一定是共轭梯度)的思想就是在N 维优化问题中,每次沿一个方向优化得到极小值,后面再沿其他方向求极小值的时候,不会影响前面已经得到的沿那些方向上的极小值,所以理论上对N 个方向都求出极小值就得到了N 维问题的极小值。这组方向由于两两共轭,所以就叫他共轭方向法。
梯度下降法每次都直接选取当前点的梯度方向,所以就有可能按下葫芦浮起瓢:这次求出的极小值点在之前搜索过的方向上又不是极小值了,这样就导致收敛速度比较慢甚至不收敛。
共轭描述:
PAQ=0;
则称向量P 和Q 是关于A 共轭的,或称P 、Q 是关于A 共轭方向。
共轭方向:
我们认为两个正交向量的方向是互不影响的。推广到更一般的情况: