【调参】如何为神经网络选择最合适的学习率lr-LRFinder-for-Keras

keras 版本的LRFinder,借鉴 fast.ai Deep Learning course

前言

学习率lr在神经网络中是最难调的全局参数:设置过大,会导致loss震荡,学习难以收敛;设置过小,那么训练的过程将大大增加。如果,调整一次学习率的周期的训练完一次,那么,训练n次,才能得到n个lr的结果…,导致学习率的选择过程代价太大。。

有多种方法可以为学习速度选择一个好的起点。一个简单的方法是尝试几个不同的值,看看哪个值在不牺牲训练速度的情况下损失最大。我们可以从较大的值开始,比如0.1,然后尝试指数更低的值:0.01、0.001,等等。当我们以较高的学习率开始培训时,损失并没有得到改善,甚至在我们运行前几次迭代培训时可能还会增加。当训练的学习率较小时,在某一点上损失函数的值在前几次迭代中开始减小。这个学习率是我们可以使用的最大值,任何更高的值都不会让训练收敛。甚至这个值也太高了:它还不足以训练多个时代,因为随着时间的推移,网络将需要更细粒度的权重更新。因此,一个合理的开始训练的学习率可能会低1-2个数量级。

学习率的调整困难如下图所示:
在这里插入图片描述
如果,只是在训练的一个epoch中,就可以确定最佳的lr选择,那岂不是美哉?

A smarter way

Leslie N. Smith在2015年发表的论文Cyclical Learning Rates for Training Neural Networks第3.3节中描述了一种选择神经网络学习率范围的强大技术。
诀窍是,从一个较低的学习率开始训练一个网络,并以指数级增长每一批的学习率。
如下图所示:

在这里插入图片描述
记录每个批次的学习率和培训损失。然后,绘制损失和学习率。通常,它看起来是这样的:
在这里插入图片描述
首先,在低学习率的情况下,损失会缓慢地改善,然后训练会加速,直到学习率过大,损失上升:训练过程会出现分歧。

我们需要在图上选择一个损失下降最快的点。在这个例子中,当学习率在0.001到0.01之间时,损失函数下降得很快。

查看这些数字的另一种方法是计算损失的变化率(损失函数对迭代次数的导数),然后在y轴上绘制变化率,在x轴上绘制学习率。
在这里插入图片描述

它看起来太吵了,我们用简单的simple moving average把它弄平。
在这里插入图片描述

这看起来更好。在这个图上,我们需要找到最小值。它接近于lr=0.01。

keras 实现

from matplotlib import pyplot as plt
import math
from keras.callbacks import LambdaCallback
import keras.backend as K


class LRFinder:
    """
    Plots the change of the loss function of a Keras model when the learning rate is exponentially increasing.
    See for details:
    https://towardsdatascience.com/estimating-optimal-learning-rate-for-a-deep-neural-network-ce32f2556ce0
    """
    def __init__(self, model):
        self.model = model
        self.losses = []
        self.lrs = []
        self.best_loss = 1e9

    def on_batch_end(self, batch, logs):
        # Log the learning rate
        lr = K.get_value(self.model.optimizer.lr)
        self.lrs.append(lr)

        # Log the loss
        loss = logs[</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值