无约束最优化
梯度下降(Gradient Descent)
梯度下降法也称为最速下降法,是一个常用的最优化算法。梯度下降法的计算过程就是沿梯度下降的方向求解极小值。实际上就是一个逼近极值的迭代过程,其迭代公式可表示为 a k + 1 = a k + ρ k s ^ ( k ) a_{_{k+1}} = a_{_k} + \rho_{_k}\hat{s}^{_{(k)}} ak+1=ak+ρks^(k),其中 s ^ ( k ) \hat{s}^{_{(k)}} s^(k) 表示梯度方向(即变化最大的方向), ρ k \rho_{_k} ρk 表示在梯度方向上的搜索步长。求解过程为:
- 通过求(偏)导求出梯度方向
- 通过线性搜索算法确定搜索步长(即:把迭代公式看作是以 ρ k \rho_{_k} ρk为自变量的函数,然后求解函数最值对应的 ρ k \rho_{_k} ρk)或者人为指定一个固定的搜索步长
- 更新参数
- 重复以上步骤,直到收敛(梯度方向向量为 0 ⃗ \vec{0} 0)
推导过程:
令 a = Δ x a = \Delta x a=Δx , 在 Δ x \Delta x Δx 附近展开一阶泰勒级数,得到:
f ( x + Δ x ) = f ( x ) + f ′ ( x ) ( Δ x ) f(x+\Delta x)=f(x)+f'(x)(\Delta x) f(x+Δx)=f(x)+f′(x)(Δx)
Δ x \Delta x Δx 可正可负但必须充分接近于0
令 Δ x = α D \Delta x = \mathbf{\alpha D} Δx=αD,其中 D \mathbf{D} D为单位方向向量, α \mathbf{\alpha} α为实数移动步长,转换为高维形式,得到:
f ( X + α D ) = f ( X ) + α ∇ f ( X ) D f(\mathbf{X}+\mathbf{\alpha D})=f(\mathbf{X})+\mathbf{\alpha}\nabla f(\mathbf{X})\mathbf{D} f(X+αD)=f(X)+α∇f(X)D
为了移动步长最大,使目标函数为: max \max max f ( X ) − f ( X + α D ) f(\mathbf{X})-f(\mathbf{X}+\mathbf{\alpha D}) f(X)−f(X+αD)
当 α \mathbf{\alpha} α确定时,目标函数变为: min \min min ∇ f ( X ) D \nabla f(\mathbf{X})\mathbf{D} ∇f(X)D
用向量 g T \mathbf{g}^T gT表示 ∇ f ( X ) \nabla f(\mathbf{X}) ∇f(X),则上式可以看作两个向量的点积,即: g T D \mathbf{g}^T\mathbf{D} gTD
因此,当 D = − g \mathbf{D}=-\mathbf{g} D=−g 时,可以获得最大移动步长,就是也是称负梯度方向为“最速下降”方向的由来
牛顿迭代(Newton Method)
牛顿迭代法将对函数 f f f 优化问题转换为求解该函数的导数 f ‘ = 0 f^`=0 f‘=0 的问题,这样可以将优化问题转换为方程求解问题。为了求解方程 f ‘ = 0 f^`=0 f‘=0,利用二阶泰勒级数展开可得, x n + 1 = x n − f ‘ ( x n ) f ‘ ‘ ( x n ) x_{_{n+1}} = x_{_n} - \frac{f^{`}(x_{_n})}{f^{``}(x_{_n})} xn+1=xn−f‘‘(xn)f‘(xn)。求解过程为:
- 求函数的1阶(偏)导数
- 求函数的2阶(偏)导数矩阵(Hessian矩阵)的逆
- 更新参数
- 重复以上步骤,直到收敛
推导过程:
令 a = Δ x a = \Delta x a=Δx , 在 Δ x \Delta x Δx 附近展开一阶泰勒级数,得到:
f ( x + Δ x ) = f ( x ) + f ′ ( x ) ( Δ x ) + 1 2 f ′ ′ ( x ) ( Δ x ) 2 f(x+\Delta x)=f(x)+f'(x)(\Delta x)+\frac{1}{2}f''(x)(\Delta x)^2 f(x+Δx)=f(x)+f′(x)(Δx)+21f′′(x)(Δx)2
当 Δ x \Delta x Δx 充分接近于0时, 稍作转换得到:
f ′ ( x ) + f ′ ′ ( x ) Δ x = 0 f'(x) + f''(x)\Delta x=0 f′(x)+f′′(x)Δx=0
求解:
Δ x = − f ′ ( x n ) f ′ ′ ( x n ) \Delta x= -\frac{f'(x_n)}{f''(x_n)} Δx=−f′′(xn)f′(xn)
令 Δ x = x n + 1 − x n \Delta x = x_{n+1} - x_n Δx=xn+1−xn,得到迭代公式:
x n + 1 = x n − f ′ ( x n ) f ′ ′ ( x n ) x_{n+1}= x_n-\frac{f'(x_n)}{f''(x_n)} xn+1=xn−f′′(xn)f′(xn)
将上述公式推广到高维情况:
X n + 1 = X n − ∇ f ( X k ) ∇ 2 f ( X k ) X_{n+1}= X_n-\frac{\nabla f(X_k)}{\nabla^2 f(X_k)} Xn+1=Xn−∇2f(Xk)∇f(Xk)
令 Hessian 矩阵 H ( X n ) = ∇ 2 f ( X k ) H(X_n) = \nabla^2 f(X_k) H(Xn)=∇2f(Xk),公式变为:
X n + 1 = X n − [ H ( X n ) ] − 1 ∇ f ( X n ) X_{n+1}= X_n-[H(X_n)]^{-1}\nabla f(X_n) Xn+1=Xn−[H(Xn)]−1∇f(Xn)
阻尼牛顿法(Damped-Newton Method)
原始牛顿法虽然具有二次终止性(即用于二次凸函数时,经有限次迭代必达极小点),但是要求初始点需要尽量靠近极小点,否则有可能不收敛。因此人们又提出了阻尼牛顿法。
这种方法在算法形式上等同于所有流行的优化方法,即确定搜索方向,再沿此方向进行一维搜索,找出该方向上的极小点,然后在该点处重新确定搜索方向,重复上述过程,直至函数梯度小于预设判据 ϵ \epsilon ϵ。具体算法步骤如下:
- 给定初始点 x 0 \mathbf{x}_0 x0,设定收敛误差 ϵ \epsilon ϵ,初始时 k = 0 k=0 k=0
- 计算 $\nabla f(\mathbf{x}_k) $ 与 $\nabla^2 f(\mathbf{x}_k) $
- 若 ∥ ∇ f ( x k ) ∥ < ϵ \|\nabla f(\mathbf{x}_k)\| < \epsilon ∥∇f(xk)∥<ϵ,停止迭代;否则,确定搜索方向 $ \mathbf{d}_k = [\nabla^2 f(x_k)]^{-1}\nabla f(x_k)$
- 从