非线性优化
假设有目标函数:
我们要求其最小值,当然是对目标函数进行求导,但通常目标函数是非线性的,因此我们需要通过以下步骤对目标函数进行求解:
- 给定初值
;
- 对于第
次迭代,寻找增量
,使
最小;
- 若
足够小,停止迭代;
- 否则,令
,返回步骤2;
常见的寻找
的方法有:
我们对上述目标函数进行泰勒展开:
其中,
为一阶导数,即Jacobian矩阵,
为二阶导数,即Hessian矩阵。我们将上式改写,则有下式:
1. 最速下降法
我们将二阶导数忽略,只保留一阶导数,我们寻找最快下降方向,将导数取反,则可保证函数下降,则有:
其中,
称为步长,在深度学习中称为学习率。
这种方法是最简单的非线性优化方法,但其需要进行很多次迭代。
2. 牛顿法
我们将一阶导数,二阶导数全部保留,对增量
进行求导,并令其为0,则可以得到增量方程:
则增量的解为:
这种方法比最速下降法迭代少,更精确,但其Hessian矩阵计算过于复杂。
3. 高斯牛顿法
我们对
进行一阶泰勒展开,则有:
我们再对上式建立目标函数,如下所示:
我们对上式进行求导,并令导数为0,则可以得到下面方程:
将
记作
,
记作
,则有:
高斯牛顿法,使用
避免了对
矩阵直接计算,减少了复杂度,但是通常
是正定可逆的,一般情况下
却是不可逆的,此时方程陷入病态,导致无法求解,算法不收敛。继续改进。
4.LM算法
高斯牛顿只有在展开点附件才会有比较好的近似效果,LM算法则给
增加了一个信赖域,来限制其大小,信赖域内部认为可信,否则不可信。目标函数如下:
其中
为信赖域半径,
为系数矩阵,我们使用拉格朗日乘子将上式进行构造:
其中
为拉格朗日乘子,对上式进行求导,可得:
如果将信赖域当成球状,则有
,上式为:
当
较小时,LM算法接近高斯牛顿法,
较大时,LM算法接近梯度下降法。
此外信赖域大小我们可以通过实际模型和近似模型变化量的比值来确定,差异较小,我们就放大信赖域,差异较大,我们就缩小信赖域,比值定义如下:
具体的算法流程为:
- 给定初值
,系数矩阵
和信赖域半径
;
次迭代求解增量
;
- 若增量足够小,停止迭代;
- 若
,则设置
,返回步骤2;
- 若
,则设置
,返回步骤2;
- 若
大小合适,则
,返回步骤2;
5 Dog-Leg算法
其结合了高斯牛顿法与最速下降法,我们先看最速下降法,有下式:
则:
我们对上式进行求导,令导数为0,可得:
再看高斯牛顿法:
至此我们有两个待选的解:
和
。
Dog-Leg的迭代步长
需要满足的关系式(trust region):
if
,
else if
,
else
,选择
使得
信赖域半径计算与LM算法类似,只不过半径选择不一样:
具体的算法流程:
- 初始化
;
- 求解最速下降法增量,如果太小,则退出;计算高斯牛顿法增量,如果太小,也退出;
- 计算信赖域半径,如果太小,则退出;
- 根据高斯牛顿法与最速下降法分别计算
和
,然后计算迭代步长
;
- 根据3,4计算Dog-Leg步进值
,若太小,则退出;
,计算增益
更改信赖域半径,返回步骤2;