优化学习率 - 2 - 牛顿法、拟牛顿法

本章总结优化学习率的知识,而前置知识就是“线性回归、梯度下降算法”,因此如果这一章你看的云里雾里甚至连学习率是什么都不知道的话就需要先吧前置知识搞定了。

其他说明

因为本总结的前置知识是“线性回归、梯度下降算法”,所以之后的内容都是以“求目标函数f(x)的极小值”为目的。

不过不用担心求极大值的话该怎么办,因为直接给f(x)加个负号就将问题转换为了求极小值问题了。

在顺便一提,个人感觉正因为研究了这么多求极小值的东西,于是大伙为了省事,就凡是遇到求极大值的问题则先将其转成求极小值,于是乎会经常看到这句话“习惯上我们将其转换成求极小值”....

牛顿法

首先先问个问题:如果搜索方向不是梯度方向的话,是否可以?即:使用另外一个方向来求函数的极小值可以吗?

答案是肯定的,如下图所示:

我在xk点处拟合一条二次曲线,然后对该二次曲线求极值后找到xk+1 = xk+dk点,这样就找到了一个比f(xk)更小的值f(xk+1),之后迭代此过程就找到最小值了。

而上面这个二次曲线的方向就是牛顿方向,这种方法就是牛顿法

不过因为牛顿法可能会产生下图所示的问题

即名为在xk处拟合一条二次曲线后求得的xk+1 = xk+dk“跑过了”,从而无法使函数收敛,再加上其他一些原因,所以实际工作中一般不使用牛顿法而使用拟牛顿法

不过为了记录,牛顿法的xk+1 的求法还是贴这里:

xk+1= xk - f’(xk)/f’’(xk)         式1

这个公式的来历如下:

利用Taylor公式对f(x)进行二次展开(当然,前提是f(x)的二阶导连续):

φ(x) = f(xk) + f’(xk)(x-xk)+ (1/2)f’’(xk)(x-xk)2 + R2(x)

舍弃高阶余子式后求导:

φ’(x) = f’(xk) + f’’(xk)(x-xk)

另φ’(x) = 0:

xk+1= xk - f’(xk)/ f’’(xk)

PS1:把上面的公式推广到多维的方法是“用方向导数代替一阶导,用Hessian矩阵代替二阶导”,即: xk+1 = xk - H-1▽f(xk),这里xk和xk+1都是向量,H-1代表Hessian矩阵的逆矩阵。

PS2:为什么式1能对应上牛顿方向的曲线不太明白,如果你知道的话可否在评论里告诉我,或者发个链接,或者告诉让我查什么知识点都好,不胜感激。

拟牛顿

正如上图所示,牛顿法的缺点是:本来我们在xk处沿着梯度方向是可以下降并找到极值点的(这是一阶,只求了个一阶导嘛),但沿着二阶收敛(还有二阶导,为什么?再看看牛顿法的公式)的方向去优化时反而升上去了。即:本来一阶能收敛的,可到了二阶可能不收敛,于是就在想:能不能搞一个比一阶梯度下降快一点,但效率有达不到二阶的牛顿法那样,但是却实实在在能收敛的方法呢?于是就做了个像牛顿的方向,这就有了拟牛顿法。

为了方便说明,这里在贴下牛顿法的公式:

xk+1= xk - H-1▽f(xk),这里xk和xk+1都是向量

而拟牛顿就是用一个近似矩阵代替Hessian矩阵或者Hessian矩阵的逆矩阵。

实践中常用的拟牛顿算法有:

DFP:Davidon - Fletcher - Powell

BFGS:Broyden - Fletcher - Goldfarb - Shanno

DFP

首先在回顾一下下面两个知识点:

一阶梯度下降:xk+1 = xk - α▽f’(xk)

二阶牛顿法:xk+1 = xk - α▽f’(xk)/ ▽f’’(xk)

然后开始讲解DFP的推导过程。

PS:下面的θ相当于上面的x,即之前都是说函数f(x),下面就说函数f(θ)了,这没什么特别含义,就是一会需要截图....

记函数f(θ)的梯度为g(θ),二阶导函数为H(θ)。

PS:若θ是n维向量,那g(θ)也是n维向量,H(θ)是n*n的矩阵。

接下来就和利用Taylor展开求得牛顿法的公式一样,利用Taylor展开来推导DFP,从而有了下面的推导过程:

解释:

第一行:Taylor展开

第二行:舍弃高阶余子式得到

第三行:求导得到,其中第二行最后一部分的求导利用了这个知识点:当矩阵A是对称阵(A = AT)时,xT·A·x 对x求偏导的结果是: 2A·x,而Hession矩阵就是对称阵。

第四行:既然这个式子对θi成立,那对θi-1也一定成立

第五行:把g(θi)简写成gi,g(θi-1)简写成gi-1

第六行到第七行:使用图右下角的式子对第六行做个替换。

结果,  就是上面的最后一个式子:

Ci△gi = △θi

即:

Hession矩阵的逆 * 梯度的变化量 = 自变量的变化量

现在就知道了,我们的目标是算Ci,因为:

对于牛顿法:xk+1 = xk - H-1▽f(xk),如果能求出H-1,那这个式子就完全搞定了。

而这个也同理啊,就Ci最欠求....

那怎么求Ci呢?方法就是对Ci做下面这个近似计算,即:Ci可能和Ci-1有点关系,即:

Ci= Ci-1 + △C。

因为Ci是Hession矩阵,所以△C也需要是一个方阵,于是另:

△C =av·vT,u是个列向量

即:

Ci= Ci-1 + av·vT

         但是在实践时发现Ci 和 Ci-1 + av·vT
过于近似了,于是把上面的式子修改为:

Ci= Ci-1 +ai-1v i-1·v i-1T+ b i-1ui-1·u i-1T            式2

         好了,现在就有下面两个式子:

把上面的第二个式子代入第一个式子就有:

Ci-1△gi + ai-1vi-1vi-1T△gi + b i-1u i-1·u i-1T△gi = △θ式3

现在看看上面的式子,其中已知的有:

△θi(当前的自变量 - 上一次的自变量)

△gi(当前的梯度 - 上一次的梯度)

Ci-1(上一次用到的Ci-1

未知的有:α、v、β、u

而因为,如果令式3的

Ci-1△gi = -b i-1u i-1·u i-1T△gi

ai-1vi-1vi-1T△gi = △θi

         的话,式3的等号就满足了。

于是定义:

ui-1 = Ci-1△gi

                   b i-1u i-1T△gi = -1

vi-1= △θi      

ai-1vi-1T△gi = 1

从而求出

ai-1= 1/(vi-1T△gi) ③

bi-1 = -1/(u i-1T△gi)    ④

将①②③④代入式2后就得到了DFP算法的迭代公式:


式4

于是还记得牛顿法的公式吗?即:

xk+1= xk - H-1▽f(xk)

现在使用DFP找到了一个可以近似代替H-1的矩阵Ci,那就用Ci代替H-1,从而得到拟牛顿的式子:

              xk+1 = xk -Ci▽f(xk)

不过实际使用中往往给Ci▽f(xk)加上一个很小的参数α,如α=0.01,从而形成带阻尼的拟牛顿,即:

              xk+1 = xk - αCi▽f(xk)

DFP算法的迭代公式的代码(来自小象学院的邹博老师)

A和B就是式4等号的右边的第二项和第三项

BFGS

数学家使用了DFP几年后发现可以这么考虑:

对于DFP算法,我们已经知道其由下面的式子


式子组1

求得最终结果


式5

那如果把式子组1的第一个式子两边同时乘以Ci-1后得到:

△gi = Hi△θi

                   PS:因为Ci =Hi-1

式子组1的第二个式子做同样的思考,让Hession矩阵等于这样的迭代的话就有:

Hi= Hi-1 +ai-1v i-1·v i-1T+ b i-1ui-1·u i-1T

         即,有式子组

那同理啊,我们可以得出下面的结论:


式6

对比下式5和式6,可以看出:

式5求得是Hession矩阵的逆矩阵

式6求得就是Hession矩阵

既然如此,那有没有办法直接求Hession的逆呢?有,答案就是BFGS算法。

PS:DFP算法的Ci虽然也是Hession的逆,但DFP算法会产生一些问题,于是就沿着DFP的方向研究出了BFGS算法,就好像IPv4和IPv6的关系一样。

下面的目标就是求式6的的逆。

这里我们利用Sherman-Morrisong公式,即:若A是n阶可逆矩阵,u、v为n维列向量,若 vTA-1u≠ -1,则

 式7

然后:

1,把式6等号右边的前两项看成A

2,式6的Hi-1△θi看成x,第三项分母看成是a的话(分母的结果是个数),第三项就是(x/a) * xT,再把x/a看成u,x看成v

3,这样式6就对应到式7了,此时进行使用一次Sherman-Morrisong公式

4,在把式6等号右边前两项的Hi-1看成A,△gi/(△giT△θi)看成u,△gi看成v后在使用一次Sherman-Morrisong公式,最终得到下面的结果:

       这就是BFGS算法的公式

代码(来自小象学院的邹博老师)

使用方法,如下面的Logistics回归:

代码中的C就是BFGS算法的公式中的Ci,如果C是单位阵那拟牛顿就退化为了梯度下降,反之就是拟牛顿,即,对于w = w + alpha * C.dot(g),如果C是单位阵,那C.dot(g)就是g本身,如果C不是单位阵,那就用hessian_r求Hession的逆矩阵就好。

最后

有个L-BFGS有兴趣可以自己搜搜,这个我还没研究。

时间: 2024-07-30 20:41:38

优化学习率 - 2 - 牛顿法、拟牛顿法的相关文章

优化学习率 - 1 - 回溯线性搜索和二次插值线性搜索

本章总结优化学习率的知识,而前置知识就是"线性回归.梯度下降算法",因此如果这一章你看的云里雾里甚至连学习率是什么都不知道的话就需要先吧前置知识搞定了. 其他说明 因为本总结的前置知识是"线性回归.梯度下降算法",所以之后的内容都是以"求目标函数f(x)的极小值"为目的. 不过不用担心求极大值的话该怎么办,因为直接给f(x)加个负号就将问题转换为了求极小值问题了. 在顺便一提,个人感觉正因为研究了这么多求极小值的东西,于是大伙为了省事,就凡是遇到

牛顿法|阻尼牛顿法|拟牛顿法|DFP算法|BFGS算法|L-BFGS算法

一直记不住这些算法的推导,所以打算详细点写到博客中以后不记得就翻阅自己的笔记. 泰勒展开式 最初的泰勒展开式,若  在包含  的某开区间(a,b)内具有直到n+1阶的导数,则当x∈(a,b)时,有: 令可得到如下式子: 泰勒展开我的理解就有两个式子. 参考文献:http://baike.baidu.com/link?url=E-D1MzRCjDi8qrlh2Cn64fwtz703bg-h_z2_mOXorti2_3aBKrOUY4-2gHuESowiK8aQSBFE8y0yJeGl4_yOAq

梯度下降中的学习率如何确定

1.固定学习率的梯度下降 y=x^4+2x ,初值取x=1.5,学习率使用0.01 #coding:utf-8 #求x^4+2x的导数 def g(x): return 4.0*x**3+2; #梯度下降法求f(x)的最小值 x=1.5 a=0.01 y1=x**4+2*x y2=1000 i=0 while y2-y1>10**-20: i=i+1 d=g(x) x-=d*a y2 = y1 y1=x**4+2*x print("%d \t %f \t%f\n" %(i,a,x

Leetcode 69. Sqrt(x)及其扩展(有/无精度、二分法、牛顿法)详解

Leetcode 69. Sqrt(x) Easy https://leetcode.com/problems/sqrtx/ Implement int sqrt(int x). Compute and return the square root of x, where x is guaranteed to be a non-negative integer. Since the return type is an integer, the decimal digits are truncat

猪猪机器学习笔记(六)梯度下降和拟牛顿

梯度下降和拟牛顿 作者:樱花猪   摘要:     本文为七月算法(julyedu.com)12月机器学习第六次次课在线笔记.本节课主要介绍了一种在机器学习需要经常使用到的计算方法——梯度下降法并在最后提出了另一种下降法的思路——拟牛顿法.梯度下降法是一个连接理论和计算机计算的桥梁,这种方法通过迭代来逐步完成对于目标函数的演化,将离散和连续有机的结合起来.实际上梯度下降法在许多有关偏微分方程算法中也有所用到,例如水平集.主动轮廓模型等.通过本次课程的学习,我们能够更加具体和感性的理解梯度下降,从

【ML-3】梯度下降(Gradient Descent)小结

目录 简述 梯度下降与梯度上升 梯度下降法算法详解 梯度下降法大家族(BGD,SGD,MBGD) 梯度下降法和其他无约束优化算法的比较 总结 ? ? 在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法(在[2]中已经讲解了).这里就对梯度下降法做一个完整的总结. 一.简述 在微积分里面,对多元函数的参数求?偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度. 比如函数f(x,y), 分别对x,

class-逻辑回归最大熵

我们知道,线性回归能够进行简单的分类,但是它有一个问题是分类的范围问题,只有加上一个逻辑函数,才能使得其概率值位于0到1之间,因此本次介绍逻辑回归问题.同时,最大熵模型也是对数线性模型,在介绍最大熵模型的同时需要了解拉格朗日对偶法对约束最优化问题的求解,在文章末有几个关于牛顿法的链接,可供拓展阅读. 内容: 1 logistic regression model1.1 logistic distribution1.2 binary logistic regression model1.3 模型参

目标跟踪算法综述

转自  https://www.zhihu.com/question/26493945 作者:YaqiLYU 第一部分:目标跟踪速览 先跟几个SOTA的tracker混个脸熟,大概了解一下目标跟踪这个方向都有些什么.一切要从2013年的那个数据库说起..如果你问别人近几年有什么比较niubility的跟踪算法,大部分人都会扔给你吴毅老师的论文,OTB50和OTB100(OTB50这里指OTB-2013,OTB100这里指OTB-2015,50和100分别代表视频数量,方便记忆): Wu Y, L

常见计算广告点击率预估算法总结

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:段石石 导语: 本文讨论了CTR预估模型,包括工业界使用比较广的比较经典模型和学术界最新的结合DeepLearning的一些工作. 前言 谈到CTR,都多多少少有些了解,尤其在互联网广告这块,简而言之,就是给某个网络服务使用者推送一个广告,该广告被点击的概率,这个问题难度简单到街边算命随口告诉你今天适不适合娶亲.适不适合搬迁一样,也可以复杂到拿到各种诸如龟壳.铜钱等等家伙事,在沐浴更衣.净手煴香后,最后一通预测,发现完全扯淡,被