梯度下降法(Gradient descent)

梯度下降法(Gradient descent)或最速下降法(Steepest descent)是求解无约束最优化问题的一种最常见的方法,有实现简单的有点。梯度下降法是迭代算法,每一步需要求解目标函数的梯度向量。

假设无约束优化 - 图1无约束优化 - 图2是具有一阶连续偏导数的函数,要求解的无约束最优化问题是:

无约束优化 - 图3

梯度下降法是一种迭代算法,选取适当的初值无约束优化 - 图4,不断迭代,更新无约束优化 - 图5的值,进行目标函数的极小化,直到收敛。由于负梯度方向是使函数值下降最快的方向,在迭代的每一步,以负梯度方向更新无约束优化 - 图6的值,从而达到减少函数值的目的。

由于无约束优化 - 图7具有一阶连续偏导数,若第无约束优化 - 图8次迭代值为无约束优化 - 图9,则可将无约束优化 - 图10无约束优化 - 图11附近进行一阶泰勒展开

无约束优化 - 图12

这里,无约束优化 - 图13无约束优化 - 图14无约束优化 - 图15的梯度,求出第无约束优化 - 图16次迭代值无约束优化 - 图17

无约束优化 - 图18

其中,无约束优化 - 图19是搜索方向,取负梯度方向无约束优化 - 图20无约束优化 - 图21是步长,由一维搜索确定,即无约束优化 - 图22使得

无约束优化 - 图23

具体算法

输入:目标函数无约束优化 - 图24,梯度函数无约束优化 - 图25,计算精度无约束优化 - 图26;输出:无约束优化 - 图27的极小点无约束优化 - 图28

  1. 取初始值无约束优化 - 图29,置无约束优化 - 图30
  2. 计算无约束优化 - 图31
  3. 计算梯度无约束优化 - 图32
    1. 无约束优化 - 图33时,停止迭代,令无约束优化 - 图34
    2. 否则,令无约束优化 - 图35,求无约束优化 - 图36,使无约束优化 - 图37
  4. 无约束优化 - 图38,计算无约束优化 - 图39
    1. 无约束优化 - 图40无约束优化 - 图41时,停止迭代,令无约束优化 - 图42
  5. 否则,置无约束优化 - 图43,转3.

当目标函数是凸函数时,梯度下降法的解是全局最优解。一般情况下,其解不保证是全局最优解,梯度下降法的收敛速度也未必是很快的。

牛顿法(Newton’s method)

优化问题的最优解一般出现在极值点上,也就无约束优化 - 图44的解,所以,牛顿法求解优化问题即求无约束优化 - 图45的零点。

首先,随机选择初始值无约束优化 - 图46,对于函数无约束优化 - 图47,计算相应的无约束优化 - 图48和切线斜率无约束优化 - 图49(这里无约束优化 - 图50即表示无约束优化 - 图51的导数)。然后我们计算穿过点无约束优化 - 图52并且斜率为无约束优化 - 图53的直线和无约束优化 - 图54轴的交点的无约束优化 - 图55坐标,也就是

无约束优化 - 图56

我们将新求得点的无约束优化 - 图57坐标命名为无约束优化 - 图58,通常无约束优化 - 图59会比无约束优化 - 图60更接近方程无约束优化 - 图61的解,无约束优化 - 图62处其实并不是完全相等的,而是近似相等,因为只做了一阶泰勒展开,当进行了无限阶泰勒展开全加起来才是等式。由于相对而言一阶变换量是最大的,所以我们先只考虑一阶展开)。因此我们可以利用无约束优化 - 图63开始下一轮迭代。迭代公式可简化为下式:
无约束优化 - 图64
无约束优化 - 图65
无约束优化 - 图66
无约束优化 - 图67
无约束优化 - 图68

通过迭代,这个式子必在无约束优化 - 图69的时候收敛,具体过程如下图。

NewtonIteration_Ani.gif

在优化问题中,其任务就是优化一个目标函数无约束优化 - 图71,求这个函数无约束优化 - 图72的极大极小问题,可以转化为求解函数的导数无约束优化 - 图73的问题了。这就和上面说的牛顿求解很相似了。

为了求导数无约束优化 - 图74的根,我们要把无约束优化 - 图75在探索点无约束优化 - 图76处泰勒展开,展开到二阶泰勒近似,即要考虑导数的导数:

无约束优化 - 图77

我们考虑二阶导,即导数的导数:

无约束优化 - 图78

求得迭代公式:

无约束优化 - 图79

上面解释了牛顿法的优化,都是以一维举例的(就一个变量无约束优化 - 图80)。从一维问题的迭代推广至多维问题只需将导数替换为梯度无约束优化 - 图81,并将二阶导数的倒数替换为Hessian矩阵的逆矩阵无约束优化 - 图82,即:

无约束优化 - 图83

通常,使用牛顿法时会加入一个步长变量无约束优化 - 图84作微调,即:

无约束优化 - 图85

这个方法即被称为无约束牛顿法,通常用于第一步之后的迭代。

统计学习方法(李航)牛顿法详解

考虑无约束最优化问题:无约束优化 - 图86

假设无约束优化 - 图87具有二阶连续偏导数,若第无约束优化 - 图88次迭代值为无约束优化 - 图89,则可将无约束优化 - 图90无约束优化 - 图91附近进行二阶泰勒展开

无约束优化 - 图92

这里,无约束优化 - 图93无约束优化 - 图94的梯度向量在点无约束优化 - 图95的值,无约束优化 - 图96无约束优化 - 图97的Hessian矩阵

无约束优化 - 图98

函数无约束优化 - 图99有极值的必要条件是在极值点处一阶导数为0,即梯度向量为0特别是当无约束优化 - 图100正定矩阵时,函数无约束优化 - 图101的极值为极小值。牛顿法利用极小值的必要条件无约束优化 - 图102,每次迭代从点无约束优化 - 图103开始,求目标函数的极小点,作为第无约束优化 - 图104次迭代值无约束优化 - 图105,具体地,假设无约束优化 - 图106满足无约束优化 - 图107结合泰勒展开则有

无约束优化 - 图108

其中无约束优化 - 图109,这样

无约束优化 - 图110

因此,

无约束优化 - 图111

将上式作为迭代公式的算法就是牛顿法。

具体算法

输入:目标函数无约束优化 - 图112,梯度无约束优化 - 图113,海塞矩阵无约束优化 - 图114,精度要求无约束优化 - 图115

输出:无约束优化 - 图116的极小点无约束优化 - 图117

  1. 取初始值无约束优化 - 图118,置无约束优化 - 图119
  2. 计算无约束优化 - 图120
  3. 无约束优化 - 图121,则停止计算,得近似解无约束优化 - 图122
  4. 计算无约束优化 - 图123,并求无约束优化 - 图124无约束优化 - 图125
  5. 无约束优化 - 图126
  6. 无约束优化 - 图127,转2.

应用举例

我们刷leetcode时有这样一道题,求解平方根(只保留整数部分)。牛顿迭代法是已知的实现求方根最快的方法之一,只需要迭代几次后就能得到相当精确的结果。设无约束优化 - 图128无约束优化 - 图129次方根为无约束优化 - 图130,则推导公式如下:

无约束优化 - 图131 无约束优化 - 图132

代入牛顿法公式

无约束优化 - 图133
无约束优化 - 图134

代码如下(求平方根,即无约束优化 - 图135无约束优化 - 图136):

  1. class Solution:
  2. def mySqrt(self, a):
  3. x = a
  4. while x > a / x:
  5. x = (x + a / x) // 2
  6. return int(r)

拟牛顿法(quasi-Newton method)

在牛顿法的迭代中,需要计算海赛矩阵的逆矩阵,这一计算比较复杂,考虑用一个无约束优化 - 图137阶矩阵无约束优化 - 图138来近似替代无约束优化 - 图139。这就是拟牛顿法的基本想法。先看牛顿法迭代中海赛矩阵无约束优化 - 图140满足的条件。首先,无约束优化 - 图141满足以下关系。在无约束优化 - 图142中取无约束优化 - 图143,得

无约束优化 - 图144

无约束优化 - 图145无约束优化 - 图146,则

无约束优化 - 图147无约束优化 - 图148

上式即称为拟牛顿条件。如果无约束优化 - 图149是正定的(无约束优化 - 图150也是正定的),那么可以保证牛顿法搜索方向无约束优化 - 图151是下降方向。这是因为搜索方向是无约束优化 - 图152,结合牛顿法迭代式无约束优化 - 图153

无约束优化 - 图154

所以无约束优化 - 图155无约束优化 - 图156的泰勒展开式可以近似写成

无约束优化 - 图157

无约束优化 - 图158正定,故有无约束优化 - 图159无约束优化 - 图160为一个充分小的正数时,总有无约束优化 - 图161,也就是说无约束优化 - 图162是下降方向。

拟牛顿法将无约束优化 - 图163作为无约束优化 - 图164的近似,要求矩阵无约束优化 - 图165满足同样的条件。首先,每次迭代矩阵无约束优化 - 图166是正定的。同时,无约束优化 - 图167满足下面的拟牛顿条件:

无约束优化 - 图168

按照拟牛顿条件选择无约束优化 - 图169作为无约束优化 - 图170的近似或选择无约束优化 - 图171作为无约束优化 - 图172的近似的算法称为拟牛顿法。按照拟牛顿条件,在每次迭代中可以选择更新矩阵无约束优化 - 图173

无约束优化 - 图174

DFP

DFP算法选择无约束优化 - 图175的方法是,假设每一步迭代中矩阵无约束优化 - 图176是由无约束优化 - 图177加上两个附加项构成的,即

无约束优化 - 图178

其中无约束优化 - 图179无约束优化 - 图180是待定矩阵。这时,

无约束优化 - 图181

为使无约束优化 - 图182满足拟牛顿条件,可使无约束优化 - 图183无约束优化 - 图184满足:

无约束优化 - 图185 无约束优化 - 图186

事实上,不难找出这样的无约束优化 - 图187无约束优化 - 图188,例如取

无约束优化 - 图189 无约束优化 - 图190

这样就可得到矩阵无约束优化 - 图191的迭代公式:

无约束优化 - 图192

称为DFP算法。可以证明,如果初始矩阵无约束优化 - 图193是正定的,则迭代过程中的每个矩阵无约束优化 - 图194都是正定的。

输入:目标函数无约束优化 - 图195,梯度无约束优化 - 图196,精度要求无约束优化 - 图197;输出:无约束优化 - 图198的极小点无约束优化 - 图199

  1. 选定初始点无约束优化 - 图200,取无约束优化 - 图201为正定对称矩阵,置无约束优化 - 图202
  2. 计算无约束优化 - 图203无约束优化 - 图204,则停止计算,得近似解无约束优化 - 图205
  3. 无约束优化 - 图206
  4. 一维搜索:求无约束优化 - 图207使得无约束优化 - 图208
  5. 无约束优化 - 图209
  6. 计算无约束优化 - 图210
    1. 无约束优化 - 图211,则停止计算,得近似解无约束优化 - 图212
    2. 否则,按无约束优化 - 图213计算出无约束优化 - 图214
  7. 无约束优化 - 图215,转3.

BFGS

BFGS算法是最流行的拟牛顿算法。可以考虑用无约束优化 - 图216逼近海赛矩阵的逆矩阵无约束优化 - 图217,也可以考虑用无约束优化 - 图218逼近海赛矩阵无约束优化 - 图219。这时,相应的拟牛顿条件是

无约束优化 - 图220

可以用同样的方法得到另一迭代公式。首先令

无约束优化 - 图221
无约束优化 - 图222

考虑使无约束优化 - 图223无约束优化 - 图224满足:

无约束优化 - 图225 无约束优化 - 图226

找出适合条件的无约束优化 - 图227无约束优化 - 图228,得到BFGS算法矩阵无约束优化 - 图229的迭代公式:

无约束优化 - 图230

可以证明,如果初始矩阵无约束优化 - 图231是正定的,则迭代过程中的每个矩阵无约束优化 - 图232都是正定的。

输入:目标函数无约束优化 - 图233,梯度无约束优化 - 图234,精度要求无约束优化 - 图235;输出:无约束优化 - 图236的极小点无约束优化 - 图237

  1. 选定初始点无约束优化 - 图238,取无约束优化 - 图239为正定对称矩阵,置无约束优化 - 图240
  2. 计算无约束优化 - 图241无约束优化 - 图242,则停止计算,得近似解无约束优化 - 图243
  3. 无约束优化 - 图244求出无约束优化 - 图245
  4. 一维搜索:求无约束优化 - 图246使得无约束优化 - 图247
  5. 无约束优化 - 图248
  6. 计算无约束优化 - 图249
    1. 无约束优化 - 图250,则停止计算,得近似解无约束优化 - 图251
    2. 否则,按无约束优化 - 图252计算出无约束优化 - 图253
  7. 无约束优化 - 图254,转3.

坐标下降法(Coordinate descent)

坐标下降法是一种非梯度优化方法,它在每步迭代中沿一个坐标方向进行搜索,通过循环使用不用的坐标方向来达到目标函数的局部极小值。

假设我们求解无约束优化 - 图255的极小值,其中无约束优化 - 图256是一个无约束优化 - 图257维向量。从初始点无约束优化 - 图258开始,坐标下降法通过迭代地构造序列无约束优化 - 图259来解决问题,无约束优化 - 图260的第无约束优化 - 图261个分量无约束优化 - 图262构造为:

无约束优化 - 图263

通过执行此操作,显然有

无约束优化 - 图264

与梯度下降法类似,通过迭代执行该过程,序列无约束优化 - 图265能收敛到所期望的局部极小点或驻点。坐标下降法不需计算目标函数的梯度,在每次迭代中仅需求解一维搜索问题,对于某些复杂问题计算较为简便。但若目标函数不光滑,则坐标下降法有可能陷入非驻点。

最小二乘法(Least squares)

最小二乘法是无约束的数学优化方法,通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小,即

无约束优化 - 图266

最小值可以通过对上式参数分别求偏导数,然后使它们等于零得到。

应用举例

某次实验得到了四个数据点无约束优化 - 图267无约束优化 - 图268。我们希望找出一条和这四个点最匹配的直线无约束优化 - 图269,即找出在“最佳情况”下能够大致符合如下超定线性方程组的无约束优化 - 图270无约束优化 - 图271

无约束优化 - 图272 无约束优化 - 图273 无约束优化 - 图274 无约束优化 - 图275

最小二乘法采用的手段是尽量使得等号两边的方差最小,也就是找出这个函数的最小值:

无约束优化 - 图276

最小值可以通过对无约束优化 - 图277分别求无约束优化 - 图278无约束优化 - 图279的偏导数,然后使它们等于零得到。

无约束优化 - 图280 无约束优化 - 图281

如此就得到了一个只有两个未知数的方程组,易得无约束优化 - 图282无约束优化 - 图283,所以无约束优化 - 图284最佳

置信域方法(Trust-region methods)

置信域方法(Trust-region methods)又称信赖域方法,它是一种最优化方法,能够保证最优化方法总体收敛。

思想框架

无约束优化 - 图285无约束优化 - 图286是定义在无约束优化 - 图287上的二阶连续可微函数。定义当前点邻域无约束优化 - 图288。这里无约束优化 - 图289称为置信域半径。假定在这个邻域中,二次模型是目标函数无约束优化 - 图290的一个合适的近似,则在这个邻域(称为置信域)中极小化二次模型,得到近似极小点无约束优化 - 图291,并取,其中无约束优化 - 图292

置信域方法的模型子问题是

无约束优化 - 图293

其中,无约束优化 - 图294无约束优化 - 图295无约束优化 - 图296是一个对称矩阵,它是Hessian矩阵无约束优化 - 图297或其近似,无约束优化 - 图298为置信域半径,无约束优化 - 图299为某一范数,通常我们采用L2范数。选择无约束优化 - 图300的方法:根据模型函数无约束优化 - 图301对目标函数无约束优化 - 图302的拟合程度来调整置信域半径无约束优化 - 图303。对于置信域方法的模型子问题的解无约束优化 - 图304,设目标函数的下降量

无约束优化 - 图305

为实际下降量,设模型函数的下降量

无约束优化 - 图306

为预测下降量。定义比值

无约束优化 - 图307

它用来衡量模型函数无约束优化 - 图308与目标函数无约束优化 - 图309的一致性程度。

具体算法

  1. 给出初始点无约束优化 - 图310,置信域半径的上界无约束优化 - 图311无约束优化 - 图312无约束优化 - 图313无约束优化 - 图314无约束优化 - 图315无约束优化 - 图316
  2. 如果无约束优化 - 图317,停止
  3. (近似地)求解置信域方法的模型子问题,得到无约束优化 - 图318
  4. 计算无约束优化 - 图319无约束优化 - 图320。令
    1. 无约束优化 - 图321
  5. 校正置信域半径,令
    1. 无约束优化 - 图322
  6. 产生无约束优化 - 图323,校正无约束优化 - 图324,令无约束优化 - 图325,转2.