Nurhachu Null Chita编译

自适应学习率调度器了解一下?

传统观点认为,太大的学习率不利于优化深度神经网络,而相比固定的学习率而言,变化的学习率更能提供快速的收敛。基于此,本文作者基于理论基础提出了一个计算深度神经网络学习率的新方法。实验结果证明了该方法的有效性。

训练神经网络受到几个问题的困扰。这些问题包括梯度消失、梯度爆炸 [7,3] 和过拟合。包括不同激活函数 [14,17]、批归一化 [12]、新颖的初始化方案 [9] 以及 Dropout[26] 在内的多种进展都为这些问题提供了解决方案。

但是,一个更基本的问题是为不同的参数寻找最优值,而对这个问题而言学习率可以说是最重要的。众所周知,学习率太小会导致收敛变慢,但是太大的学习率又会导致发散 [2]。近期的研究一致认为,与固定的学习率相比,变化的学习率调度系统能够提供更快的收敛 [20,23]。而觉得不应使用较大学习率的传统经验也被认为有问题,可能导致「超收敛」和规则效应(regularizing effect)[25]。本文的实验结果和这个说法是一致的;但是作者没有使用循环的学习率,而是提出了一种基于理论基础来计算自适应学习率的新方法。

据作者所知,这是首次提出具有理论基础的自适应学习率调度器并且在标准数据集和网络架构上进行实证研究。所以,本文的贡献是双重的。首先,作者基于损失函数的利普希茨常数(Lipschitz),提出了一个用于在深度神经网络随机梯度下降中计算最优学习率的新理论框架。其工作表明,在激活函数的特定选择方面,仅最后两层的激活函数是计算学习率时所需要的。其次,作者为几个常用的损失函数计算了理想的学习率,并用这些公式实验性地证明了其方法的有效性。

本文方法利用了损失函数的函数属性,仅对损失函数做了两个最小限度的假设:它必须是利普希茨连续的 [19], 且至少是一阶可微的。常用的损失函数都满足这两个条件。

论文:A novel adaptive learning rate scheduler for deep neural networks

论文地址:https://arxiv.org/abs/1902.07399

摘要:优化深度神经网络在很大程度上被认为是一个经验过程,它需要手动调节几个参数,例如学习率权重衰减以及随机失活率(dropout rate)。可以说,学习率是这些需要调节的参数中最重要的一个,它在最近的工作中也得到了更多的关注。在本文中,我们提出了一个计算深度神经网络学习率的新方法。我们推导了动态计算学习率的理论框架,然后展示了在标准数据集和模型架构上的实验结果来证明该方法的有效性。

理论框架

对一个使用 Sigmoid、ReLU 或者 softmax 激活函数神经网络来说,很容易表现出这样的现象:反向传播时朝着浅层的方向梯度会越来越小。因此,最后一层的梯度是反向传播过程中计算出的梯度中最大的一个。如果 是第 l 层节点 i 到节点 j 的权重,并且 L 是总的层数,那么:

本质上,公式 (1) 表示误差对最后一层权重的最大梯度比误差对网络中任何权重的梯度都要大。显然这也可以扩展到偏置(bias)。换句话说,找到最后一层的最大梯度就确定了误差的利普希茨常数的上确界,这里的梯度都是根据每一层的权重参数来取的。

我们现在分析得出了不同类型问题的理论上确界。这些数值的倒数可以用作梯度下降学习率。在任何一层中,我们都会有这种计算:

因此,最后一层中任何权重的梯度都是通过下面的链式法则来计算的:

第三部分是不能解析计算的;我们将它记作 K_z。现在看一下不同类型的问题,并计算这些组成部分。

实验

下面我们展示了在一些公开数据集上的实验结果和细节。虽然我们的结果不是最先进的,但我们的重点是凭经验证明随机梯度下降是可以通过更大的学习率来进行的,而不是像通常理解的那样只能用小一些的学习率。我们所有的实验都是在特斯拉 P100 GPU 上运行的,如果没有特殊说明,模型也是使用(没有动量或者权重衰减的)随机梯度下降优化器进行优化的。在 CIFAR 数据集上,我们和 [10] 一样仅使用了翻转和平移增强方案。在所有实验中,原始图像的像素数值都除以 255。

在 MNIST 上的实验只使用了一个自适应学习率,而因为利普希茨常数,学习率在每个 epoch 中都会被重新计算。

图 1 展示了训练集和验证集准确率损失函数随着 epoch 的变化而变化。图 2 展示了在各个 epoch 计算的学习率。请注意,与 CIFAR-10(图 5)和 CIFAR-100(图 6)中计算的自适应学习率不同,MNIST 的学习率从高得多的值开始。

图 5 展示了不同时间的学习率随。正如相关文献所表明的,自适应方案会自动选择一个衰减的学习率

图 5:CIFAR-10 上自适应学习率随着时间的变化而变化

图 6 展示了在各个 epoch 的学习率。与 CIFAR-10 一样,前两个 epoch 会以很小的学习率开始(10^(-8)),但是模型会快速适应不断变化的权重

图 6: CIFAR-100 上随着时间变化的自适应学习率

理论深度神经网络自适应学习率
5
相关数据
激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

Dropout技术

神经网络训练中防止过拟合的一种技术

调度技术

调度在计算机中是分配工作所需资源的方法。资源可以指虚拟的计算资源,如线程、进程或数据流;也可以指硬件资源,如处理器、网络连接或扩展卡。 进行调度工作的程序叫做调度器。调度器通常的实现使得所有计算资源都处于忙碌状态,允许多位用户有效地同时共享系统资源,或达到指定的服务质量。 see planning for more details

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

学习率技术

在使用不同优化器(例如随机梯度下降,Adam)神经网络相关训练中,学习速率作为一个超参数控制了权重更新的幅度,以及训练的速度和精度。学习速率太大容易导致目标(代价)函数波动较大从而难以找到最优,而弱学习速率设置太小,则会导致收敛过慢耗时太长

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

自适应学习技术

自适应学习也称为适应性教学(Adaptive Learning),是一种以计算机作为交互式教学手段的教学方法,根据每个学习者的特别需求,以协调人力资源和调解资源的分配。计算机根据学生的学习需求(如根据学生对问题、任务和经验的反馈)调整教育材料的表达方式。自适应学习技术已经涵盖了来自各个研究领域,包括计算机科学,教育,心理学和脑科学等等。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

验证集技术

验证数据集是用于调整分类器超参数(即模型结构)的一组数据集,它有时也被称为开发集(dev set)。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

梯度下降技术

梯度下降是用于查找函数最小值的一阶迭代优化算法。 要使用梯度下降找到函数的局部最小值,可以采用与当前点的函数梯度(或近似梯度)的负值成比例的步骤。 如果采取的步骤与梯度的正值成比例,则接近该函数的局部最大值,被称为梯度上升。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

随机梯度下降技术

梯度下降(Gradient Descent)是遵循成本函数的梯度来最小化一个函数的过程。这个过程涉及到对成本形式以及其衍生形式的认知,使得我们可以从已知的给定点朝既定方向移动。比如向下朝最小值移动。 在机器学习中,我们可以利用随机梯度下降的方法来最小化训练模型中的误差,即每次迭代时完成一次评估和更新。 这种优化算法的工作原理是模型每看到一个训练实例,就对其作出预测,并重复迭代该过程到一定的次数。这个流程可以用于找出能导致训练数据最小误差的模型的系数。

过拟合技术

过拟合是指为了得到一致假设而使假设变得过度严格。避免过拟合是分类器设计中的一个核心任务。通常采用增大数据量和测试样本集的方法对分类器性能进行评价。

链式法则技术

是求复合函数导数的一个法则, 是微积分中最重要的法则之一。

动量技术

优化器的一种,是模拟物理里动量的概念,其在相关方向可以加速SGD,抑制振荡,从而加快收敛

批归一化技术

批归一化(Batch Normalization,BN)由谷歌于2015年提出,是一个深度神经网络训练的技巧,它不仅可以加快模型的收敛速度,还能在一定程度上缓解深层网络中的“梯度弥散”问题,从而使得训练深层网络模型更加容易和稳定。目前BN已经成为几乎所有卷积神经网络的标配技巧了。从字面意思看来Batch Normalization(简称BN)就是对每一批数据进行归一化。

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

推荐文章
暂无评论
暂无评论~