神经网络结构简单,训练样本量不足,则会导致训练出来的模型分类精度不高;神经网络结构复杂,训练样本量过大,则又会导致模型过拟合,所以如何训练神经网络提高模型的泛化性是人工智能领域一个非常核心的问题。
最近读到了一篇与该问题相关的文章,论文中作者在训练过程中通过在损失函数中增加正则化项梯度范数的约束从而来提高深度学习模型的泛化性。作者从原理和实验两方面分别对论文中的方法进行了详细地阐述和验证。连续是对深度学习进行理论分析中非常重要且常见的数学工具,该论文就是以神经网络损失函数是连续为出发点进行数学推导。
为了方便读者能够更流畅地欣赏论文作者漂亮的数学证明思路和过程,本文对于论文中没有展开的数学证明细节进行了补充。
论文链接:https://arxiv.org/abs/2202.03599
给定一个训练数据集服从分布,一个带有参数的神经网络,损失函数为
当需要对损失函数中的梯度范数进行约束时,则有如下损失函数其中表示范数,为梯度惩罚系数。一般情况下,损失函数引入梯度的正则化项会使得其在优化过程中在局部有更小的常数,常数越小,就意味着损失函数就越平滑,平损失函数平滑区域易于损失函数优化权重参数。进而会使得训练出来的深度学习模型有更好的泛化性。深度学习中一个非常重要而且常见的概念就是连续。给定一个空间,对于函数,如果存在一个常数,对于满足以下条件则称连续
其中表示的是常数。如果对于参数空间,如果有一个邻域,且是连续,则称是局部连续。直观来看,常数描述的是输出关于输入变化速率的一个上界。对于一个小的参数,在邻域中给定任意两个点,它们输出的改变被限制在一个小的范围里。根据微分中值定理,给定一个最小值点,对于任意点,则有如下公式成立
其中,根据不等式可知当时,相应的常数接近。因此可以通过减小的数值使得模型能够更平滑的收敛。
将该结果带入到梯度范数约束的损失函数中,则有以下公式
可以发现,以上公式中涉及到矩阵的计算,在深度学习中,计算参数的矩阵会带来高昂的计算成本,所以需要用到一些近似的方法。作者将损失函数进行泰勒展开,其中令,则有
其中令,表示一个小的数值,表示一个向量,带入上式则有
综上所述,经过整理可得
其中,称为平衡系数,取值范围为。作者为了避免在近似计算梯度时,以上公式中的第二项链式法则求梯度需要计算矩阵,做了以下的近似则有下表表示的是在和这两个数据集中不同网络结构在标准训练,和本文的梯度约束这三种训练方法之间的测试错误率的比较。可以很直观的发现,本文提出的方法在绝大多数情况下测试错误率都是最低的,这也从侧面验证了经过论文方法的训练可以提高模型的泛化性。论文作者也在当前非常热门的网络结构进行了实验。下表表示的是在和这两个数据集中不同网络结构在标准训练,和本文的梯度约束这三种训练方法之间的测试错误率的比较。同理也可以发现本文提出的方法在所有情况下测试错误率都是最低的,这说明本文的方法也可以提到模型的泛化性。