引入

无约束最优化问题是机器学习中最普遍、最简单的优化问题
4.1 无约束最优化 - 图1
求最大值也可以在前面加上负号,变成上面求最小的形式。

梯度下降法

要求4.1 无约束最优化 - 图2一般有两种方法:

  1. 4.1 无约束最优化 - 图3,但是很多复杂的函数求导后没法解出x,所以这种方法实际上很少用。
  2. 基于迭代的方法,从某个点4.1 无约束最优化 - 图4开始逐渐找很多点4.1 无约束最优化 - 图5,使得这些点满足:4.1 无约束最优化 - 图6,即找到x使4.1 无约束最优化 - 图7逐渐变小。根据梯度的定义我们知道让x沿着梯度的负方向走可以使4.1 无约束最优化 - 图8下降最快,所以4.1 无约束最优化 - 图9,这里4.1 无约束最优化 - 图10是用单位向量来表示方向,4.1 无约束最优化 - 图11表示步长。有时候把常数看作一个整体直接写成:4.1 无约束最优化 - 图12。通项就是:

4.1 无约束最优化 - 图13
所以该方法称作梯度下降法。
**
那么这个步长4.1 无约束最优化 - 图14要如何取值呢?

  1. 从机器学习的工程角度

一般初始选择4.1 无约束最优化 - 图15之间,在迭代过程中逐渐衰减,比如4.1 无约束最优化 - 图16

  1. 数学角度来估计

4.1 无约束最优化 - 图17,这是一个关于4.1 无约束最优化 - 图18的函数。因为我们要求4.1 无约束最优化 - 图19的最小值,所以从 数学的角度就是要分析4.1 无约束最优化 - 图20取多少使得4.1 无约束最优化 - 图21最小,那就很自然地对4.1 无约束最优化 - 图22求导,即:
4.1 无约束最优化 - 图23
然后求解出4.1 无约束最优化 - 图24,但不一定都能解出来(要看f(x)具体的表达式)。

在机器学习中上式的目标函数4.1 无约束最优化 - 图25其实就是损失函数4.1 无约束最优化 - 图26。我们知道机器学习中会有很多样本4.1 无约束最优化 - 图27,则总体的损失函数为4.1 无约束最优化 - 图28,将所有样本损失函数相加后再求导,运算很慢。而且在工程中要将所有样本都装到内存里也是难以实现的。

随机梯度下降法

简单来说,就是每次只有一个样本来计算损失函数,求4.1 无约束最优化 - 图29梯度,更新4.1 无约束最优化 - 图30
例如从4.1 无约束最优化 - 图31,只用第一个样本来求4.1 无约束最优化 - 图32然后求梯度更新。
每一次只用一个样本来进行梯度计算虽然速度很快,但是单个样本的梯度方向可能与整体样本的梯度方向相差甚远,这样整体的损失函数可能会被少数的异常样本带偏。

所以上述两种方法各有优劣,从而引出下面的

Batch梯度下降法

即每次迭代更新不像随机梯度下降那样只依赖单个样本,也不像梯度下降那样要累加所有样本的损失函数,而是累加一个批量的样本。
例如取batch size=100,
4.1 无约束最优化 - 图33的梯度就使用4.1 无约束最优化 - 图34来计算4.1 无约束最优化 - 图35
4.1 无约束最优化 - 图36的梯度就使用4.1 无约束最优化 - 图37来计算4.1 无约束最优化 - 图38
直到将全部样本算完一遍就是一个epoch。

牛顿法

第一种角度解释

我们要求4.1 无约束最优化 - 图39,之前提过一种方法是求解4.1 无约束最优化 - 图40,那么我们令4.1 无约束最优化 - 图41
然后要求解4.1 无约束最优化 - 图42就是要找到函数与x轴的交点。那么我们可以用如下的迭代方法:

4.1 无约束最优化 - 图43
假设g(x)是如图所示的曲线,那么要求得与x轴的交点可以先做某个点4.1 无约束最优化 - 图44的切线,假设该切线与x轴相交的点为4.1 无约束最优化 - 图45,再做点4.1 无约束最优化 - 图46的切线,假设该切线与x轴的交点为4.1 无约束最优化 - 图47,….,就能不断迭代逼近g(x)=0的解。
从数学公式上来看,先求第一条切线方程:
image.png
令y=0求得4.1 无约束最优化 - 图49
image.png
再把4.1 无约束最优化 - 图51代回来就有:
4.1 无约束最优化 - 图52
这是二维的情况,如果是多维的情况,则4.1 无约束最优化 - 图53,f(x)一阶导就是求梯度,二阶导就是Hessian矩阵。所以转变为:
4.1 无约束最优化 - 图54

在机器学习中计算Hessian矩阵的逆矩阵很麻烦,于是就引申出很多种拟牛顿法,例如BFGS(用另一个矩阵来逼近Hessian矩阵的逆矩阵)

第二种角度解释

假设f(x)是一个复杂的曲线,如下图:

4.1 无约束最优化 - 图55
我们可以在一点4.1 无约束最优化 - 图56上用一个二次函数g(x)进行拟合,找到拟合函数g(x)的最低点4.1 无约束最优化 - 图57,然后在4.1 无约束最优化 - 图58上继续用二次函数拟合,不断迭代,向f(x)的最小值逼近。因为我们知道函数最小值处一般是凹的,周围局部是类似二次函数的,所以我们用二次函数来拟合。
从数学公式来看,先写出g(x)在4.1 无约束最优化 - 图59的泰勒展开(只用写到二阶导):
image.png
易得4.1 无约束最优化 - 图61,所以上面的泰勒展开就是拟合的二次函数。
那么下面要求g(x)的最小值,由初中知识对称轴为:4.1 无约束最优化 - 图62,观察g(x)可得:
4.1 无约束最优化 - 图63
4.1 无约束最优化 - 图64
因此最低点为:
4.1 无约束最优化 - 图65

注意:牛顿法一开始选中的点如果离最小值太远有时候无法收敛,选择接近最小值的点再拟合收敛效果更好。因此经常是使用梯度下降到局部最小值附近后再用牛顿法继续逼近。

牛顿法收敛速度

要计算收敛速度,就是比较一下4.1 无约束最优化 - 图664.1 无约束最优化 - 图67的距离和4.1 无约束最优化 - 图684.1 无约束最优化 - 图69的距离的区别,所以下面开始转化:
4.1 无约束最优化 - 图70
根据拉格朗日中值定理4.1 无约束最优化 - 图71,上式可以化为:
4.1 无约束最优化 - 图72
这里再用一次拉格朗日中值定理得到:
4.1 无约束最优化 - 图73
4.1 无约束最优化 - 图74,则上式变为:
4.1 无约束最优化 - 图75
因为4.1 无约束最优化 - 图76,所以
4.1 无约束最优化 - 图77
由于M的分子分母都是导数,导数都是有界的,所以M是有界的,用4.1 无约束最优化 - 图78表示其上界,则
4.1 无约束最优化 - 图79

4.1 无约束最优化 - 图80

通过上式我们可以得到两条结论:

  1. 牛顿法是二次收敛的,例如4.1 无约束最优化 - 图814.1 无约束最优化 - 图82的距离为0.1,则4.1 无约束最优化 - 图834.1 无约束最优化 - 图84的距离小于0.01乘以一个常数。
  2. 牛顿法要在局部最小值附近使用,例如如果4.1 无约束最优化 - 图854.1 无约束最优化 - 图86的距离大于1,即上式中4.1 无约束最优化 - 图87,那么距离的上界会越来越大无法收敛。