无约束优化系列:(0)梯度下降法和牛顿法推导(收敛性证明)

问题描述

对于无约束凸函数求最值问题:
m i n i m i z e f ( x ) minimize \quad f(x) minimizef(x)
f ( x ) f(x) f(x)为二次可微凸函数。我们假设该问题存在唯一最优解 x ∗ x^* x,既然 f ( x ) f(x) f(x)二次可微,则满足以下充要条件:
f ′ ( x ∗ ) = 0 f'(x^*)=0 f(x)=0

有时候,上式可以直接通过解析解求得最优解。但更多时候,无法求得解析解,如最小二乘的解析解里需要求逆,该逆不一定可以求出。此时,必须采用迭代算法,即计算一系列点 x 0 , x 1 , x 2 , . . . . x n x_{0},x_{1},x_{2},....x_{n} x0,x1,x2,....xn的函数值 f ( x n ) f(x_n) f(xn),来查找最接近 x ∗ x^* x的点,当 f ( x n ) − f ( x ∗ ) < ϵ f(x_{n})-f(x^*)<\epsilon f(xn)f(x)<ϵ时,算法终止, ϵ \epsilon ϵ为容许误差值,此时 x n x_{n} xn为近似最优解 x ∗ x^* x.

问题是:
如何获得这些近似点序列呢?前提是越往后的点,越接近最优值,即满足(假设是求最小值问题,最大值类似):
f ( x n + 1 ) < f ( x n ) f(x_{n+1}) < f(x_{n}) f(xn+1)<f(xn)
梯度下降法和牛顿法就是用来解决该问题。

泰勒公式

泰勒(Taylor)中值定理1:
如果函数 f ( x ) f(x) f(x) x 0 x_0 x0处具有 n n n阶导数,那么存在 x 0 x_0 x0的一个邻域,对于该邻域内的任一 x x x,有:
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) 1 ! ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 + . . . + f n ( x 0 ) n ! ( x − x 0 ) n + o ( ( x − x 0 ) n ) f(x)=f(x_0) + \frac{f'(x_0)}{1!}(x-x_0) + \frac{f''(x_0)}{2!}(x-x_0)^2 +...+ \frac{f^n(x_0)}{n!}(x-x_0)^n + o((x-x_0)^n) f(x)=f(x0)+1!f(x0)(xx0)+2!f(x0)(xx0)2+...+n!fn(x0)(xx0)n+o((xx0)n)
其中:
R n ( x ) = o ( ( x − x 0 ) n ) R_n(x)=o((x-x_0)^n) Rn(x)=o((xx0)n)

如何理解?
泰勒公式用于在给定了 f ( x ) f(x) f(x),和一个初始点 x 0 x_0 x0,自然, f f f x 0 x_0 x0 n n n阶导数可直接求出。此时,可间接求得 x 0 x_0 x0附近的点 x x x的函数值,求解方法为用一个多项式函数(等号右侧的函数),去近似这个复杂的目标函数(等号左侧的函数),即多项式的值即为 f ( x ) f(x) f(x)的值。

梯度下降法

回到我们问题的目标:
计算一系列点 x 0 , x 1 , x 2 , . . . . x n x_{0},x_{1},x_{2},....x_{n} x0,x1,x2,....xn的函数值 f ( x n ) f(x_n) f(xn),来查找最接近 x ∗ x^* x的点,当 f ( x n ) − f ( x ∗ ) < ϵ f(x_{n})-f(x^*)<\epsilon f(xn)f(x)<ϵ时,算法终止,这些点必须满足:
f ( x n + 1 ) < f ( x n ) f(x_{n+1}) < f(x_{n}) f(xn+1)<f(xn)

假设:

  • x 0 x_{0} x0为第一个点,即初始点,由于 f f f形式为已知,所以 f ( x 0 ) f(x_0) f(x0)可求得,自然, f f f x 0 x_0 x0 n n n阶导数可直接求出。
  • x x x为下一个满足条件 f ( x n + 1 ) < f ( x n ) f(x_{n+1}) < f(x_{n}) f(xn+1)<f(xn)的点

正向推导

根据泰勒公式,取前两项,可得:
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) f(x)=f(x_0) + f'(x_0)(x-x_0) f(x)=f(x0)+f(x0)(xx0)

为了 x x x满足条件 f ( x n + 1 ) < f ( x n ) f(x_{n+1}) < f(x_{n}) f(xn+1)<f(xn) f ( x ) < f ( x 0 ) f(x) < f(x_{0}) f(x)<f(x0),可得
f ′ ( x 0 ) ( x − x 0 ) < 0 f'(x_0)(x-x_0) <0 f(x0)(xx0)<0
为了满足该条件,我们构造一个 x x x,很明显当:
( x − x 0 ) = − α f ′ ( x 0 ) , α > 0 (x-x_0)= -\alpha f'(x_0),\quad \alpha>0 (xx0)=αf(x0),α>0
时, f ( x ) = f ( x 0 ) + ( − α f ′ ( x 0 ) 2 ) f(x)=f(x_0) + (-\alpha f'(x_0)^2) f(x)=f(x0)+(αf(x0)2)
使得:
f ( x ) < f ( x 0 ) f(x) < f(x_{0}) f(x)<f(x0)
这时满足条件的 x x x为:
x = x 0 − α f ′ ( x 0 ) x= x_0-\alpha f'(x_0) x=x0αf(x0)
写成迭代形式:
x n + 1 = x n − α f ′ ( x n ) x_{n+1}= x_n-\alpha f'(x_n) xn+1=xnαf(xn)

这就是 x n x_n xn的迭代公式,其中 α \alpha α为学习率,也叫步长或比例因子, f ′ ( x 0 ) f'(x_0) f(x0)为搜索方向,也叫步径。这里搜索方向即为目标函数的一阶导数方向,所以该迭代求解方法也叫梯度下降法。

以上步骤是在一元函数上证明了梯度下降的有效性。容易推广到多元函数。

反向证明

假设:

  • 当前点为 x 0 x_0 x0
  • 下一个迭代点为 x 1 = x 0 + Δ x x_1=x_0+\Delta x x1=x0+Δx
  • f f f x 0 x_0 x0处的导数值 f ′ ( x 0 ) = a f'(x_0)=a f(x0)=a
  • Δ x \Delta x Δx f ′ ( x 0 ) f'(x_0) f(x0)的反方向,即 Δ x = − α a \Delta x= - \alpha a Δx=αa
  • α ≥ 0 \alpha \geq 0 α0,为学习率

根据导数的定义:
f ( x 0 ) = lim ⁡ Δ x → + ∞ f ( x 0 + Δ x ) − f ( x 0 ) Δ x = a f(x_0) = {\lim_{\Delta x\to +\infty}} \frac{f(x_0+\Delta x) - f(x_0)}{\Delta x} =a f(x0)=Δx+limΔxf(x0+Δx)f(x0)=a
Δ x \Delta x Δx很小,但不会为零,所以将其乘到右边可得:
f ( x 0 + Δ x ) − f ( x 0 ) = − α a 2 f(x_0+\Delta x) - f(x_0) =-\alpha a^2 f(x0+Δx)f(x0)=αa2
f ( x 0 + Δ x ) − f ( x 0 ) = − α a 2 ≤ 0 f(x_0+\Delta x) - f(x_0) =-\alpha a^2 \leq 0 f(x0+Δx)f(x0)=αa20
f ( x 0 + Δ x ) ≤ f ( x 0 ) f(x_0+\Delta x) \leq f(x_0) f(x0+Δx)f(x0)
即:
f ( x 1 ) ≤ f ( x 0 ) f(x_1) \leq f(x_0) f(x1)f(x0)

即下一个迭代点更趋近最小值。

牛顿法

正向推导

根据泰勒公式,这次我们取前三项,可得:
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) 1 ! ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 ( 1 ) f(x)=f(x_0) + \frac{f'(x_0)}{1!}(x-x_0) + \frac{f''(x_0)}{2!}(x-x_0)^2 \quad (1) f(x)=f(x0)+1!f(x0)(xx0)+2!f(x0)(xx0)2(1)

因为我们假设 x x x是比上一个迭代值 x 0 x_0 x0更接近最小值,不妨假设 x x x就是最小值,此时,
f ′ ( x ) = 0 f'(x)=0 f(x)=0
f ( x 0 ) + f ′ ( x 0 ) 1 ! ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 f(x_0) + \frac{f'(x_0)}{1!}(x-x_0) + \frac{f''(x_0)}{2!}(x-x_0)^2 f(x0)+1!f(x0)(xx0)+2!f(x0)(xx0)2 x x x求导为0,即:
f ′ ( x 0 ) x + f ′ ′ ( x 0 ) 2 ! 2 x ( x − x 0 ) = 0 f'(x_0)x + \frac{f''(x_0)}{2!}2x(x-x_0) = 0 f(x0)x+2!f(x0)2x(xx0)=0
可得:
x = x 0 − f ′ ( x 0 ) f ′ ′ ( x 0 ) x=x_0 - \frac{f'(x_0)}{f''(x_0)} x=x0f(x0)f(x0)

写成迭代公式形式:
x n + 1 = x n − α f ′ ( x n ) f ′ ′ ( x n ) , α > 0 x_{n+1}=x_n - \alpha \frac{f'(x_n)}{f''(x_n)},\quad \alpha>0 xn+1=xnαf(xn)f(xn),α>0

对比可发现,牛顿法修正了梯度下降的方向。

反向推导

还可以将结果 x − x 0 = − f ′ ( x 0 ) f ′ ′ ( x 0 ) x-x_0 = - \frac{f'(x_0)}{f''(x_0)} xx0=f(x0)f(x0)
反代入(1)式:
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) 1 ! ( − f ′ ( x 0 ) f ′ ′ ( x 0 ) ) + f ′ ′ ( x 0 ) 2 ! ( − f ′ ( x 0 ) f ′ ′ ( x 0 ) ) 2 f(x)=f(x_0) + \frac{f'(x_0)}{1!}(- \frac{f'(x_0)}{f''(x_0)}) + \frac{f''(x_0)}{2!}(- \frac{f'(x_0)}{f''(x_0)})^2 \quad f(x)=f(x0)+1!f(x0)(f(x0)f(x0))+2!f(x0)(f(x0)f(x0))2
f ( x ) = f ( x 0 ) − 1 2 f ′ ( x 0 ) 2 f ′ ′ ( x 0 ) f(x)=f(x_0) - \frac{1}{2} \frac{f'(x_0)^2}{f''(x_0)} \quad f(x)=f(x0)21f(x0)f(x0)2
f ( x ) − f ( x 0 ) = − 1 2 f ′ ( x 0 ) 2 f ′ ′ ( x 0 ) f(x)-f(x_0)= - \frac{1}{2} \frac{f'(x_0)^2}{f''(x_0)} \quad f(x)f(x0)=21f(x0)f(x0)2

因为 f f f为凸函数,所以二阶导数:
f ′ ′ ( x 0 ) ≥ 0 f''(x_0)\geq0 f(x0)0
所以:
f ( x ) − f ( x 0 ) = − 1 2 f ′ ( x 0 ) 2 f ′ ′ ( x 0 ) ≤ 0 f(x)-f(x_0)= - \frac{1}{2} \frac{f'(x_0)^2}{f''(x_0)} \leq0 f(x)f(x0)=21f(x0)f(x0)20
f ( x ) − f ( x 0 ) ≤ 0 f(x)-f(x_0)\leq0 f(x)f(x0)0

上面的数学推导是用的一元函数,对于多元函数,这个分母存相当于要计算Hessian矩阵的逆矩阵,这是非常困难且耗费时间的。因此,很多牛顿算法的变形出现了,这类变形统称拟牛顿算法。BFGS是用迭代法去近似计算海森矩阵。而BFGS需要额外储存近似的那个海森矩阵,所以有了改进版L-BFGS。

参考:https://blog.csdn.net/qq_28739605/article/details/80862810

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值