1. 直接理解一阶导指引梯度方向,二阶导指引梯度方向如何变化,所以二阶信息本身就能让梯度收敛更快更准确。
这里可以对比牛顿法和SGD。牛顿法是二阶收敛,梯度下降是一阶收敛,当初始点选取合理的情况下,牛顿法比梯度下降法收敛的速度快。通俗的讲,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。)
2. 【模块化】:可以很方便地自定义损失函数,只要这个损失函数可以求一阶和二阶导
《机器学习技法》中从GBDT求回归问题可以看到,如果只是1阶泰勒展开的话,这时候想要最小化损失函数,寻找的函数h就会变成负无穷。这时,GBDT想,反正最小化损失函数会用h * 步长(参考梯度下降),因为步长后续可以优化,h的大小我无所谓。于是用了打补丁的方式:对h作限制,加入h^2项。
2、而Xgboost我理解是从根本上为了防止h等于负无穷这种尴尬的情况出现,从泰勒展开这一步就避免:
f(x + h) = 二阶导h(x) ^2 + 一阶导h(x) + f(x)
最终求最小化是关于h的二次方程,这样就可以直接求最小化h,而不用打补丁。
所以:相比于GBDT每次一阶导后要打补丁,Xgboost我理解更加模块化,直接塞进去一个可二阶泰勒展开的损失函数就行