这是前一段时间写的博客,然后又重新整理了一下
【最速下降法】
无约束最优化方法不涉及约束条件,所以都是介绍如何寻找搜索方向以及搜索步长。
无约束最优化问题的目标函数:
minx∈Rnf(x)
感觉这latex还是有些别扭,稍不留意就直接当做字符处理了。
还是首先介绍一下梯度下降,梯度下降学过优化的都很清楚,一般叫最速下降法,这个方法有两点,首先是 x 更新的方向是负梯度方向,第二个是沿着该方向搜索,找到该方向的最小值所对应的
梯度下降的递推公式推导是根据函数的一阶泰勒展开近似得到的。将 f(x) 在 x(k) 附近进行一阶泰勒展开:
f(x)≈f(x(k))+gTk(x−x(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) 具有二阶连续可导性。
仍然考虑无约束最优化问题的目标函数:
minx∈Rf(x)
这里所不同的是进行二阶泰勒展开:
f(x)≈f(x(k))+gTk(x−x(k))+12(x−x(k))TH(x(k))(x−x(k))
这里, gk=g(x(k))=∇f(x(k)) 为 f(x) 在 x(k) 的梯度。 H(x(k)) 是 f(x) 的海塞矩阵
H(x)=[∂2f(x)∂xi∂xj]n×n
显然, f(x) 有极值的条件是在 xk 处的一阶导数为0, ∇f(x)=0 ,所以,当我们从 xk 处开始搜索时,搜索终止处 xk+1 应该满足 ∇f(x(k+1))=0 。所以我们对二阶近似求导。
∇f(x)=gk+Hk(x−x(k))
所以
gk+Hk(x−x(k))=0
then,
x(k+1)=x(k)−H−1kgk
经典牛顿法虽然具有二次收敛性,但是要求初始点需要尽量靠近极小点,否则有可能不收敛。计算过程中需要计算目标函数的二阶偏导数,难度较大。更为复杂的是目标函数的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
或者说,
H−1kyk=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 方法的不同,衍生出很多不同的方法,最简单的就是给