关于梯度优化算法的一点点思考

梯度算法

梯度优化算法实际是通过函数的梯度信息进行找函数极值的算法。
一阶梯度算法实际是在在函数某处用泰勒公式的一阶展开进行表示近似表示。然后通过沿着函数降低的方向更新参数。学习率不能太大。因为泰勒公式近似是在函数某个地方的局部近似。当然一阶梯度算法实现简单,容易工程实现,针对学习率,梯度方向衍生了动量梯度等一些列优化算法,优化速度非常快。

二阶梯度算法实际上是在函数某个点的局部二阶泰勒展开去近似逼近函数。因为是凸函数,然后针对函数泰勒展开的导数=0即为函数极值,因为是二阶函数的导数直接为零,函数优速度相当于一阶很快,假如要优化的函数是二次函数,这种方式可以快速收敛到极先值点。一阶梯度相当于一点点逼近函数极值,二阶梯度相当于二次函数近似直接到极致。

作为优化算法的思考:
不管是一阶梯度还是二阶梯度都会陷入到局部极值点。但是在深度学习中随机梯度下降相当于每次针对函数的不同输入数据来找极小值点。每个batchsize都达到最优,局部极值并不会影响性能。结合一些改进反而效果好。

二阶梯度优化二阶H矩阵有很多优化改进方法,在xgboost有使用,因为xgboist有二次函数。但是深度学习中用的并不多。因为H矩阵在反向传播中并不好计算。

那么既然梯度优化算法有一阶二阶,可不可以有三阶,四阶等等呢?
针对函数N阶泰勒公式展开近似,然后针对展开的泰勒公式进行一次或者二次泰勒公式展开,为啥又出现一次,二次,因为一次梯度,二次导数和极值有关。
好了,优化算法不但是古代,也是当代的一项必备工程工具。

你可能感兴趣的:(笔记)