学习率衰减

  在我们训练模型的时候,通常会遇到这种情况。我们平衡模型的训练速度和损失(loss)后选择了相对合适的学习率(learning rate)。但是训练集的损失下降到一定的程度后就不在下降了,比如training loss一直在0.7和0.9之间来回震荡,不能进一步下降。如下图所示:

  遇到这种情况通常可以通过适当降低学习率(learning rate)来实现。但是,降低学习率又会延长训练所需的时间。

  学习率衰减(learning rate decay)就是一种可以平衡这两者之间矛盾的解决方案。学习率衰减的基本思想是:学习率随着训练的进行逐渐衰减。

  学习率衰减基本有两种实现方法:

  1. 线性衰减。例如:每过5个epochs学习率减半
  2. 指数衰减。例如:每过5个epochs将学习率乘以0.1

  TensorFlow中使用tf.train.AdamOptimizer方法可以很方便的实现学习率衰减,我们来大概看下AdamOptimizer是怎样实现的。

  官方文档的描述:

tf.train.AdamOptimizer

class tf.train.AdamOptimizer

Defined in tensorflow/python/training/adam.py.

See the guide: Training > Optimizers

Optimizer that implements the Adam algorithm.

See Kingma et. al., 2014 (pdf).

Methods

__init__

__init__(
    learning_rate=0.001,
    beta1=0.9,
    beta2=0.999,
    epsilon=1e-08,
    use_locking=False,
    name=‘Adam‘
)
Construct a new Adam optimizer.

Initialization:

m_0 <- 0 (Initialize initial 1st moment vector)
v_0 <- 0 (Initialize initial 2nd moment vector)
t <- 0 (Initialize timestep)
The update rule for variable with gradient g uses an optimization described at the end of section2 of the paper:

t <- t + 1
lr_t <- learning_rate * sqrt(1 - beta2^t) / (1 - beta1^t)

m_t <- beta1 * m_{t-1} + (1 - beta1) * g
v_t <- beta2 * v_{t-1} + (1 - beta2) * g * g
variable <- variable - lr_t * m_t / (sqrt(v_t) + epsilon)
The default value of 1e-8 for epsilon might not be a good default in general. For example, when training an Inception network on ImageNet a current good choice is 1.0 or 0.1.
Note that since AdamOptimizer uses the formulation just before Section 2.1 of the Kingma and Ba paper rather than the formulation in Algorithm 1,
the "epsilon" referred to here is "epsilon hat" in the paper.

  可以看到,随着时间t的增加,学习率的更新方式为 lr_t = learning_rate * sqrt(1 - beta2^t) / (1 - beta1^t)

  变量的更新方式为 variable <- variable - lr_t * m_t / (sqrt(v_t) + epsilon)

  epsilon的缺省值可能并不适合所有模型。例如,在用感知机模型训练ImagNet数据集时,目前一个比较好的选择是1.0或0.1

时间: 2024-10-18 05:47:56

学习率衰减的相关文章

Tensorflow实现学习率衰减

Tensorflow实现学习率衰减 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 Deeplearning AI Andrew Ng Tensorflow1.2 API 学习率衰减(learning rate decay) 加快学习算法的一个办法就是随时间慢慢减少学习率,我们将之称为学习率衰减(learning rate decay) 概括 假设你要使用mini-batch梯度下降法,mini-batch数量不大,大概64或者128个样本,但是在迭代过程中会有噪音,下降朝向这

简单例子说明梯度下降、momentum和学习率衰减

[梯度下降法]一:快速教程.Python简易实现以及对学习率的探讨 [梯度下降法]二:冲量(momentum)的原理与Python实现 [梯度下降法]三:学习率衰减因子(decay)的原理与Python实现 原文地址:https://www.cnblogs.com/picassooo/p/12348588.html

PyTorch学习之六个学习率调整策略

PyTorch学习率调整策略通过torch.optim.lr_scheduler接口实现.PyTorch提供的学习率调整策略分为三大类,分别是 a. 有序调整:等间隔调整(Step),按需调整学习率(MultiStep),指数衰减调整(Exponential)和 余弦退火CosineAnnealing.b. 自适应调整:自适应调整学习率 ReduceLROnPlateau.c. 自定义调整:自定义调整学习率 LambdaLR. 1 等间隔调整学习率 StepLR等间隔调整学习率,调整倍数为 ga

学习率变更策略

学习率变更策略 2019年04月02日 16:29:21 急流勇进 阅读数 203更多 分类专栏: 技巧/经验/心得 如果让我投票给深度学习中,最不想调试,但又必须要小心调试的参数,毫无疑问会投给学习率,今天就来说说这个. 01 项目背景 我们选择了GHIM-10k数据集,这是一个图像检索数据集,包含20个类别,分别是日落,船舶,花卉,建筑物,汽车,山脉,昆虫等自然图像,各个类别拥有较好的多样性,而类别之间也有比较好的区分度.数据集共10000张图像,每个类别包含500张JPEG格式的大小为40

TensorFlow和深度学习新手教程(TensorFlow and deep learning without a PhD)

前言 上月导师在组会上交我们用tensorflow写深度学习和卷积神经网络.并把其PPT的參考学习资料给了我们, 这是codelabs上的教程:<TensorFlow and deep learning,without a PhD> 当然登入须要FQ,我也顺带巩固下,做个翻译.不好之处请包括指正. 当然须要安装python,教程推荐使用python3.假设是Mac,能够參考博主的另外两片博文,Mac下升级python2.7到python3.6, Mac安装tensorflow1.0 好多专业词

深度学习与计算机视觉系列(8)_神经网络训练与注意点

作者:寒小阳 时间:2016年1月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/50521064 声明:版权所有,转载请联系作者并注明出处 1.训练 在前一节当中我们讨论了神经网络静态的部分:包括神经网络结构.神经元类型.数据部分.损失函数部分等.这个部分我们集中讲讲动态的部分,主要是训练的事情,集中在实际工程实践训练过程中要注意的一些点,如何找到最合适的参数. 1.1 关于梯度检验 之前的博文我们提到过,我们需要比对数值梯度和解析

TensorFlow和深度学习入门教程(TensorFlow and deep learning without a PhD)

前言 上月导师在组会上交我们用tensorflow写深度学习和卷积神经网络,并把其PPT的参考学习资料给了我们, 这是codelabs上的教程:<TensorFlow and deep learning,without a PhD> 当然登入需要翻墙,我也顺带巩固下,做个翻译,不好之处请包含指正. 当然需要安装python,教程推荐使用python3.如果是Mac,可以参考博主的另外两片博文,Mac下升级python2.7到python3.6, Mac安装tensorflow1.0 好多专业词

Google大脑科学家贾杨清(Caffe缔造者)-微信讲座

Google大脑科学家贾杨清(Caffe缔造者)-微信讲座 机器学习Caffe 贾扬清 caffe 一.讲座正文: 大家好!我是贾扬清178,目前在Google Brain69,今天有幸受雷鸣师兄邀请来和大家聊聊Caffe48.没有太多准备,所以讲的不好的地方还请大家谅解. 我用的ppt671基本上和我们在CVPR上要做的tutorial是类似的,所以大家如果需要更多的内容的话,可以去tutorial.caffe.berkeleyvision.org,也欢迎来参加我们的tutorial:) 网页

77、tensorflow手写识别基础版本

''' Created on 2017年4月20日 @author: weizhen ''' #手写识别 from tensorflow.examples.tutorials.mnist import input_data mnist=input_data.read_data_sets("/path/to/MNIST_data/",one_hot=True) batch_size=100 xs,ys = mnist.train.next_batch(batch_size) #从trai