最优化方法之牛顿法

最优化方法之牛顿法

最近在做期末总结复习这学期学过的模型算法,复习到逻辑回归的时候,看到西瓜书上用到的优化方法除了梯度下降法以外,还提到了牛顿法。于是我花了点时间看了一下牛顿法的相关实现,特此记录,以备遗忘。

牛顿法的简单推导

牛顿法可以理解为一种求零点的方法,也就是求方程的解。用几何的思维理解:可以想象在有一条曲线 f(x),与 x 轴相交于一个点,我们称为曲线的根点记为 x* 。此时我们在曲线上任意找一个点 ( x0 , f(x0) ) 作它的切线记作 L0,L0与 x 轴的交点称为切线的根点记为 x1。如果我们在 x1 处作垂线交于曲线上一点,再在这个点上作它的切线记作 L1,L1与 x 轴上的交点记作 x2,接着重复上述动作,我们会发现 xi 越来越接近 x* 。那么我们用代数的方法来表示:

L0: f ( x 0 ) + f ( x 0 ) ′ ( x − x 0 ) f(x_0)+f(x_0)'(x-x_0) f(x0)+f(x0)(xx0)

f ( x 0 ) + f ( x 0 ) ′ ( x − x 0 ) f(x_0)+f(x_0)'(x-x_0) f(x0)+f(x0)(xx0) = 0

解得: x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_1=x_0-\cfrac{f(x_0)}{f'(x_0)} x1=x0f(x0)f(x0)

L1: f ( x 1 ) + f ( x 1 ) ′ ( x − x 1 ) f(x_1)+f(x_1)'(x-x_1) f(x1)+f(x1)(xx1)

f ( x 1 ) + f ( x 1 ) ′ ( x − x 1 ) f(x_1)+f(x_1)'(x-x_1) f(x1)+f(x1)(xx1) = 0

解得: x 2 = x 1 − f ( x 1 ) f ′ ( x 1 ) x_2=x_1-\cfrac{f(x_1)}{f'(x_1)} x2=x1f(x1)f(x1)

那么以此类推:

for {

x i = x i − 1 − f ( x ( i − 1 ) f ′ ( x ( i − 1 ) ) ​ x_i=x_{i-1}-\cfrac{f(x_{(i-1)}}{f'(x_{(i-1)})}​ xi=xi1f(x(i1))f(x(i1) }

当迭代 n 次后我们会发现 xi 不断靠近 x* ,结果越来越收敛。这是最好的一种情况,其他情况下可能会出现不收敛,甚至来回震荡。由于我们是用于凸函数的优化,故不作讨论。

优化逻辑回归模型

我们要最小化逻辑回归的损失函数: J ( w ) = ∑ i = 1 m ( − y i w T x + l n ( 1 + e w T x ) ) J(w)=\sum_{i=1}^{m}(-y_iw^Tx+ln(1+e^{w^Tx})) J(w)=i=1m(yiwTx+ln(1+ewTx))

因为 J ( w ) J(w) J(w)是凸函数,因此最小化它的方法很容易想到是令导函数为0解方程。因此我们可以用牛顿法求解 J ( w ) ′ J(w)' J(w)=0 ,解法如下:

在一元的情况下,令初始点为w0:

先将 J ( w ) ​ J(w)​ J(w)按二阶泰勒公式展开:

J ( w ) = J ( w 0 ) + ( w − w 0 ) J ( w 0 ) ′ + 1 2 ! ( w − w 0 ) 2 J ( w 0 ) ′ ′ J(w)=J(w_0)+(w-w_0)J(w_0)'+\cfrac{1}{2!}(w-w_0)^2J(w_0)'' J(w)=J(w0)+(ww0)J(w0)+2!1(ww0)2J(w0)

J ( w ) ′ = 0 ( 对 ( w − w 0 ) 求 导 ) J(w)'=0(对(w-w0)求导) J(w)=0ww0 ,则: w i = w i − 1 − J ( w i − 1 ) ′ J ( w i − 1 ) ′ ′ wi=w_{i-1}-\cfrac{J(w_{i-1})'}{J(w_{i-1})''} wi=wi1J(wi1)J(wi1) ,通过不断迭代逼近最优解。

在多元情况下,令初始点为wk:

J ( w ) J(w) J(w)的泰勒展开式表示为:

J ( w 1 . . . w N ) J(w_1...w_N) J(w1...wN)

= J ( w k 1 . . . w k N ) + ∑ i = 1 N ( w − w i ) α J ( w k ) α w i + 1 2 ! ∑ i = 1 N ∑ j = 1 N ( w − w i ) ( w − w j ) α J ( w k ) α w i α w j =J(w_{k_1}...w_{kN})+\sum_{i=1}^{N}(w-w_i)\cfrac{\alpha{J(w_k)}}{\alpha{wi}}+\cfrac{1} {2!}\sum_{i=1}^{N}\sum_{j=1}^{N}(w-w_i)(w-w_j)\cfrac{\alpha{J(w_k)}}{\alpha{w_i}\alpha{w_j}} =J(wk1...wkN)+i=1N(wwi)αwiαJ(wk)+2!1i=1Nj=1N(wwi)(wwj)αwiαwjαJ(wk)

用矩阵的形式表示:

J ( w ) = J ( w k ) + ( w − w k ) ∇ w J ( w k ) + ( w − w k ) T H ( w k ) ( w − w k ) J(w)=J(w_k)+(w-w_k)\nabla_{w}{J(w_k)}+(w-w_k)^TH(w_k)(w-w_k) J(w)=J(wk)+(wwk)wJ(wk)+(wwk)TH(wk)(wwk)

其中 H ( w k ) H(w_k) H(wk)(Hessian矩阵)为:

[ α J ( w k ) α w 1 w 1 α J ( w k ) α w 1 w 2 ⋯ α J ( w k ) α w 1 w N ⋮ ⋱ ⋮ α J ( w k ) α w N w 1 α J ( w k ) α w N w 2 ⋯ α J ( w k ) α w N w N ] ​ \begin{bmatrix} \cfrac{\alpha{J(w_k)}}{\alpha{w_1w_1}}&\cfrac{\alpha{J(w_k)}}{\alpha{w_1w_2}} \cdots & \cfrac{\alpha{J(w_k)}}{\alpha{w_1w_N}} \\ \vdots & \ddots & \vdots \\ \cfrac{\alpha{J(w_k)}}{\alpha{w_Nw_1}} & \cfrac{\alpha{J(w_k)}}{\alpha{w_Nw_2}}\cdots & \cfrac{\alpha{J(w_k)}}{\alpha{w_Nw_N}} \end{bmatrix}​ αw1w1αJ(wk)αwNw1αJ(wk)αw1w2αJ(wk)αwNw2αJ(wk)αw1wNαJ(wk)αwNwNαJ(wk)

然后同样令 J ( w ) ′ = 0 J(w)'=0 J(w)=0 ,求解得:

w t = w t − 1 − α J ( w t − 1 ) ′ α J ( w t − 1 ) ′ ′ w_{t}=w_{t-1}-\cfrac{\alpha{J(w_{t-1})'}}{\alpha{J(w_{t-1})''}} wt=wt1αJ(wt1)αJ(wt1)

不断迭代上式,以逼近最优解,来最小化损失函数。

你可能感兴趣的:(最优化方法之牛顿法)