泰勒展开式推导梯度下降
关于梯度下降的公式可能大家耳熟能详,沿着梯度的反方向一步一步的移动,总能到达我们想要的最优点;可是为什么可以这样做呢?开始我的答案无非就是“梯度的反方向就是损失值下降最快的方向”,最近看了李宏毅老师的梯度下降算法发现别有洞天,接下来我将以通俗的语言来详细解释梯度下降算法公式的数学推导过程。
推导梯度下降之前开始引入一个Feature scaling(特征缩放):
假设我们要优化的目标函数为:,当
的变化以1,2,.....这样比较小幅度的变化,而
以100,200,.....比较大幅度的变化,因此
与
对目标函数的影响程度差别很大;于是在优化的过程中,这就要求
有较大的变化,
较小的变化。正如上图左侧所示的椭圆等高线图:梯度下降的方向曲曲折折,但也可以到达最优点但所花费的时间比较久;按照个人的理解如下图所示,在一点移动的方向应是两个维度移动方向的总方向(黑色的箭头方向),但我们通常希望的方向应是红色的方向,因为这个方向损失值下降的最快。而在上述右侧的圆形等高线图中,不会存在这样的情况,两个维度移动的跨度是一致的,故两个维度移动方向的总方向正是我们希望看到的(用下述同样的方法)。
这么做完Feature scaling之后,再做参数的梯度下降是比较有效率的,那么要如何做Feature scaling呢?其实方法是很多的,下面就是常用的一种,对数据集的每一维度做标准化,使得每一维度数据的均值都是0,方差都是1。
在推导梯度下降算法之前,提出一个问题?在做梯度下降算法时,每一次迭代得到参数都比上一次迭代得到参数最优嘛?答案显然不是的,当我们的学习率设定的比较大,这就造成一步跨的幅度很大,从而越过最优点,使得损失值不减反而增。
形式推导:
假设我们的损失函数有两个参数,它们分别是,损失函数面用上图一圈一圈的等高线表示;初始值
,在
附近画一个圆,圆中找到一个最优的方向并移动到圆边,这样一步一步下去,最终可以移动到最优点;现在问题是如何咋找到这个最优的方向呢?
下面开始引入泰勒展开式:
任何函数都可以展开上述形式,我们知道当x接近于的时候,
这一项是比较小的,从2次项开始后面都可以省略。
在红色圈圈中,如果他足够的小,根据泰勒展开式损失函数就可以写成上述那样,进一步写成,这里可以把
与
看成两个向量,它们的点乘当垂直的时候为0,当它们反方向的时候最小,负的最多。
此刻中心点(a,b),沿着(u,v)的方向移动,总可以到达圆圈的边缘;这时便是我们当前的最优值。从上面的形式来看,是不是有点熟悉,没错,就是我们梯度下降算法中参数的更新公式。
我们知道上述公式成立的条件,它要求我们的某点的圆的范围尽量小(红色圆圈半径趋向于0),即()与(
)越接近越准确,于是我们的学习率
不能太大才能保证这点。当然我们可以考虑2项式,这样就能稍微降低些要求关于我们(
)与(
)的接近程度,这种方法比如牛顿法就是其中之一,但是不常用。