赞
踩
一、什么是学习率(learning rate):
学习率是指导我们该如何通过损失函数的梯度调整网络权重的超参数,通过设置学习率控制参数更新的速度。
我们在做神经网络时,参数权重是通过不断的训练得出的,那么这个参数每一次增加或者减少的数值就是通过学习率来控制的。
w′=w−α⋅∂J(w)∂w
在更新参数w 时,其中α 就是学习率。
二、学习率过小或过大的问题
1、学习率过小时,学习速度慢,而且容易出现过拟合,收敛速度慢,一般用在训练了一定次数之后使用。
2、学习率过大时,学习速度快,但是容易出现震荡问题,使得训练值在最优值左右来回摆动,当学习率设为1时,效果就是参数在两个固定值来回摆动。而且容易造成参数爆炸增长或减小现象。
三、学习率的设置
在训练过程中,一般根据训练轮数设置动态变化的学习率。
- 刚开始训练时:学习率以 0.01 ~ 0.001 为宜。
- 一定轮数过后:逐渐减缓。
- 接近训练结束:学习速率的衰减应该在100倍以上。
- 如果是迁移学习 ,由于模型已在原始数据上收敛,此时应设置较小学习率 (≤10−4≤10−4) 在新数据上进行微调 。
学习率减缓机制:
名称 轮数减缓(step decay) 指数减缓(exponential decay) 分数减缓(1/t1/t decay) 实现 每N轮学习率减半 学习率按训练轮数增长指数插值递减 lrt=lr0/(1+kt)lrt=lr0/(1+kt)
k 控制减缓幅度,t 为训练轮数
四、指数衰减法(exponential decay)
TensorFlow提供了一种灵活的学习率设置方法——指数衰减法。
tf.train.exponential_decay函数实现了指数衰减学习率,通过这个函数,可以先使用较大的学习率来快速得到一个比较优的解,然后随着迭代的继续逐步减小学习率。
exponential_decay 函数会指数级地减小学习率,具体计算公式:
decayed_learning_rate=learning_rate∗decay_rateglobal_stepdecay_steps exponential_decay 函数具体参数:
exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None)
其中参数:
- decayed_learning_ rate :每一轮优化时使用的学习率,
- learning_rate :事先设定的初始学习率,
- global_step:用于衰减计算的全局步骤。喂入一次 BACTH_SIZE 计为一次 global_step。
- decay_steps :衰减速度,
- decay_rate :衰减系数,
- staircase :衰减方式,False :学习率连续衰减;True:阶梯状衰减。(如下图)
在这样的设置下, decay_steps 通常代表了完整的使用一遍训练数据所需要的迭代轮数。
这个迭代轮数也就是总训练样本数除以每一个batch 中的训练样本数。下面给出了一段代码来示范如何在TensorFlow 中使用tf.train.exponential_decay 函数:
global_step = tf.Variable(0) # 通过exponential_decay函数生成学习率 learning_rate = tf.train.exponential_decay( 0.1, global_step, 100, 0.96, staircase=True) ''' 使用指数衰减的学习率。在minimize函数中传入global_step, 将自动更新global_step参数,从而学习率也得到更新。 ''' learning_rate = tf.train.GradientDescentOptimizer(learning_rate)\ .minimize(myloss, global_step=global_step)
参考文献:
《Tensorflow实战Google深度学习框架(第2版)》
深度学习: 学习率 (learning rate)
理解深度学习中的学习率及多种选择策略
学习率(Learning rate)的理解以及如何调整学习率
TensorFlow 中的 tf.train.exponential_decay() 指数衰减法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。