这里主要讨论梯度下降法和牛顿法的原理
1.梯度下降法
形式:,其中
为损失函数,
为模型参数
下面将推导这一形式的由来.
首先,需要用到多元函数的一级泰勒展开式:
如果忽略高阶无穷小,即是
的
领域,那么等号就会变为近似相等,即:
要使得损失函数下降更快,只需要等式右边得到最小值。
由可知,当
与
的夹角余弦
时等式右边可取得最小值。
由于对应的方向单位向量可表示为:
当与
的方向相反(夹角余弦
)时有:
,其中
为正数。由于分母为标量,因此可以合并到
中,化简为:
需要注意的是,和
要离的充分近,也就是在它的
邻域里面,才能忽略掉泰勒展开里面的一次以上的项,否则就不能忽略它了,它就不是高阶无穷小了,约等于的条件就不成立了,所以
步长不能够太大,由此我们就得到了梯度下降法的公式。
2.牛顿法
形式: , 其中为Hessian矩阵
下面将推导这一形式的由来。
首先,需要用到多元函数的二级泰勒展开式:
如果忽略高阶无穷小,即是
的
邻域,那么等号就会变为近似相等,即:
如果是二次函数的话,我们找它梯度等于0的点是非常好找的,基于约等于的式子,两边同时求导。
因为

且H是对称矩阵,所以:
下面可以求解一次方程,如果hessian 矩阵可逆,就可以两边乘上 H 的逆矩阵,令,则
两边同时乘H 的逆矩阵,有
注意一下H和都是
点处取得的,稍作调整为:
有同学肯定会说,那我们去求解方程组,那不是一次就可以求得梯度等于 0 的点 了嘛, 但是因为我们忽略了后面的高阶无穷小,所以我们只是近似的找到了梯度等于 0 的点,但 是它并没有真正找到,所以我们下次要继续去用这个公式去迭代。
迭代优化时会加上步长:
如果我们的是二次函数的话,牛顿法一步就可以收敛,前提是步长不做设置,等于 1 的 时候就可以了,这是因为如果原函数
是二次函数的话,泰勒展开里面就不是约等于,而是直接等于。
梯度下降法和牛顿法的关系

梯度下降法只用到了一阶导数的信息,牛顿法既用到了一阶导数的信息,也用到了二阶导数的信息。
梯度下降法是用线性函数来代替目标函数,牛顿法是用二次函数来代替目标函数, 所以说牛顿法的收敛速度是更快的。
但是牛顿法也有它的局限,hessian 矩阵不一定可逆,第二个即使存在,我们来解一个线性 方程组,当 hessian 矩阵规模很大,解线性方程组是非常耗时的,因此出现了一种改进的算 法叫拟牛顿法
网友评论