背景:
在讨论了损失函数后,已经将监督学习问题转化成最优化问题,现在就要考虑使用什么算法求解最优解,从而得到最优解情况下的模型参数,最优模型就基本得到了。
一、有哪些最优化算法
TensorFlow 有哪些最优化算法(优化器)
二、算法的对比
然后参照莫烦大神的对比
Stochastic Gradient Descent (SGD)
Momentum 向下的惯性
AdaGrad 一双不好走路的鞋子, 使得他一摇晃着走路就脚疼
RMSProp
Adam 一个下坡, 一双破鞋子, 功不可没
三、学习率(learning rate)
学习率决定了参数每次变化的幅度。学习率大了,更新速度快,但是不一定收敛;学习率小了,又很花时间。折中的方法,一开始的时候快点,随着迭代逐渐放慢,数学上用指数实现。
# ----------------------------------指数衰减学习率---------------------------------------
# exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None)
# decayed_learning_rate = learning_rate * decay_rate ^ (global_step / decay_steps) ,(If the argument `staircase` is `True)
global_step = tf.Variable(0)
learning_rate = tf.train.exponential_decay(0.1, global_step, decay_steps=1000, decay_rate=0.96, staircase=True) #staircase 楼梯。
四、code
# ----------------------------------指数衰减学习率---------------------------------------
# exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None)
# decayed_learning_rate = learning_rate * decay_rate ^ (global_step / decay_steps) ,(If the argument `staircase` is `True)
global_step = tf.Variable(0)
learning_rate = tf.train.exponential_decay(0.1, global_step, decay_steps=1000, decay_rate=0.96, staircase=True) #staircase 楼梯。
# ----------------------------------算法---------------------------------------
opt = tf.train.GradientDescentOptimizer(learning_rate = learning_rate).minimize(loss)
# 用AdamOptimizer,参数如下,迭代很慢
# opt = tf.train.AdamOptimizer(learning_rate = 0.1).minimize(loss)
# tf.train.AdamOptimizer.__init__
# (learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False, name='Adam')