Tensorflow2.0笔记12——优化器

Tensorflow2.0笔记

本博客为Tensorflow2.0学习笔记,感谢北京大学微电子学院曹建老师

6 优化器

​ 优化算法可以分成一阶优化和二阶优化算法,其中一阶优化就是指的梯度算法及其变种,而二阶优 化一般是用二阶导数(Hessian 矩阵)来计算,如牛顿法,由于需要计算Hessian阵和其逆矩阵,计算量较大,因此没有流行开来。这里主要总结一阶优化的各种梯度下降方法。

​ 深度学习优化算法经历了SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam 这样的发展历程。

image-20210622093819471

6.1 SGD

TensorFlow API: tf.keras.optimizers.SGD

6.1.1 vanilla SGD

image-20210622103327886

代码实现:

# sgd
w1.assign_sub(learning_rate * grads[0])
b1.assign_sub(learning_rate * grads[1])

6.1.2 SGD with Momentum

image-20210622103652084

代码实现:

# sgd-momentun 
beta = 0.9
m_w = beta * m_w + (1 - beta) * grads[0] 
m_b = beta * m_b + (1 - beta) * grads[1] 
w1.assign_sub(learning_rate * m_w) 
b1.assign_sub(learning_rate * m_b)

6.1.3 with Nesteroy Acceleration

image-20210622103841389

6.2 AdaGrad

TensorFlow API: tf.keras.optimizers.Adagrad

image-20210622104033868

代码实现:

# adagrad
v_w += tf.square(grads[0]) 
v_b += tf.square(grads[1])
w1.assign_sub(learning_rate * grads[0] / tf.sqrt(v_w)) 
b1.assign_sub(learning_rate * grads[1] / tf.sqrt(v_b))

6.3 RMSProp

TensorFlow API: tf.keras.optimizers.RMSprop

image-20210622104509988

代码实现:

# RMSProp beta = 0.9
v_w = beta * v_w + (1 - beta) * tf.square(grads[0]) 
v_b = beta * v_b + (1 - beta) * tf.square(grads[1]) 
w1.assign_sub(learning_rate * grads[0] / tf.sqrt(v_w)) 
b1.assign_sub(learning_rate * grads[1] / tf.sqrt(v_b))

posted @ 2021-01-18 21:53  Mr_WildFire  阅读(136)  评论(0编辑  收藏  举报