如何加速神经网络的训练呢?目前加速训练的优化方法基本都是基于梯度下降的,只是细节上有些差异。梯度下降是求函数极值的一种方法,学习到最后就是求损失函数的极值问题。
TensorFlow提供了很多优化器 (optimizer),我们重点介绍下面这8个:
class tf.train.GradientDescentOptimizer
class tf.train.AdadeltaOptimizer
class tf.train.AdagradOptimizer
class tf.train.AdagradDAOptimizer
class tf.train.MomentumOptimizer
class tf.train.AdamOptimizer
class tf.train.FtrlOptimizer
class tf.train.RMSPropOptimizer
这8个优化器对应8种优化方法,分别是梯度下降法(BGD和SGD)、Adadelta法、Adagrad法(Adagrad和AdagradDAO)、Momentum法(Momentum和Nesterov Momentum)、Adam、Ftrl法和RMSProp法,其中BGD、SGD、Momentum和Nesterov Momentum是手动指定学习率的,其余算法能够自动调节学习率。
下面就介绍其中几种优化方法。
1.BGD法
BGD的全称是batch gradient descent,即批梯度下降。这种方法是利用现有参数对训练集中的每一个输入生成一个估计输出yi ,然后跟实际输出yi 比较,统计所有误差,求平均以后得到平均误差,以此作为更新参数的依据。它的迭代过程为: