清华大学出品:罚梯度范数提高深度学习模型泛化性

Posted 鬼道2022

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了清华大学出品:罚梯度范数提高深度学习模型泛化性相关的知识,希望对你有一定的参考价值。

1 引言

神经网络结构简单,训练样本量不足,则会导致训练出来的模型分类精度不高;神经网络结构复杂,训练样本量过大,则又会导致模型过拟合,所以如何训练神经网络提高模型的泛化性是人工智能领域一个非常核心的问题。最近读到了一篇与该问题相关的文章,论文中作者在训练过程中通过在损失函数中增加正则化项梯度范数的约束从而来提高深度学习模型的泛化性。作者从原理和实验两方面分别对论文中的方法进行了详细地阐述和验证。 L i p s c h i t z \\mathrmLipschitz Lipschitz连续是对深度学习进行理论分析中非常重要且常见的数学工具,该论文就是以神经网络损失函数 是 L i p s c h i t z 是\\mathrmLipschitz Lipschitz连续为出发点进行数学推导。为了方便读者能够更流畅地欣赏论文作者漂亮的数学证明思路和过程,本文对于论文中没有展开数学证明细节进行了补充。

论文链接:https://arxiv.org/abs/2202.03599

2 L i p s c h i z \\mathrmLipschiz Lipschiz连续

给定一个训练数据集 S = ( x i , y i ) i = 0 n \\mathcalS=\\(x_i,y_i)\\_i=0^n S=(xi,yi)i=0n服从分布 D \\mathcalD D,一个带有参数 θ ∈ Θ \\theta \\in \\Theta θΘ的神经网络 f ( ⋅ ; θ ) f(\\cdot;\\theta) f(;θ),损失函数为 L S = 1 N ∑ i = 1 N l ( y i , y i , θ ^ ) L_\\mathcalS=\\frac1N\\sum\\limits_i=1^N l(\\haty_i,y_i ,\\theta) LS=N1i=1Nl(yi,yi,θ^)当需要对损失函数中的梯度范数进行约束时,则有如下损失函数 L ( θ ) = L S + λ ⋅ ∥ ∇ θ L S ( θ ) ∥ p L(\\theta)=L_\\mathcalS+\\lambda \\cdot \\|\\nabla_\\theta L_\\mathcalS(\\theta)\\|_p L(θ)=LS+λθLS(θ)p其中 ∥ ⋅ ∥ p \\|\\cdot \\|_p p表示 p p p范数, λ ∈ R + \\lambda\\in \\mathbbR^+ λR+为梯度惩罚系数。一般情况下,损失函数引入梯度的正则化项会使得其在优化过程中在局部有更小的 L i p s c h i t z \\mathrmLipschitz Lipschitz常数, L i p s c h i t z \\mathrmLipschitz Lipschitz常数越小,就意味着损失函数就越平滑,平损失函数平滑区域易于损失函数优化权重参数。进而会使得训练出来的深度学习模型有更好的泛化性。
 深度学习中一个非常重要而且常见的概念就是 L i p s c h i t z \\mathrmLipschitz Lipschitz连续。给定一个空间 Ω ⊂ R n \\Omega \\subset \\mathbbR^n ΩRn,对于函数 h : Ω → R m h:\\Omega \\rightarrow \\mathbbR^m h:ΩRm,如果存在一个常数 K K K,对于 ∀ θ 1 , θ 2 ∈ Ω \\forall \\theta_1,\\theta_2 \\in \\Omega θ1,θ2Ω满足以下条件则称 L i p s c h i t z \\mathrmLipschitz Lipschitz连续 ∥ h ( θ 1 ) − h ( θ 2 ) ∥ 2 ≤ K ⋅ ∥ θ 1 − θ 2 ∥ 2 \\|h(\\theta_1)-h(\\theta_2)\\|_2 \\le K \\cdot \\|\\theta_1 - \\theta_2\\|_2 h(θ1)h(θ2)2Kθ1θ22其中 K K K表示的是 L i p s c h i t z \\mathrmLipschitz Lipschitz常数。如果对于参数空间 Θ ⊂ Ω \\Theta \\subset \\Omega ΘΩ,如果 Θ \\Theta Θ有一个邻域 A \\mathcalA A,且 h ∣ A h|_\\mathcalA hA L i p s c h i t z \\mathrmLipschitz Lipschitz连续,则称 h h h是局部 L i p s c h i t z \\mathrmLipschitz Lipschitz连续。直观来看, L i p s c h i t z \\mathrmLipschitz Lipschitz常数描述的是输出关于输入变化速率的一个上界。对于一个小的 L i p s c h i t z \\mathrmLipschitz Lipschitz参数,在邻域 A \\mathcalA A中给定任意两个点,它们输出的改变被限制在一个小的范围里。
 根据微分中值定理,给定一个最小值点 θ i \\theta_i θi,对于任意点 ∀ θ i ′ ∈ A \\forall \\theta_i^\\prime\\in \\mathcalA θiA,则有如下公式成立 ∥ ∣ L ( θ i ′ ) − L ( θ i ) ∥ 2 = ∥ ∇ L ( ζ ) ( θ i ′ − θ i ) ∥ 2 \\||L(\\theta_i^\\prime)-L(\\theta_i)\\|_2 = \\|\\nabla L (\\zeta) (\\theta_i^\\prime-\\theta_i)\\|_2 L(θi)L(θi)2=L(ζ)(θiθi)2其中 ζ = c θ i + ( 1 − c ) θ i ′ , c ∈ [ 0 , 1 ] \\zeta=c \\theta_i + (1-c)\\theta^\\prime_i, c \\in [0,1] ζ=cθi+(1c)θi,c[0,1],根据 C a u c h y - S c h w a r z \\mathrmCauchy\\text-Schwarz Cauchy-Schwarz不等式可知 ∥ ∣ L ( θ i ′ ) − L ( θ i ) ∥ 2 ≤ ∥ ∇ L ( ζ ) ∥ 2 ∥ ( θ

以上是关于清华大学出品:罚梯度范数提高深度学习模型泛化性的主要内容,如果未能解决你的问题,请参考以下文章

深度学习防止过拟合的方法

如何提高深度学习的泛化能力?

大疆笔试——机器学习提前批

Python机器学习之梯度提升树

一文浅谈深度学习泛化能力

DAY8(机器学习--正则化总结)