深度学习中波士顿房价预测模型几个优化函数的对比
前言
aistudio官方代码中用的是随机梯度下降SGD的优化函数,在其他不变,只改变优化函数的情况下,通过与对比优化函数的效果,加深对优化函数的理解
一、优化函数的种类?
参考https://blog.csdn.net/lzx159951/article/details/105255042/,十分感谢。
1、SGD :随机梯度下降,每次从大量训练数据中抽取少量数据,这就会造成一种上下波动。但是总体方向都是朝着最小值走的。
2、Momentum:动量梯度下降,这个算法参照了物理学中的惯性。在物体前进的过程中,速度越块,惯性就越大,不容易收到其他方面的影响。比如篮球,重的篮球惯性大,更不容易受到手势的小幅变形或风吹的影响。引入这个概念是因为SGD在下降的过程中,会进行一定的波动。我们引入物理动量的概念,给梯度下降的过程加入一定的“惯性”累积,就可以减少更新路径上的震荡!即每次更新的梯度由“历史多次梯度的累积方向”和“当次梯度”加权相加得到。历史多次梯度的累积方向往往是从全局视角更正确的方向,这与“惯性”的物理概念很像,也是为何其起名为“Momentum”的原因。
3、AdaGrad :如果说上述是从梯度方向上的考量,那么这个算法是从学习率的大小来考量的。我们所希望的是,在梯度下降的前期,步长能够大一些,到快要接近最低点的时候,步长小一些。这个算法的思路就是 **根据不同参数距离最优解的远近,动态调整学习率。学习率逐渐下降,依据各参数变化大小调整学习率。**根据这个思想编写的优化算法称为“AdaGrad”,Ada是Adaptive的缩写,表示“适应环境而变化”的意思。
4、Adam :这个是算法不做过多解释,是将AdaGrad和Monmentum两个算法思路结合起来,也是我们现在应用的最广泛的算法。
二、波士顿房价预测模型中的效果对比
1.SGD
代码如下(示例):
optimizer = fluid.optimizer.SGDOptimizer(learning_rate=0.001)
opts = optimizer.minimize(avg_cost)
效果
2.Adam
代码如下(示例):
optimizer = fluid.optimizer.AdamOptimizer(learning_rate=0.01)
opts = optimizer.minimize(avg_cost)
效果
3.Adagrad
代码如下(示例):
optimizer = fluid.optimizer.AdagradOptimizer(learning_rate=0.01)
opts = optimizer.minimize(avg_cost)
效果
4.Momentum
代码如下(示例):
optimizer = fluid.optimizer.MomentumOptimizer(learning_rate=0.01)
opts = optimizer.minimize(avg_cost)
效果
三、总结
从介绍中看,感觉Adam应该是梯度下降效果最好的。但实际上,还得考量你的模型和训练的数据量,从而选择效果最好的优化函数。