无约束最优化方法——牛顿法、拟牛顿法、BFGS、LBFGS

这是前一段时间写的博客,然后又重新整理了一下

【最速下降法】

无约束最优化方法不涉及约束条件,所以都是介绍如何寻找搜索方向以及搜索步长。
无约束最优化问题的目标函数:

minxRnf(x)

感觉这latex还是有些别扭,稍不留意就直接当做字符处理了。
还是首先介绍一下梯度下降,梯度下降学过优化的都很清楚,一般叫最速下降法,这个方法有两点,首先是 x 更新的方向是负梯度方向,第二个是沿着该方向搜索,找到该方向的最小值所对应的 x 就是下次更新的值。梯度下降是最简单的一种方法,但是很多情况下却并不使用这种方法,原因是收敛速率比较慢,问题出在第二步上,由于搜索搜索时一直打到该方向的最小值,那么很显然,继续沿着该方向搜索会使函数值变小,函数梯度与搜索方向夹角大于九十度,所以该点的梯度和搜索方向在此时正交,这样相邻搜索点的梯度就会呈现锯齿状,函数沿着锯齿状下降,严重降低目标函数的收敛速率。
梯度下降的递推公式推导是根据函数的一阶泰勒展开近似得到的。将 f(x) x(k) 附近进行一阶泰勒展开:
f(x)f(x(k))+gTk(xx(k))

这里, gk=g(x(k))=f(x(k)) f(x) x(k) 的梯度。
那么第 k+1 次的迭代值就可以通过:
x(k+1)x(k)+λkpk
.
其中 pk 是搜索方向,取负梯度方向 pk=f(x(k)) 可以使函数下降最快, λk 是步长,并且取 λk 使得
f(x(k)+λkpk)=minλ0f(x(k)+λpk)

最速下降法就是这样,不断地寻找搜索方向以及确定搜索步长,直到达到终止条件,相邻函数值相遇某个阈值或是 x(k) x(k+1) 小于某个阈值。但是产生的问题就是最速下降在接近终点的时候收敛速度较慢,容易之字形收敛。当然步长也不必是取该方向下降尽头的值,可以取固定值,但是太大容易发散,太小收敛速率比较慢。
关于随机梯度下降法与批量下降法,大多数用梯度下降是求无约束目标函数,例如求经验损失最小时函数的参数,含有大量的训练数据。批量下降法是同时使用所有数据对梯度进行更新,很显然需要好多次迭代。随机梯度下降是每次只使用一个数据对函数参数进行更新,这样往往只通过一部分数据更新参数就会收敛,但是由于每次根据一个数据跟新,容易造成噪音问题。

【牛顿法】

由于最速梯度下降收敛速度并不“最速”,局部搜索中最速下降的方向和全局的最小值方向并不一致,所以就有后来改进的方法,包括牛顿法以及拟牛顿法。
牛顿法要求 f(x) 具有二阶连续可导性。
仍然考虑无约束最优化问题的目标函数:

minxRf(x)

这里所不同的是进行二阶泰勒展开:
f(x)f(x(k))+gTk(xx(k))+12(xx(k))TH(x(k))(xx(k))

这里, gk=g(x(k))=f(x(k)) f(x) x(k) 的梯度。 H(x(k)) f(x) 的海塞矩阵
H(x)=[2f(x)xixj]n×n

显然, f(x) 有极值的条件是在 xk 处的一阶导数为0, f(x)=0 ,所以,当我们从 xk 处开始搜索时,搜索终止处 xk+1 应该满足 f(x(k+1))=0 。所以我们对二阶近似求导。
f(x)=gk+Hk(xx(k))

所以
gk+Hk(xx(k))=0

then,
x(k+1)=x(k)H1kgk

经典牛顿法虽然具有二次收敛性,但是要求初始点需要尽量靠近极小点,否则有可能不收敛。计算过程中需要计算目标函数的二阶偏导数,难度较大。更为复杂的是目标函数的Hesse矩阵无法保持正定,会导致算法产生的方向不能保证是f在Xk 处的下降方向,从而令牛顿法失效;特别的,如果Hesse矩阵奇异,牛顿方向可能根本是不存在的。

拟牛顿法

上面说了,虽然牛顿法能够具有二次收敛性,但是要求太高,个别情况下甚至无法求出牛顿法的迭代方向,所以就有了拟牛顿法,来对Hesse矩阵的逆进行近似。
通过泰勒二阶近似可以得到:

f(xk+1)=f(xk)+Hk(x(k+1)xk)

令,
yk=f(xk+1)f(xk),sk=x(k+1)xk

then,
yk=Hksk

或者说,
H1kyk=sk

注意到,
sk=x(k+1)x(k)=αdk
,所以拟牛顿法模拟了牛顿的方向。
所以,拟牛顿法选取满足条件 Bksk=yk , Bk 作为Hesse矩阵 Hk 的近似,或者 sk=Gkyk Gk 作为hesse矩阵逆的近似,而且要使得计算简便。当有了 Bk 之后,通过对 Bk 进行低秩修改得到 Bk+1 ,
Bk+1=Bk+Δk

使其仍满足近似条件。
一般,最初始 Bk 都是使用单位矩阵或者随机初始化。

SR1

根据修改 Bk 方法的不同,衍生出很多不同的方法,最简单的就是给

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值