机器学习基础补习06---梯度下降和拟牛顿

本文深入探讨梯度下降法和拟牛顿算法在解决优化问题中的应用。从线性回归的最小二乘法开始,介绍了梯度下降的基本原理和学习率的选择,包括固定和变化学习率、线性搜索方法如二分和回溯搜索。接着,文章转向牛顿法,讨论其优缺点,并引出了拟牛顿法,特别是BFGS算法,作为牛顿法的高效替代。整个过程中,强调了搜索方向和步长选择对算法性能的影响,并通过实验对比展示了不同策略的效果。
摘要由CSDN通过智能技术生成

这篇文章来写一下梯度下降算法和拟牛顿算法
先来看一下上篇文章中的一些东西

Lagrange对偶函数的鞍点解释
(1)为表述方便,假设没有等式约束,只考虑不等式约束,结论可方便的扩展到等式约束
(2)假设 x 0 x_0 x0不可行,即存在某些i,使得 f i ( x ) > 0 f_i(x)>0 fi(x)>0,则选择 λ i → ∞ \lambda_i\to∞ λi,对于其他乘子, λ j = 0 , j ≠ i \lambda_j=0,j≠i λj=0,j=i
(3)假设 x 0 x_0 x0可行,则有 f i ( x ) ≤ 0 , ( i = 1 , 2 , . . . , m ) f_i(x)≤0,(i=1,2,...,m) fi(x)0i=1,2,...,m,选择:
λ i = 0 , 1 , 2 , . . . , m \lambda_i=0,1,2,...,m λi=0,12...,m
有:
在这里插入图片描述
鞍点:最优点
原问题是: i n f x f 0 ( x ) \qquad \underset{x}{inf}f_0(x) xinff0(x)
从而,原问题的本质为: i n f x s u p λ ≥ 0 L ( x , λ ) \underset{x}{inf} \underset {\lambda≥0}{sup} L(x,\lambda) xinfλ0supL(x,λ)
而对偶问题,是求对偶函数的最大值,即:
s u p λ ≥ 0 i n f x L ( x , λ ) \underset {\lambda≥0}{sup} \underset{x}{inf} L(x,\lambda) λ0supxinfL(x,λ)
而: s u p λ ≥ 0 i n f x L ( x , λ ) ≤ i n f x s u p λ ≥ 0 L ( x , λ ) \underset {\lambda≥0}{sup} \underset{x}{inf} L(x,\lambda)≤\underset{x}{inf} \underset {\lambda≥0}{sup} L(x,\lambda) λ0supxinfL(x,λ)xinfλ0supL(x,λ)
在这里插入图片描述
即,先求极小值再求极大值的情况肯定不如先求极大值再求极小值
这个结论我们后面还会用到的

预备题目
已知二次函数的一个点函数值和导数值,以及另外一个点的函数值,如何确定该函数的的解析式?
(1)即:二次函数 f ( x ) f(x) f(x),已知 f ( a ) , f ′ ( a ) , f ( b ) , 求 f ( x ) f(a),f^{'}(a),f(b),求f(x) f(a),f(a),f(b)f(x)
(2)特殊的,若a=0,题目变成:
对于二次函数 f ( x ) , 已 知 f ( 0 ) , f ′ ( 0 ) , f ( a ) , 求 f ( x ) f(x),已知f(0),f^{'}(0),f(a),求f(x) f(x),f(0),f(0),f(a),f(x)
在这里插入图片描述
从线性回归谈起
在这里插入图片描述
y = a x + b = a x 1 + b x 0 , 其 中 , x 0 = 1 y=ax+b=ax_1+bx_0,其中,x_0=1 y=ax+b=ax1+bx0,x0=1
多个变量的情形
考虑两个变量:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
θ \theta θ的解析式的求解过程
(1)将M个N维样本组成矩阵X:
a.其中,X的每一行对应一个样本,共M个样本
b.X的每一列对应样本的一个维度,共N维:其实还有额外的一维常数项,全为1
(2)一个比较“符合常理”的误差函数为:
在这里插入图片描述
(3)已经论证:最小二乘建立的目标函数,是在高斯噪声的假设下,利用极大似然估计的方法建立的。
梯度下降法
在这里插入图片描述

(1)初始化 θ \theta θ(随机初始化)
(2)迭代,新的 θ \theta θ能够使得 J ( θ ) J(\theta) J(θ)更小
(3)如果 J ( θ ) J(\theta) J(θ)能够继续减少,返回(2)
在这里插入图片描述
α称为学习率/步长
梯度方向
在这里插入图片描述
思考:(1)学习率α如何确定
a.使用固定学习率还是变化学习率
b.学习率设置多大比较好?
(2)下降方向
a.处理梯度方向,其他方向是否可以?
b.可行方向和梯度方向有何关系?
实验:固定学习率的梯度下降
y = x 2 y=x^2 y=x2,初值取x=1.5,学习率使用0.01
在这里插入图片描述
从上图可以看出,效果还是非常不错的,经过200次迭代,x=0.0258543,经过1000次迭代, x = 2.52445 ∗ 1 0 − 9 x=2.52445*10^{-9} x=2.52445109
实验2: y = x 4 y=x^4 y=x4,初值取x=1.5,学习率使用0.01
在这里插入图片描述
效果还是比较欠缺的,经过200次迭代,x=0.24436;经过1000次迭代,x=0.111275,并且迭代后期下降速率变得很慢
优化学习率
(1)分析“学习率α”在 f ( x ) f(x) f(x)中的意义
(2)调整学习率:
a.在斜率(方向导数)大的地方,使用小学习率
b.在斜率(方向导数)小的地方,使用大学习率

梯度下降的运行过程分析
(1) x k = a x_k=a xk=a,沿着负梯度方向,移动到 x k + 1 = b x_{k+1}=b xk+1=b,有:
在这里插入图片描述
(2)从 x 0 x_0 x0为出发点,每次沿着当前函数梯度反方向移动移动距离 α k α_k αk,得到序列:
x 0 , x 1 , x 2 , . . . , x n x_0,x_1,x_2,...,x_n x0,x1,x2,...,xn
(3)对应的各点函数值序列之间的关系为:
f ( x 0 ) ≥ f ( x 1 ) ≥ f ( x 2 ) ≥ . . . ≥ f ( x n ) f(x_0)≥f(x_1)≥f(x_2)≥...≥f(x_n) f(x0)f(x1)f(x2)...f(xn)
(4)当n达到一定值时,函数 f ( x ) f(x) f(x)收敛到局部最小值

视角转换
(1)记当前点为 x k x_k xk,当前搜索方向为 d k d_k dk(如,负梯度方向),因为学习率α是待考察的对象,因此,将下列函数 f ( x k + α d k ) f(x_k+αd_k) f(xk+αdk)看做关于α的函数 h ( α ) h(α) h(α)
h ( α ) = f ( x k + α d k ) , α > 0 h(α)=f(x_k+αd_k),α>0 h(α)=f(xk+αdk),α>0
(2)当α=0时, h ( 0 ) = f ( x k ) h(0)=f(x_k) h(0)=f(xk)
(3)导数:
在这里插入图片描述

学习率α的计算标准
(1)因为梯度下降是寻找 f ( x ) f(x) f(x)的最小值,那么,在 x k x_k xk d k d_k dk给定的前提下,即寻找函数 f ( x k + α d k ) f(x_k+αd_k) f(xk+αdk)的最小值,即:

进一步,如果h(α)可导,局部最小值处的α满足:
在这里插入图片描述
学习率函数导数的分析在这里插入图片描述
(1)将α=0代入:
在这里插入图片描述
(2)下降方向 d k d_k dk可以选负梯度方向
在这里插入图片描述
或者选择与负梯度方向夹角小于90°的某方向
(3)从而: h ′ ( 0 ) < 0 h^{'}(0)<0 h0<0
(4)如果能够找到足够大的α,使得 h ′ ( a ^ ) > 0 h^{'}(\hat{a})>0 ha^>0
(5)则必存在某α,使得 h ′ ( a ∗ ) = 0 h^{'}(a^*)=0 ha=0
(6) a ∗ a^* a即为要寻找的学习率

线性搜索(Line Search)
最简单的处理方式
(1)二分线性搜索(Bisection Line Search)
(2)不断将区间 [ a 1 , a 2 ] [a_1,a_2] [a1,a2]分成两半,选择端点异号的一侧,直到区间足够小或者找到当前最优学习率

回溯线性搜索(Backing Line Search)
基于Armijo准则计算搜索方向上的最大步长,其基本思想是沿着搜索方向移动一个较大的步长估计值,然后以迭代形式不断缩减步长,直到该步长使得函数值 f ( x k + α d k ) f(x_k+αd_k) f(xk+αdk)相对于当前函数值 f ( x k ) f(x_k) f(xk)的减小程度大于预设的期望值(即满足Armijo准则)为止。
在这里插入图片描述
回溯与二分线性搜索的异同
(1)二分线性搜索的目标是求得满足 h ′ ( α ) ≈ 0 h^{'}(α)≈0 h(α)0的最优步长近似值,而回溯线性搜索放松了对步长的约束,只要步长能使函数值有足够大的变化即可
(2)二分线性搜索可以减少下降次数,但在计算最优步长上花费了不少代价;回溯线性搜索找到一个差不多的步长即可

回溯线性搜索的思考:插值法
(1)采样多项式插值法(Interpolation)拟合简单函数,然后根据该简单函数估计函数的极值点,这样选择合适步长的概率会高很多
(2)现在拥有的数据为: x k x_k xk处的函数值 f ( x k ) f(x_k) f(xk)及其导数 f ′ ( x k ) f^{'}(x_k) f(xk),再加上第一次尝试的步长 α 0 α_0 α0,如果 α 0 α_0 α0满足条件,显然算法退出;若 α 0 α_0 α0不满足条件,则根据上述信息可以构造一个二次近似函数:
在这里插入图片描述
二次插值法求极值
在这里插入图片描述

显然,导数为0的最优值为:
在这里插入图片描述
a 1 a_1 a1满足Armijo准则,则输出该学习率;否则,继续迭代

实验:二次插值线性搜索寻找学习率
y = x 4 y=x^4 y=x4,初值取x=1.5,二次插值线性搜索方法
在这里插入图片描述
分析:效果还不错,经过12次迭代,x=0.0000282229
经过100次迭代, x = 3.61217 ∗ 1 0 − 7 x=3.61217*10^{-7} x=3.61217107

总结与思考
(1)通过使用线性搜索的方式,能够比较好的解决学习率问题
(2)一般的说,回溯线性搜索和二次差值线性搜索能够基本满足实践中的需要

搜索方向
(1)若搜索方向不是严格梯度方向, 是否可以?
思考:因为函数二阶导数反映了函数的凹凸性;二阶导越大,一阶导的变化越大。在搜索中,可否用二阶导做些“修正”?如:二者相除?
在这里插入图片描述
附:平方根算法
在任意点 x 0 x_0 x0处Taylor展开
f ( x ) = x 2 − a , 即 f ( x ) = 0 f(x)=x^2-a,即f(x)=0 f(x)=x2af(x)=0
在这里插入图片描述
实验:搜索方向的探索
y = x 4 y=x^4 y=x4,初值取x=1.5,搜索方向为负梯度除以二阶导
在这里插入图片描述
效果出奇的好!经过12次迭代,x=0.00770735
经过100次迭代, x = 3.68948 ∗ 1 0 − 18 x=3.68948*10^{-18} x=3.689481018
试比较二次插值线性搜索时:经过12次迭代,x=0.0000282229
经过100次迭代, x = 3.61217 ∗ 1 0 − 7 x=3.61217*10^{-7} x=3.61217107
虽然经过12次迭代的值还是有些欠缺,但是100次迭代后效果已经非常好了

分析上述结果的原因
f ( x ) f(x) f(x)二阶导连续,将 f ( x ) f(x) f(x) x k x_k xk处Taylor展开:
在这里插入图片描述
这就是牛顿迭代法
该方法可以直接推广到多维,用方向导数代替一阶导,用Hessian矩阵代替二阶导
在这里插入图片描述
牛顿法的特点
(1)经典牛顿法虽然具有二次收敛性,但是要求初始点需要尽量靠近极小点,否则有可能不收敛
(2)计算过程中需要计算目标函数的二阶偏导数,难度较大
(3)目标函数的Hessian矩阵无法保持正定,会导致算法产生的方向不能保证是f在 x k x_k xk处的下降方向, 从而令牛顿法失效
(4)如果Hessian矩阵奇异,牛顿方向可能根本是不存在的

拟牛顿的思路
(1)求Hessian矩阵的逆影响算法效率,同时,搜索方向只要和负梯度的夹角小于90°即可,因此,可以用近似矩阵代替Hessian矩阵,只要满足该矩阵正定,容易求逆,或者可以通过若干步递推公式计算得到
a.BFGS/LBFGS
拟牛顿里面最著名的要属BFGS了
BFGS
矩阵迭代公式:
在这里插入图片描述
初值选单位阵 B 0 = I B_0=I B0=I
记: C k ≈ H k − 1 C_k≈H_k^{-1} CkHk1
有:
在这里插入图片描述
ok,暂且到这里,虽然很乱也很难,但是认真看看还是可以学会哒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值