梯度下降和牛顿法

这里主要讨论梯度下降法和牛顿法的原理

1.梯度下降法

形式:,其中为损失函数,为模型参数


下面将推导这一形式的由来.

首先,需要用到多元函数的一级泰勒展开式:

如果忽略高阶无穷小,即是的领域,那么等号就会变为近似相等,即:

要使得损失函数下降更快,只需要等式右边得到最小值。

由可知,当与的夹角余弦时等式右边可取得最小值。

由于对应的方向单位向量可表示为:

当与的方向相反(夹角余弦)时有:,其中为正数。由于分母为标量,因此可以合并到中,化简为:


需要注意的是,和要离的充分近,也就是在它的邻域里面,才能忽略掉泰勒展开里面的一次以上的项,否则就不能忽略它了,它就不是高阶无穷小了,约等于的条件就不成立了,所以步长不能够太大,由此我们就得到了梯度下降法的公式。


2.牛顿法

    形式: , 其中为Hessian矩阵

下面将推导这一形式的由来。

首先,需要用到多元函数的二级泰勒展开式:

如果忽略高阶无穷小,即是的邻域,那么等号就会变为近似相等,即:

如果是二次函数的话,我们找它梯度等于0的点是非常好找的,基于约等于的式子,两边同时求导。

因为

且H是对称矩阵,所以:

下面可以求解一次方程,如果hessian 矩阵可逆,就可以两边乘上 H 的逆矩阵,令,则

两边同时乘H 的逆矩阵,有

注意一下H和都是点处取得的,稍作调整为:

有同学肯定会说,那我们去求解方程组,那不是一次就可以求得梯度等于 0 的点 了嘛, 但是因为我们忽略了后面的高阶无穷小,所以我们只是近似的找到了梯度等于 0 的点,但 是它并没有真正找到,所以我们下次要继续去用这个公式去迭代。

迭代优化时会加上步长:

如果我们的是二次函数的话,牛顿法一步就可以收敛,前提是步长不做设置,等于 1 的 时候就可以了,这是因为如果原函数是二次函数的话,泰勒展开里面就不是约等于,而是直接等于。


梯度下降法和牛顿法的关系

梯度下降法和牛顿法的关系

梯度下降法只用到了一阶导数的信息,牛顿法既用到了一阶导数的信息,也用到了二阶导数的信息。

梯度下降法是用线性函数来代替目标函数,牛顿法是用二次函数来代替目标函数, 所以说牛顿法的收敛速度是更快的。

但是牛顿法也有它的局限,hessian 矩阵不一定可逆,第二个即使存在,我们来解一个线性 方程组,当 hessian 矩阵规模很大,解线性方程组是非常耗时的,因此出现了一种改进的算 法叫拟牛顿法

你可能感兴趣的:(梯度下降和牛顿法)