# Tensorflow 中 learning rate decay 的奇技淫巧

learning rate 衰减策略文件在 tensorflow/tensorflow/python/training/learning_rate_decay.py（http://t.cn/RQJ78Lg ） 中，函数中调用方法类似 tf.train.exponential_decay 就可以了。

## exponential_decay

exponential_decay(learning_rate, global_step, decay_steps, decay_rate,
staircase=False, name=None)

learning_rate 传入初始 lr 值，global_step 用于逐步计算衰减指数，decay_steps 用于决定衰减周期，decay_rate 是每次衰减的倍率，staircase 若为 False 则是标准的指数型衰减，True 时则是阶梯式的衰减方法，目的是为了在一段时间内（往往是相同的 epoch 内）保持相同的 learning rate。

## piecewise_constant

piecewise_constant(x, boundaries, values, name=None)

## polynomial_decay

polynomial_decay(learning_rate, global_step, decay_steps,
end_learning_rate=0.0001, power=1.0,
cycle=False, name=None)

polynomial_decay 是以多项式的方式衰减学习率的。

It is commonly observed that a monotonically decreasing learning rate, whose degree of change is carefully chosen, results in a better performing model. This function applies a polynomial decay function to a provided initial `learning_rate` to reach an `end_learning_rate` in the given `decay_steps`.

global_step = min(global_step, decay_steps) decayed_learning_rate = (learning_rate - end_learning_rate) * (1 - global_step / decay_steps) ^ (power) + end_learning_rate

cycle 参数是决定 lr 是否在下降后重新上升的过程。cycle 参数的初衷是为了防止网络后期 lr 十分小导致一直在某个局部最小值中振荡，突然调大 lr 可以跳出注定不会继续增长的区域探索其他区域。

## natural_exp_decay

natural_exp_decay(learning_rate, global_step, decay_steps, decay_rate,
staircase=False, name=None)

natural_exp_decay 和 exponential_decay 形式差不多，只不过自然指数下降的底数是

exponential_decay： decayed_learning_rate = learning_rate * decay_rate ^ (global_step / decay_steps) natural_exp_decay： decayed_learning_rate = learning_rate * exp(-decay_rate * global_step / decay_steps)

## inverse_time_decay

inverse_time_decay(learning_rate, global_step, decay_steps, decay_rate,
staircase=False, name=None)

inverse_time_decay 为倒数衰减，衰减公式如下所示：

decayed_learning_rate = learning_rate / (1 + decay_rate * global_step / decay_step)

## cosine_decay

cosine_decay(learning_rate, global_step, decay_steps, alpha=0.0,
name=None)

cosine_decay 是近一年才提出的一种 lr 衰减策略，基本形状是余弦函数。其方法是基于论文实现的：SGDR: Stochastic Gradient Descent with Warm Restarts（https://arxiv.org/abs/1608.03983 ）

global_step = min(global_step, decay_steps) cosine_decay = 0.5 * (1 + cos(pi * global_step / decay_steps)) decayed = (1 - alpha) * cosine_decay + alpha decayed_learning_rate = learning_rate * decayed

alpha 的作用可以看作是 baseline，保证 lr 不会低于某个值。不同 alpha 的影响如下：

## cosine_decay_restarts

cosine_decay_restarts(learning_rate, global_step, first_decay_steps,
t_mul=2.0, m_mul=1.0, alpha=0.0, name=None)

cosine_decay_restarts 是 cosine_decay 的 cycle 版本。first_decay_steps 是指第一次完全下降的 step 数，t_mul 是指每一次循环的步数都将乘以 t_mul 倍，m_mul 指每一次循环重新开始时的初始 lr 是上一次循环初始值的 m_mul 倍。

## linear_cosine_decay

linear_cosine_decay(learning_rate, global_step, decay_steps,
num_periods=0.5, alpha=0.0, beta=0.001,
name=None)

linear_cosine_decay 的参考文献是 Neural Optimizer Search with RL（https://arxiv.org/abs/1709.07417 ），主要应用领域是增强学习领域，本人未尝试过。可以看出，该方法也是基于余弦函数的衰减策略。

## noisy_linear_cosine_decay

noisy_linear_cosine_decay(learning_rate, global_step, decay_steps,
initial_variance=1.0, variance_decay=0.55,
num_periods=0.5, alpha=0.0, beta=0.001,
name=None)

0 条评论

1193

1884

3785

2057

5756

1851

1K2

1221

2.8K8

1702