20220114
y=θx
θ取一个初始值
x,y是样本对
θ = θ + -梯度
θ不断改变知道左右两边相差小于误差
梯度下降从来都是拟合负梯度,GBDT平方损失只是恰好等于残差
https://mp.weixin.qq.com/s/F4YHEpfa280cpR4tgL0Maw
AI面试题之GBDT梯度提升树
梯度下降法简单来说就是一种寻找目标函数最小化的方法。
张戎:深度学习中的优化算法
在深度学习中,经常有人会拿下面这幅图来比较各种优化算法的性质,包括传统的 SGD,Momentum SGD,AdaGrad,RMSProp 和 Adam 等。不过光看图可能无法理解其中的精妙之处,本文将会从数学的基础知识出发,初步介绍深度学习中的一些优化算法,最后进行一些简单的案例分析。
一元函数的导数与 Taylor 级数
在微积分中,函数 在点 上的导数定义为: 它在几何上指的就是函数 在 上的切线方向。
通常来说,为了计算某个函数 的最大值或者最小值,通常都会计算它的导数 ,然后求解方程 就可以得到函数的临界点,进一步判断这些临界点是否是最大值或者最小值。但是临界点并不一定是全局最大值或者全局最小值,甚至不是局部的最大值或者局部最小值。
例如:函数 ,它的导数是 ,因此 是它的临界点。但 则不是这个函数的局部最大值或者局部最小值点,因为 且 。
从 Taylor 级数的角度来看, 在 附近的 Taylor 级数是
对于临界点 而言,它满足条件 。当 时,可以得到 是 的局部最小值;当 时,可以得到 是 的局部最大值。而对于上面的例子 而言,临界点 的二阶导数则是 ,因此使用上面的方法则无法判断临界点 是否是局部极值。
多元函数的梯度和 Taylor 级数
对于多元函数 而言,同样可以计算它们的“导数”,也就是偏导数和梯度,i.e. 它的梯度可以定义为:
而多元函数 在点 上的 Taylor 级数是:
其中 表示 Hessian 矩阵。如果 是临界点,并且 Hessian 矩阵是正定矩阵的时候, 在 处达到局部极小值。
梯度下降法
从数学上的角度来看,梯度的方向是函数增长速度最快的方向,那么梯度的反方向就是函数减少最快的方向。那么,如果想计算一个函数的最小值,就可以使用梯度下降法的思想来做。假设希望求解目标函数 的最小值,可以从一个初始点 开始,基于学习率 构建一个迭代过程:当 时,
其中 ,一旦达到收敛条件的话,迭代就结束。从梯度下降法的迭代公式来看,下一个点的选择与当前点的位置和它的梯度相关。反之,如果要计算函数 的最大值,沿着梯度的反方向前进即可,也就是说:
其中 。整体来看,无论是计算函数的最大值或者最小值,都需要构建一个迭代关系 ,那就是:
也就是说对于所有的 ,都满足迭代关系 。所以,在以上的两个方法中,我们可以写出函数 的表达式为:
在本文中,假设 是每个样本的损失函数, 表示一个关于输入 和参数 的函数,并且 表示 所对应的目标值。
案例1:
针对这个函数 而言,从数学上我们可以轻易地得到最小值点就是 。不过在这里我们可以验证随机梯度下降法的效果。首先计算函数 的梯度为:
其次,给定一个随机的初始点 ,通过梯度可以得到迭代公式为:
其中 表示学习率, 表示迭代次数。因此,可以计算出具体的公式为:
于是可以得到:
意思就是说,使用随机梯度下降法我们可以得到函数 的最小值是 。
案例2:
不过,随机梯度下降法也有着自身的局限性。针对很多高维非凸函数而言,鞍点的数量其实远远大于局部极小值(极大值)的数量。因此,如何快速的逃离鞍点就是深度学习中大家所研究的问题之一。而比较简单的鞍点就是马鞍面函数 中的 点。而函数 在 上并没有最小值,因为 。 同时,函数 的偏导数是:
而 在点 上则满足以下几个性质:
也就是说, 这一点的 Hessian 矩阵并不是正定矩阵。
随机梯度下降法:如果初始点是 ,那么随机梯度下降法(SGD)就可以写成:对于所有的 ,有
其中 是学习率。
使用动量的随机梯度下降法:如果初始点是 ,初始速度是 ,学习率是 ,动量参数是 ,那么使用动量的随机梯度下降法就可以写成: ,
AdaGrad 算法:如果初始点是 ,学习率是 , 是小常数,那么 AdaGrad 算法就可以写成: ,
其中 是学习率, 是一个小常数。
Case 1:
当 时,如果使用随机梯度下降法,就可以得到 ,
因此, 。 通过随机梯度下降法(SGD)在初始值为 的前提下并不能计算出函数 的最小值,而是会停止在 鞍点这个地方,最终无法逃离鞍点。
同理,如果使用基于动量的 SGD 算法,就要看初始速度的设置了,如果初始的速度为 ,那么最终都会收敛到 这个点上。不过,如果 ,那么就可以在一定次数的迭代之后逃离 。
根据同样的分析思路,在本文中所写的 AdaGrad,RMSProp,Adam 算法中,如果初始点是 并且算法参数都是默认的话,使用这些方法同样无法逃离鞍点 ,也就是说最终都会收敛到 上。
Case 2:
在这种情况下,可以考虑在 的基础上给纵坐标加上一个微小的扰动。不妨假设初始点为 。下面计算各个算法在这个初始值下的收敛效果。在实际的应用中,需要迭代的次数越少越好。于是,通过计算 的值,就可以进一步判断哪个算法(SGD,Momentum SGD,AdaGrad,RMSProp,Adam)更加容易逃离鞍点。
随机梯度下降法:通常情况下, 可以设置为 。从随机梯度下降法的公式来看,就可以得到如下迭代公式:
其实, ,i.e. 使用梯度下降法同样可以找到函数 的最小值。但是,如果 ,则 需要满足条件:
换言之,需要迭代 次左右才能够使得 。
AdaGrad 算法:通常来说,在 AdaGrad 算法中,算法的参数默认值是 和 。由于初始值 ,所以计算可以得到:
最后通过写程序就可以证明,在 AdaGrad 的默认参数下,只需要 次左右的迭代就可以实现 。
RMSProp 算法:
在这种情况下,为了简单起见,可以令衰减速率 ,那么同样可以写出迭代公式为: ,有
在 RMSProp 里面,一般来说小常数 , 。通过直接计算可以知道,在这种情况和参数设置下,在迭代了 轮左右的时候,就会出现 的情况。
整体来说,在初始值为 的情况下,无论是 SGD,Momentum SGD,AdaGrad 算法,还是 RMSProp 算法,都会逃离鞍点 。只不过 AdaGrad 和 RMSProp 算法的逃离速度比 SGD 快了许多。