梯度下降?梯度上升?梯度提升?

最近被这三个词搞蒙了。原本没觉得它们有多难区分,但真要向一个人解释清类似“为何要有梯度提升”这类问题,似乎还是很吃力,从而发现自己其实并没有完全理解其中的含义。

 

也许根本就不存在什么“梯度上升”,只有“梯度提升”罢,但我觉得,至少在中文环境里,大家越发的喜欢无意识地将这两个词分别开来,从而这两个词逐渐显示出不同的含义。下面我就简单介绍一下他们之间的差别吧。

 

首先,梯度下降

梯度下降应该是机器学习入门第一课水平的知识,我这里当然不是来做无谓扫盲的,毕竟这样的帖子太多了。我只是想说,为何会存在“梯度下降”。对于高中时代的我们,求一个一元二次函数极值的好方法,就是求导,然后令导数为0。但在机器学习损失函数空间中,由于特征(或言之变量)数目众多,导致函数曲面非常复杂,以致于几乎不可能有这样一个点,在这个点上各个方向导数都是0,哪怕从计算的角度来说也是这样,我们太难找到这样一个点了。那么,我们可以忍受我们不能一下子做对,但我们可以一步步走向正确。那么,当下能做的最好的决定,就是做我眼前可见的最好的事情。所以我要按照梯度方向走(梯度方向为全部方向导数中绝对值最大的方向,由此易得,我们肯定会得到互为相反数的两个梯度方向,一个是梯度最大方向,一个是梯度最小方向)。由于我的目标是更新参数,然后使得损失函数最小,因而我当然要沿着梯度最小的方向去更新我的参数。

我在这里不得不再提一次“梯度最小”的含义——梯度最小,我觉得有必要说明到底是“谁”的梯度最小。是目标函数在当前点的梯度最小。所以,对于参数列表中的每个参数而言,你可能反而变大了,但总目标函数是在减小的,因为它们沿着负梯度的方向在前进。

所以说,这个“梯度下降”,目的指的是损失函数取值的下降,而非参数在下降。只不过参数沿着负梯度的方向前进,大概率也是在下降罢了。正因为“负梯度”,导致那个参数更新公式里也是减号。

同理——梯度上升

“梯度上升”,指的是目标函数取值的上升,而非参数的上升。参数本身是沿着正梯度的方向前进的。

 

然后,我们说一说“梯度提升”

梯度提升,英文应该叫Gradient Boosting,反正我只在GBDT中听到过这种说法。这里的“GBDT”的“梯度提升”,我认为和“梯度上升”还是不同的,二者的确是两个不同的概念——梯度上升,指的是求解目标函数最值的一种方案——沿正梯度方向上升;而梯度提升,指的是一种算法思想。首先它是一个”提升“算法,所以使用加法模型思想,一步步将结果进行提升。所以我们表面上是在最小化损失函数,而损失函数就是所谓前M轮加法模型得到的结果与真实值之间的差值,而如果我们想让这个差值最小,当然就是让新函数取沿着负梯度方向下降,结果的确就是在拟合负梯度。如果我们拟合的是正梯度,则加法模型之间就都应该是减号,这就很不美观了,所以我们要拟合负梯度,这样加法模型就更名副其实了,虽然加法模型也没要求一定要加,它只是说明要进行线性组合。

 

所以,我觉得,梯度下降和梯度上升,是针对目标函数的一种学习算法,是针对目标函数中参数的更新所提出来的,但“下降”or“上升”实际上指的还是目标函数的取值变化; 

梯度提升,仅指GBDT,指的是对“新函数”求导,然后让新函数沿着梯度方向,对加法模型累加得到的整体函数提升,这更像是一种算法思想。

 

实际上具体操作基本都是一样的,所以也没什么必要区分了。。。

你可能感兴趣的:(机器学习,杂谈)