最小二乘法--梯度下降法 牛顿法 高斯牛顿法

推导过程
最小二乘法--梯度下降法 牛顿法 高斯牛顿法
最小二乘法
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。

梯度下降法
关于梯度下降算法的直观理解,我们以一个人下山为例。比如刚开始的初始位置是在红色的山顶位置,那么现在的问题是该如何达到蓝色的山底呢?按照梯度下降算法的思想,它将按如下操作达到最低点:

第一步,明确自己现在所处的位置

第二步,找到相对于该位置而言下降最快的方向

第三步, 沿着第二步找到的方向走一小步,到达一个新的位置,此时的位置肯定比原来低

第四部, 回到第一步

第五步,终止于最低点

按照以上5步,最终达到最低点,这就是梯度下降的完整流程。当然你可能会说,上图不是有不同的路径吗?是的,因为上图并不是标准的凸函数,往往不能找到最小值,只能找到局部极小值。所以你可以用不同的初始位置进行梯度下降,来寻找更小的极小值点,当然如果损失函数是凸函数就没必要了,开开心心的进行梯度下降吧!比如下面这种:
最小二乘法--梯度下降法 牛顿法 高斯牛顿法

问题是,如何用数学语言去描述以上5步呢?

梯度下降算法的理论推导

一元函数

一元函数的导数我相信大家都学过,其几何意义是某点切线的斜率,除此之外它还能表示函数在该点的变化率,导数越大,说明函数在该点的变化越大。
最小二乘法--梯度下降法 牛顿法 高斯牛顿法
最小二乘法--梯度下降法 牛顿法 高斯牛顿法

则导函数本身则代表着函数沿着x方向的变化率

二元函数

对于二元函数,z=f(x,y),它对x和y的偏导数分别表示如下:

函数在y方向不变的情况下,函数值沿x方向的变化率

函数在x方向不变的情况下,函数值沿y方向的变化率

有了以上的了解,我们分别知道了函数在单独在x和y方向上的变化率

现在有一个问题,我想知道函数在其他方向上的变化率怎么办?

比如下图中的u方向上:

最小二乘法--梯度下降法 牛顿法 高斯牛顿法
其实是可以做到的,我们都学过,在一平面中,任意一向量都可以用两个不共线的基向量表示,也就是说任意一方向上的变化,都可以分解到x和y两个方向上。

比如,我想求u方向上的变化率,根据导函数的定义

若:
最小二乘法--梯度下降法 牛顿法 高斯牛顿法

其中α是u方向与x正方向的夹角

极限存在,可用洛必达法则,分子分母同时对▲u求导

原式等于:
最小二乘法--梯度下降法 牛顿法 高斯牛顿法

令:
最小二乘法--梯度下降法 牛顿法 高斯牛顿法

这是一个自变量是α的函数,我们将其命名为方向导数,其表明随着α的不同,方向不同,函数的变化率不同。

至此,我们推出了,方向导数的概念,还记得我们的梯度下降算法的第二步是什么吗?

”找到相对于该位置而言下降最快的方向“

而我们的方向导数,本身代表的就是函数变化率与方向的关系,也就是说我们需要利用方向导数,找到使得函数变化率最大的方向

那么,问题来了,在哪一个方向上变化率最大呢?

寻找函数变化率最大的方向-梯度

我们可以这样改写,令:
最小二乘法--梯度下降法 牛顿法 高斯牛顿法

则:
最小二乘法--梯度下降法 牛顿法 高斯牛顿法

θ是两个向量的夹角

显然,当θ=0时,取得最大方向导数,也就说随着α的改变,当两个向量A和I是平行的时候,取得最大方向导数,而此时I的方向就是下式的方向:
最小二乘法--梯度下降法 牛顿法 高斯牛顿法
我们把上式称之为梯度,所以梯度方向是函数变化率最大的方向,更本质的说是函数增长最快的方向

所以,当我们需要最小化损失函数时,只需要使损失函数沿着负梯度前行,就能使损失函数最快下降。

牛顿法
并不是所有的方程都有求根公式,或者求根公式很复杂,导致求解困难。利用牛顿法,可以迭代求解。

原理是利用泰勒公式,在x0处展开,且展开到一阶,即f(x) = f(x0)+(x-x0)f’(x0)

求解方程f(x)=0,即f(x0)+(x-x0)f’(x0)=0,求解x = x1=x0-f(x0)/f’(x0),因为这是利用泰勒公式的一阶展开,f(x) = f(x0)+(x-x0)f’(x0)处并不是完全相等,而是近似相等,这里求得的x1并不能让f(x)=0,只能说f(x1)的值比f(x0)更接近f(x)=0,于是乎,迭代求解的想法就很自然了,可以进而推出x(n+1)=x(n)-f(x(n))/f’(x(n)),通过迭代,这个式子必然在f(x)=0的时候收敛。整个过程如下图:
最小二乘法--梯度下降法 牛顿法 高斯牛顿法

2、牛顿法用于最优化

在最优化的问题中,线性最优化至少可以使用单纯行法求解,但对于非线性优化问题,牛顿法提供了一种求解的办法。假设任务是优化一个目标函数f,求函数f的极大极小问题,可以转化为求解函数f的导数f’=0的问题,这样求可以把优化问题看成方程求解问题(f’=0)。剩下的问题就和第一部分提到的牛顿法求解很相似了。

这次为了求解f’=0的根,把f(x)的泰勒展开,展开到2阶形式:
最小二乘法--梯度下降法 牛顿法 高斯牛顿法

这个式子是成立的,当且仅当 Δx 无线趋近于0。此时上式等价与:

最小二乘法--梯度下降法 牛顿法 高斯牛顿法

求解:
最小二乘法--梯度下降法 牛顿法 高斯牛顿法

得出迭代公式:

最小二乘法--梯度下降法 牛顿法 高斯牛顿法

一般认为牛顿法可以利用到曲线本身的信息,比梯度下降法更容易收敛(迭代更少次数),如下图是一个最小化一个目标方程的例子,红色曲线是利用牛顿法迭代求解,绿色曲线是利用梯度下降法求解。

最小二乘法--梯度下降法 牛顿法 高斯牛顿法

在上面讨论的是2维情况,高维情况的牛顿迭代公式是:

最小二乘法--梯度下降法 牛顿法 高斯牛顿法

其中H是hessian矩阵,定义为:

最小二乘法--梯度下降法 牛顿法 高斯牛顿法

高维情况依然可以用牛顿迭代求解,但是问题是Hessian矩阵引入的复杂性,使得牛顿迭代求解的难度大大增加,但是已经有了解决这个问题的办法就是Quasi-Newton methond,不再直接计算hessian矩阵,而是每一步的时候使用梯度向量更新hessian矩阵的近似。

高斯牛顿法
最小二乘法--梯度下降法 牛顿法 高斯牛顿法最小二乘法--梯度下降法 牛顿法 高斯牛顿法