机器学习之优化方法(二)

二阶优化

之前介绍的一阶的优化方法,能够找到迭代的方向,但是往往不能决定迭代的步长,本文介绍的牛顿相关方法能一定程度上解决这个问题。

牛顿法

首先我们来看看牛顿法的推导过程,
对于函数f(x)在xkx_{k}处进行二阶泰勒展开。

f(x)=f(xk)+f(xk)(xxk)+12f(xk)(xxk)2f(x)=f(x_{k})+f'(x_{k})(x-x_{k})+\frac{1}{2}f''(x_{k})(x-x_{k})^{2}

前两阶求导等于0

f(xk)+(xxk)f(xk)=0xn+1=xn+f(xk)f(xk)f'(x_{k})+(x-x_{k})f''(x_{k})=0 \\ x_{n+1} = x_{n}+\frac{f'(x_{k})}{f''(x_{k})}

迭代过程如下图。
牛顿法
从上面的迭代过程能够看出,对于底部碗装的线性,其效果会十分的差。如前两种线性。
image-1680147035002

割线法

通过上面的讲解,我们知道牛顿法是要求有二阶导数的,但是并不是所有的函数都存在二阶导数, 割线法主要就是解决这个问题的。

f(xk)=f(xk)f(xk1)xkxk1f''(x_{k})=\frac{f'(x_{k})-f''(x_{k-1})}{x_{k}-x_{k-1}}

这样就能解决没有二阶导数的函数的牛顿法的使用上。

拟牛顿法

拟牛顿法也是解决类似的问题, 但是在矩阵上近似黑塞矩阵,这里就不做进一步的讲解啦。

约束优化

接下来咱们来介绍约束优化,什么样的优化是约束优化呢? 其实就是咱们原有的优化函数上加上约束条件而已。

min f(x)s.t. h(x)=0min\ f(x) \\ s.t. \ h(x)=0

h(x)可以是等式也可以是不等式。 实际上就是在约束范围内找到最优解。
其方法也是尽可能的消除掉约束,从而变成一个正常的优化问题。

消除转换

例如下面这个问题。

min xsin(x)s.t.   2<x<6min\ xsin(x) \\ s.t. \ \ \ 2<x<6

可以通过如下的转换

x=t2,6(x)=2+62+6222x1+x2x=t_{2,6}(x)=\frac{2+6}{2}+\frac{6-2}{2} \frac{2x}{1+x^{2}}

通过上面的转换,原来的公式就变成了

min  t2,6(x)sin(t2,6(x))min  [4+2(2x1+x2)]sin[4+2(2x1+x2)]min\ \ t_{2,6}(x)sin(t_{2,6}(x)) \\ min\ \ [4+2( \frac{2x}{1+x^{2}})] sin[4+2( \frac{2x}{1+x^{2}})]

这样就变成了一个无约束问题。

拉格朗日乘法

拉格朗日乘法主要是解决受限约束的函数是等式的情况下,如下公式。

min  f(x)s.t.  h(x)=0min\ \ f(x)\\ s.t. \ \ h(x)=0

利用拉格朗日乘法计算f的等高线与h(x)=0的等高线对齐的位置。由于函数在某个点的梯度垂直于该函数通过该店的等高线,我们知道h的梯度将垂直于等高线h(x)=0,因此需要找到f的梯度和h的梯度在哪里对齐。

f(x)=λh(x)\nabla f(x)=\lambda \nabla h(x)

其拉格朗日函数为

L(x,λ)=f(x)λh(x)L(x, \lambda )=f(x)-\lambda h(x)

举例

看下面这个例子。求解如下的公式

min  exp((x1x232)2(x232)2)s.t.  x1x22=0min\ \ -exp(-(x_{1}x_{2}-\frac{3}{2})^{2}-(x_{2}-\frac{3}{2})^{2}) \\ s.t.\ \ x_{1}-x_{2}^{2}=0

使用拉格朗日法

L(x1,x2,λ)=exp((x1x232)2(x232)2)λ(x1x22)Lx1=2x2f(x)(32x1x2)λLx2=2λx2+f(x)(2x1(x1x232)2(x232))Lλ=x22x1L(x_{1},x_{2},\lambda)=-exp(-(x_{1}x_{2}-\frac{3}{2})^{2}-(x_{2}-\frac{3}{2})^{2})-\lambda(x_{1}-x_{2}^{2}) \\ \frac{\partial L}{\partial x_{1}}=2x_{2} f(x)(\frac{3}{2}-x_{1}x_{2})-\lambda \\ \frac{\partial L}{\partial x_{2}}=2\lambda x_{2}+f(x)(-2x_{1}(x_{1}x_{2}-\frac{3}{2})-2(x_{2}-\frac{3}{2})) \\ \frac{\partial L}{\partial \lambda}=x_{2}^{2}-x_{1}

分别令上面的导数为0,就能求出相应的x

惩罚方法

通过向目标函数增加惩罚项,可以使用惩罚方法将约束问题转化为非约束问题。

min  f(x)s.t.f(x)<0h(x)=0min \ \ f(x) \\ s.t.\\ f(x)<0 \\ h(x)=0

一种简单的惩罚方法是计算违反的约束方程数量

Pcount(x)=gi(x)>0+(hi(x)0)P_{count}(x)=\sum g_{i}(x)>0 + \sum (h_{i}(x) \neq 0)

那么新的方程就是

min  f(x)+aPcount(x)min\ \ f(x)+a P_{count}(x)

a是乘法幅度。 惩罚方法从初始点x和一个很小的a开始,求解无约束优化方程。然后得到一个点作为另一个优化的起点,并增加惩罚,直到得到可行结果,或者达到了最大迭代次数。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×