Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

Huan Wang 等作者Geek AI、刘晓坤编译einstein选自

模型的泛化能力仅和Hessian谱有关吗?

Salesforce 近日提出了一篇探究模型泛化能力的论文,他们在 PAC-Bayes 框架下将解的平滑性和模型的泛化能力联系在了一起,并从理论上证明了模型的泛化能力不仅和 Hessian 谱有关,和解的平滑性、参数的尺度以及训练样本的数量也有关。

经验表明,通过训练深度神经网络得到的不同局部最优值往往并不能以相同的方式泛化到未知数据集上,即使取得了相同的训练损失。近年来,这一问题日益受到经验和理论深度学习研究社区的关注。从理论的角度来看,大多数用来解释这种现象的泛化边界只考虑了最差的情况,因此忽略了不同解的泛化能力。在本文中,我们将重点探讨下面的问题:

解的局部「平滑性」和模型的泛化能力有何关系?

对 Hessian 二阶导数和泛化能力的经验观测结果

从较早的 Hochreiter 和 Schmidhuber 等人的论文《FLAT MINIMA》到最近的 Chaudhari《Entropy-SGD: Biasing Gradient Descent Into Wide Valleys》和 Keskar《On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima》等人的研究都认为,深度学习收敛解的局部曲率(或称「锐度」)与由此得到的分类器的泛化性质密切相关。「尖锐」的最小值(二阶导很大)会导致模型缺乏泛化能力,我们通过大量的 中的大和正的特征值来刻画它,在这一点损失函数最小。

Neyshabur 等人《Exploring Generalization in Deep Learning》指出,锐度本身可能并不足以决定泛化能力。他们认为,解的尺度(如 norm、margin)和锐度会同时影响泛化能力。为此,他们提出了一个基于 PAC-贝叶斯边界的「期望锐度」:

如下图所示,如果局部最小值是「平滑的」,那么对模型的干扰不会导致目标函数发生太大的变化。因此,它提供了一种测量局部最小值平滑度的方法。

如何扰动模型?

众所周知,在训练中给模型添加噪声有助于提高模型的泛化能力。然而,如何设置合适的噪声水平仍然是个有待解决的问题。目前大多数最先进的方法假设在所有的方向上都有相同程度的扰动,但是直觉告诉我们这样做可能并不合适。

举一个简单的例子来看,我们用 k=3 的高斯混合模型构建了一个小的二维样本集,并通过将标签以中值为阈值二值化。然后采用 5 层仅仅带有 w_1、w_2 两个参数的多层感知机进行预测,使用交叉熵作为损失函数。不同层的变量会被共享。在这里我们采用 sigmoid 作为激励函数。下图为使用 100 个样本训练出的模型的损失函数的变化情况示意图:

我们不妨观察一下示意图中用右侧竖条的橙色表示的最优点,我们会发现沿不同方向损失函数表面的平滑度完全不同。那么我们是否应该在各个方向上施加同样的干扰?也许不是。

我们认为需要沿着「扁平」的方向添加更多的噪声。具体而言,我们建议添加的均匀高斯噪声或截断的高斯噪声,它在每个坐标方向上的水平大致与下面的公式成正比

其中 ρ 是 Hessian 的 局部 Lipschitz 常数

模型的泛化性能度量

正如 Dinh 等人《Sharp Minima Can Generalize For Deep Nets》和 Neyshabur《Exploring Generalization in Deep Learning》等人讨论的那样,Hessian 谱本身可能并不足以确定模型的泛化能力。特别是对于使用 RELU 作为激励函数的多层感知机模型来说,我们可以重新设置模型的参数并且任意对 Hessian 谱进行放缩而不影响模型的预测性能和泛化能力。

通过使用一些近似方法,我们提出了一种名为「PACGen」的对于模型泛化能力的度量。该度量方法涉及到参数的尺度、Hessian 矩阵,以及通过 Hessian 的 Lipschitz 常数刻画的高阶平滑项。

其中,我们假设 L_hat(w) 在 w∗ 周围为局部的凸函数。

即使假设我们的度量方法中存在局部的保凸性,在实际应用中,我们可能需要在损失表面的任意点计算该度量。当时,我们简单将其视为 0。我们用不同的颜色代表损失函数表面的数值,将度量值绘制如下:

共享权值的带有 2 个参数的 5 层多层感知机的示意图。损失函数表面的各种颜色显示了泛化能力的度量值。较低的度量值代表更好的潜在泛化能力。底部平面上的颜色代表了同时考虑损失和泛化能力度量的近似的泛化边界。

如图所示,用绿色竖条表示的该度量方法的全局最优值是很高的。这表明,与红色竖条表示的局部最优值相比,它的泛化能力可能较弱。

另一方面,整体的期望损失由损失和泛化度量一同决定。为此,我们在图的底部绘制了一个彩色平面。投影平面上的颜色标示了一个近似的泛化边界,它同时考虑了损失和泛化能力度量。尽管红色竖条表示局部最优值稍微较高,但是与「尖锐」的全局最优值相比,其整体的泛化边界是相似的。

模型重建

假设该模型生成的是 y=f(x)=p(y|x),由于我们知道真实的分布为 p(x),我们可以重建联合分布 p(x,y)=p(x)p(y|x)。举例而言,我们可以首先从 p(x) 中抽样得到 x,然后使用该模型来预测 y_hat=f(x)。下文显示了从真实分布抽样得到的样本,以及在损失函数取「尖锐」的最小值和「平滑」的最小值时得到的分布。

从真实分布中抽样得到的样本。

损失函数取「尖锐」的最小值的情况下预测出的标签。

损失函数取「平滑」的最小值时预测出的标签。

尽管「尖锐」的最小值能更好地拟合标签,在「平滑」最小值处取得的预测函数似乎有更简单的决策边界

在真实数据集上得到的 PACGen

PACGen 度量是在不同的批尺寸和学习率的情况下通过一个 Pytorch 模型计算得到的。我们观察到了和 Keskar 等人相类似的结果:随着批尺寸的增加,测试损失和训练损失之间的差异逐渐增大。我们提出的度量也显示出了同样的趋势。

项目地址:https://github.com/pytorch/examples/tree/master/mnist

测试误差和训练误差对比示意图

泛化能力差距示意图,Ψγ=0.1,ϵ=0.1 时不同批尺寸下在 MNIST 数据集上多轮训练后函数的变化情况。随机梯度下降(SGD)被用作优化器,在所有情况下使用 0.1 作为学习率。随着批处理规模增大,Ψγ,ϵ(^L,w∗) 不断增加。该趋势和损失的真实差距的变化趋势是一致的。

测试损失和训练损失对比图

泛化能力差距示意图,Ψγ=0.1,ϵ=0.1 时不同批尺寸下在 CIFAR-10 数据集上多轮训练后函数的变化情况。随机梯度下降(SGD)被用作优化器,在所有情况下使用 0.1 作为学习率

当我们将批尺寸设置为 256 时,变化情况是相似的。随着学习率减小,测试损失和训练损失之间的差距增大,这与通过 Ψγ,ϵ(^L,w∗) 计算得到的变化趋势是一致的。

测试损失和训练损失对比图

泛化能力差距示意图,Ψγ=0.1,ϵ=0.1 时不同批尺寸下在 MNIST 数据集上多轮训练后函数的变化情况。随机梯度下降(SGD)被用作优化器,在所有情况下批处理规模被设置为 256。随着学习率减小,Ψγ,ϵ(^L,w∗) 不断增大。该趋势与损失的真实差距的变化趋势一致。

测试损失和训练损失对比图

泛化能力差距示意图,Ψγ=0.1,ϵ=0.1 时不同批尺寸下在 CIFAR-10 数据集上多轮训练后函数的变化情况。随机梯度下降(SGD)被用作优化器,在所有情况下批处理规模被设置为 256。

受扰动的优化

PAC-Bayes 边界说明,为了得到更好的泛化能力,我们应该对受扰动的损失进行优化而不是对真实损失进行优化,特别是在每个参数受扰动的程度是根据局部平滑属性设置的情况下。我们观察到,这种对受扰动的模型的优化在 CIFAR-10,CIFAR-100,以及 tiny Imagenet 等数据集上的模型性能得到了提升。

在 CIFAR-10 上使用 ADAM 作为优化器的实验结果

在 CIFAR-100 上使用 ADAM 作为优化器的实验结果

在 tiny Imagenet 上使用随机梯度下降(SGD)作为优化器的实验结果

结语

我们在 PAC-Bayes 框架下将解的平滑性和模型的泛化能力联系在了一起。我们从理论上证明了模型的泛化能力和 Hessian、解的平滑性、参数的尺度以及训练样本的数量是有关的。我们基于泛化边界提出了一种新的度量方法测试模型的泛化能力,并提出了一种新的扰动算法用来根据 Hessian 调整扰动水平。最后,我们从经验上说明了我们算法和一个正则化器的效果是类似的,都能在未知的数据上获得更好的泛化性能。要想了解包括关于证明和假设在内的更多细节,请参考我们论文的预印本。

  • 原文链接:https://einstein.ai/research/blog/identifying-generalization-properties-in-neural-networks

  • 论文地址:https://arxiv.org/abs/1809.07402

理论泛化Hessian
3
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

交叉熵技术

交叉熵(Cross Entropy)是Loss函数的一种(也称为损失函数或代价函数),用于描述模型预测值与真实值的差距大小

参数技术

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

收敛技术

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

学习率技术

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

损失函数技术

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

梯度下降技术

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

决策边界技术

在具有两类的统计分类问题中,决策边界或决策曲面是一个超曲面,它将底层的向量空间分成两组,每组一个。分类器会将决策边界一侧的所有点分为属于一个类,而另一侧属于另一个类。也即二元分类或多类别分类问题中,模型学到的类别之间的分界线。

随机梯度下降技术

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

目标函数技术

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

高斯混合模型技术

高斯混合模型(Gaussian Mixture Model,GMM)是单一高斯概率密度函数的延伸,就是用多个高斯概率密度函数(正态分布曲线)精确地量化变量分布,是将变量分布分解为若干基于高斯概率密度函数(正态分布曲线)分布的统计模型。

正则化技术

当模型的复杂度增大时,训练误差会逐渐减小并趋向于0;而测试误差会先减小,达到最小值后又增大。当选择的模型复杂度过大时,过拟合现象就会发生。这样,在学习时就要防止过拟合。进行最优模型的选择,即选择复杂度适当的模型,以达到使测试误差最小的学习目的。

批次技术

模型训练的一次迭代(即一次梯度更新)中使用的样本集。

深度神经网络技术

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

优化器技术

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

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