Chapter 12 无约束优化 {Optimization without constraintss}

12.1 例子

之前我们讨论了许多优化问题:

问题 目标函数 约束
最小二乘法 E(x)=∥Axb2
b 投影到 a E(c)=∥cab2
实对称矩阵的特征向量 E(x)=xTAx x∥=1
Pseudoinverse E(x)=∥x2 ATAx=ATb
主成分分析 E(C)=∥XCCTXFro CTC=Id×d
Broyden step E(Jk)=∥JkJk12Fro Jk(xkxk1)=f(xk)f(xk1)

有些是有约束的,有些没有,我们现在先考虑无约束的问题,set up 如下:

minxf(x)

  • 例子一

可以有很多例子,比如数据拟合,类似最小二乘法,不过现在我们是想用一个指数来拟合:

E(a,c)=i(yiceaxi)2

  • 例子二

给一堆数据,怀疑正态分布,用正态分布来拟合:

g(h;μ,σ)=1σ2πe(hμ)2/2σ2

给一大堆独立数据 h1,,hn

P(h1,,hn;μ,σ)=ig(hi,μ,σ)

要求估算出 μ,σ 来最大化概率分布, 感觉 贝叶斯/NLP 中间会有很多这种模型的应用。

  • 例子三

给一堆数据,我们想找到它的几何中心(geometric median),注意这个不同于质心,比如下图:

蓝色的店是质心,黄色的点是几何中心,几何中心满足:

E(x)=ixxi2

注意这里只是 l2 norm, 并没有平方。

12.2 极值

全局最小值:

xRnf:RnRxRnf(x)f(x)

局部最小值:

xRnf:RnRxx∥<ε,f(x)f(x)

最大值的定义也是类似的,无约束优化其实就是一个求极值的问题。求极值这个问题我们在数学上还是比较熟悉的。同样,我们从一元函数开始。

12.3 一元函数

12.3.1 牛顿法

f:RR, 如果函数可微,那么极值的可能出现点就包括了 驻点、边界以及导数不存在的点,此处我们集中讨论驻点的情况。也就是导数 f(x)=0 的点 。 鉴于之前我们已经讨论过一元函数求根 f(x)=0。 这里无非也就是变成了求解 f(x)=0, 那么依旧可以使用 牛顿法:

xk+1=xkf(xk)f

12.4 多元函数

f: \mathbb{R}^n \to \mathbb{R}, 针对多元函数,感觉最出名就是梯度下降了(类比下山)。

12.4.1 梯度下降法

梯度下降方法基于以下的观察:如果实值函数 F(\vec{x}) 在点 \vec {a} 处可微且有定义,那么函数 F(\vec{x})\vec{a} 点沿着梯度相反的方向 -\nabla F({\vec {a}}) 下降最多。

因而,如果 {\vec {b}}={\vec {a}}-\gamma \nabla F({\vec {a}}) 对于 $ >0$ 为一个够小数值时成立,那么 F({\vec {a}})\geq F({\vec {b}})

所以我们可以有梯度下降法的明确步骤:

  • 随机预估的 x_0
  • g_k(t) = f(\vec{x}_k - t \nabla f(\vec{x}_k))
  • 搜索找到 t^* \ge 0 同时最小化 g_k
  • \vec{x}_{k+1} = \vec{x}_k - t^* \nabla f(\vec{x}_k)

12.4.2 牛顿法

同样类似一元函数,我们可以推广牛顿法:

\vec{x}_{k+1} = \vec{x}_k - [H_f(\vec{x}_k)]^{-1} \nabla f(\vec{x}_k)

使用牛顿法的问题在于 \nabla f(\vec{x}) 已经比较难计算了,而再加上 Hessian 矩阵,痛苦+n, 所以我们依旧寻求之前的 单变量 拟牛顿法 Quasi-Newton method 来前进。

12.4.3 BFGS

想不到 BFGS 的全称是 Broyden–Fletcher–Goldfarb–Shanno algorithm,此 Shanno 非彼 Shanno,是四位研究优化的数学家的名字,这个算法类似之前出现过的 Broyden’s method, 我们用矩阵来近似Hessian 矩阵 :

\vec{x}_{k+1} = \vec{x}_k - \alpha_k B_{k}^{-1}\nabla f(\vec{x}_k) \\ B_k \approx H_f(\vec{x}_k)

B_{k+1} ( \vec{x}_{k+1} - \vec{x}_k) = \nabla f(\vec{x}_{k+1}) - \nabla f(\vec{x}_{k})

B 有一些很好的性质:

  • 对称
  • 半正定

所以我们需要做的优化就是:

min_{B_{k+1}} \parallel B_{k+1} - B_k \parallel \\ s.t. B_{k+1}^T = B_{k+1} \\ B_{k+1} ( \vec{x}_{k+1} - \vec{x}_k) = \nabla f(\vec{x}_{k+1}) - \nabla f(\vec{x}_{k})

而 $B_{k+1} - B_k $ 最小化 并不能保证 $B_{k+1}^{-1} - B_k^{-1} $ 很小,所以我们应当要求解的是:

min_{H_{k+1}} \parallel H_{k+1} - H_k \parallel \\ s.t. H_{k+1}^T = H_{k+1} \\ \vec{x}_{k+1} - \vec{x}_k = H_{k+1} ( \nabla f(\vec{x}_{k+1}) - \nabla f(\vec{x}_{k}) )

更多关于此算法参考:

Broyden–Fletcher–Goldfarb–Shanno algorithm