美文网首页
学习率的选择

学习率的选择

作者: 三方斜阳 | 来源:发表于2021-05-20 20:43 被阅读0次
  • 要理解学习率是什么,首先得弄明白神经网络参数更新的机制-梯度下降+反向传播,这里默认读者已经有这些概念基础了。
  • 学习率是一个非常非常重要的超参数,这个参数呢,面对不同规模、不同batch-size、不同优化方式、不同数据集,其最合适的值都是不确定的,我们无法光凭经验来准确地确定lr的值,我们唯一可以做的,就是在训练中不断寻找最合适当前状态的学习率。
  • 比如下图利用fastai中的lr_find()函数寻找合适的学习率,根据下方的学习率-损失曲线得到此时合适的学习率为1e-1。

    他是通过在训练的过程中将不同的学习率得到的损失loss的值记录下来,可视化展示之后纵轴是训练的loss,横轴是学习率,于是可以直观的看到 最佳的学习率为1e-1。

寻找学习率函数

#寻找学习率
def find_lr(init_value = 1e-8, final_value=10., beta = 0.98):
    num = len(trn_loader)-1
    mult = (final_value / init_value) ** (1/num)
    lr = init_value
    optimizer.param_groups[0]['lr'] = lr
    avg_loss = 0.
    best_loss = 0.
    batch_num = 0
    losses = []
    log_lrs = []
    for data in trn_loader:
        batch_num += 1
        #As before, get the loss for this mini-batch of inputs/outputs
        inputs,labels = data
        inputs, labels = Variable(inputs), Variable(labels)
        optimizer.zero_grad()
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        #Compute the smoothed loss
        avg_loss = beta * avg_loss + (1-beta) *loss.item()
        smoothed_loss = avg_loss / (1 - beta**batch_num)
        #Stop if the loss is exploding
        if batch_num > 1 and smoothed_loss > 4 * best_loss:
            return log_lrs, losses
        #Record the best loss
        if smoothed_loss < best_loss or batch_num==1:
            best_loss = smoothed_loss
        #Store the values
        losses.append(smoothed_loss)
        log_lrs.append(math.log10(lr))
        #Do the SGD step
        loss.backward()
        optimizer.step()
        #Update the lr for the next step
        lr *= mult
        optimizer.param_groups[0]['lr'] = lr
    return log_lrs, losses

定义网络:

  • 这个地方用选取的最佳学习率重新进行计算会发现比原本的第一轮训练正确率更高
logs,losses = find_lr()
plt.plot(logs[10:-5],losses[10:-5])
net = SimpleNeuralNet(28*28,100,10)
optimizer = optim.SGD(net.parameters(),lr=1e-1)
>>
Epoch 1:
Loss: 0.5872366683165232  Accuracy: 85.20333099365234
Epoch 1:
Loss: 0.2632665414134661  Accuracy: 92.31999969482422

learning-rate与batch-size的关系

  • 一般来说,越大的batch-size使用越大的学习率。
    原理很简单,越大的batch-size意味着我们学习的时候,收敛方向的confidence越大,我们前进的方向更加坚定,而小的batch-size则显得比较杂乱,毫无规律性,因为相比批次大的时候,批次小的情况下无法照顾到更多的情况,所以需要小的学习率来保证不至于出错。
  • 在显存足够的条件下,最好采用较大的batch-size进行训练,找到合适的学习率后,可以加快收敛速度。另外,较大的batch-size可以避免batch normalization出现的一些小问题

参考:

How Do You Find A Good Learning Rate

相关文章

  • 学习率a的选择

    构造树的基本想法是随着树深度的增加,节点的熵迅速地降低。熵降低的速度越快越好,因为这样得到的树的高度最矮。让熵减小...

  • 学习率的选择

    要理解学习率是什么,首先得弄明白神经网络参数更新的机制-梯度下降+反向传播,这里默认读者已经有这些概念基础了。 学...

  • 学习率优化

    学习率优化trick在机器学习中,学习率的选择,或者说Optimizer的选择,会很大程度上影响学习的效果。当然,...

  • 2019-03-24

    学习率的调整 从梯度下降算法的角度来说,通过选择合适的学习率,可以使梯度下降法得到更好的性能。学习率,即参数到达最...

  • PyTorch | 优化神经网络训练的17种方法

    01 考虑换一种学习率 schedule 学习率 schedule 的选择对模型的收敛速度和泛化能力有很大的影响。...

  • tf教程4: RNN预测时序数据(包含Lambda Layer的

    导入所需的包 辅助函数及构造数据 定义和训练模型 选择合适的学习率 使用优化的学习率重新训练,注意迭代次数增加了 ...

  • tf教程4: LSTM预测时序数据

    导入所需的包 构造人工时序数据 创建模型并训练 选择合适的学习率 使用优化后的学习率重新训练 使用模型进行预测 查...

  • tf教程4: 因果卷积+LSTM预测时序数据

    导入所需的包 构造人工时序数据 辅助函数 创建模型并训练 选择合适的学习率 使用优化后的学习率重新训练 使用模型预...

  • 深度学习:学习率learning rate 的设定规律

    Introduction 学习率 (learning rate),控制 模型的 学习进度 : 学习率大小 学习率 ...

  • 2018-04-07 深度学习训练中 超参数调整 笔记

    超参数 1 学习率 初始值0.1, 如何调整学习率,准确率不再下降,就减小学习率。准确率下降太慢,就增大学习率 2...

网友评论

      本文标题:学习率的选择

      本文链接:https://www.haomeiwen.com/subject/hgcbjltx.html