关注公众号,发现CV技术之美

1 引言

神经网络结构简单,训练样本量不足,则会导致训练出来的模型分类精度不高;神经网络结构复杂,训练样本量过大,则又会导致模型过拟合,所以如何训练神经网络提高模型的泛化性是人工智能领域一个非常核心的问题。

最近读到了一篇与该问题相关的文章,论文中作者在训练过程中通过在损失函数中增加正则化项梯度范数的约束从而来提高深度学习模型的泛化性。作者从原理和实验两方面分别对论文中的方法进行了详细地阐述和验证。连续是对深度学习进行理论分析中非常重要且常见的数学工具,该论文就是以神经网络损失函数是连续为出发点进行数学推导。

为了方便读者能够更流畅地欣赏论文作者漂亮的数学证明思路和过程,本文对于论文中没有展开的数学证明细节进行了补充。

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

2 Lipschiz 连续

给定一个训练数据集服从分布,一个带有参数的神经网络,损失函数为

当需要对损失函数中的梯度范数进行约束时,则有如下损失函数

其中表示范数,为梯度惩罚系数。一般情况下,损失函数引入梯度的正则化项会使得其在优化过程中在局部有更小的常数,常数越小,就意味着损失函数就越平滑,平损失函数平滑区域易于损失函数优化权重参数。进而会使得训练出来的深度学习模型有更好的泛化性。

深度学习中一个非常重要而且常见的概念就是连续。给定一个空间,对于函数,如果存在一个常数,对于满足以下条件则称连续

其中表示的是常数。如果对于参数空间,如果有一个邻域,且是连续,则称是局部连续。直观来看,常数描述的是输出关于输入变化速率的一个上界。对于一个小的参数,在邻域中给定任意两个点,它们输出的改变被限制在一个小的范围里。

根据微分中值定理,给定一个最小值点,对于任意点,则有如下公式成立

402 Payment Required

其中,根据不等式可知当时,相应的常数接近。因此可以通过减小的数值使得模型能够更平滑的收敛。

3 论文方法

对带有梯度范数约束的损失函数求梯度可得

402 Payment Required

在本文中,作者令,此时则有如下推导过程

将该结果带入到梯度范数约束的损失函数中,则有以下公式

可以发现,以上公式中涉及到矩阵的计算,在深度学习中,计算参数的矩阵会带来高昂的计算成本,所以需要用到一些近似的方法。作者将损失函数进行泰勒展开,其中令,则有

402 Payment Required

进而则有

其中令,表示一个小的数值,表示一个向量,带入上式则有

如果令,则有

402 Payment Required

综上所述,经过整理可得

402 Payment Required

其中,称为平衡系数,取值范围为。作者为了避免在近似计算梯度时,以上公式中的第二项链式法则求梯度需要计算矩阵,做了以下的近似则有

402 Payment Required

以下算法流程图对以上论文中损失函数的原理进行

4 实验结果

下表表示的是在和这两个数据集中不同网络结构在标准训练,和本文的梯度约束这三种训练方法之间的测试错误率的比较。可以很直观的发现,本文提出的方法在绝大多数情况下测试错误率都是最低的,这也从侧面验证了经过论文方法的训练可以提高模型的泛化性。

论文作者也在当前非常热门的网络结构进行了实验。下表表示的是在和这两个数据集中不同网络结构在标准训练,和本文的梯度约束这三种训练方法之间的测试错误率的比较。

同理也可以发现本文提出的方法在所有情况下测试错误率都是最低的,这说明本文的方法也可以提到模型的泛化性。

END

欢迎加入「深度学习交流群

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

  1. 提升深度学习模型泛化性的方法

    一个好的深度学习模型的目标是将训练数据很好地推广到问题领域的任何数据.这使我们可以对模型从未见过的数据进行将来的预测. 首先,当模型泛化性差的时候,我们需要找到其原因,当训练集能够很好地拟合,但是测试 ...

  2. 4个提高深度学习模型性能的技巧

    点击上方"AI遇见机器学习",选择"星标"公众号 原创干货,第一时间送达 深度学习是一个广阔的领域,但我们大多数人在构建模型时都面临一些共同的难题 在这里,我们 ...

  3. 深度学习100问之提高深度学习模型训练效果(调参经验)

    声明 1)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除. 2)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢 ...

  4. 如何提高深度学习模型的可解释性?极致的数据透出与多维可视化实战详解

    小叽导读:深度网络对机器学习研究和应用领域产生了巨大的影响,与此同时却无法很清晰地解释神经网络的来龙去脉.迄今为止,深度学习不够透明,神经网络整体看来仍然是一个黑箱.因此,人们一直致力于更透彻地去理解 ...

  5. 如何提高深度学习模型的可解释性?极致的数据透出与多维可视化实战详解...

    小叽导读:深度网络对机器学习研究和应用领域产生了巨大的影响,与此同时却无法很清晰地解释神经网络的来龙去脉.迄今为止,深度学习不够透明,神经网络整体看来仍然是一个黑箱.因此,人们一直致力于更透彻地去理解 ...

  6. 评估方法提高深度学习模型泛化能力

    三种经典的评估方法提高模型泛化能力 ①留出验证:评估模型时,将数据划分为训练集.验证集.测试集.(比较适合大数据集) 在训练数据上训练模型,在验证数据上评估模型,最后在测试数据上测试最佳参数的模型. ...

  7. 深度学习模型可解释性的研究进展_化盈盈

    写在前面: 这篇文献提出的方法对我的工作帮助不是太大,但可以扩展可解释性的理解. 1 摘要 深度学习在很多人工智能应用领域中取得成功的关键原因在于, 通过复杂的深层网络模型从海量数据中学习丰富的知识. ...

  8. 模型加速:深度学习模型的硬件加速:NVIDIAT240

    作者:禅与计算机程序设计艺术 模型加速:深度学习模型的硬件加速:NVIDIA T240 在当前深度学习模型的规模和复杂度不断增加的情况下,硬件加速已经成为一个重要的技术手段.本文将介绍NVIDIA T ...

  9. 在深度学习模型的优化上,梯度下降并非唯一的选择

    如果你是一名机器学习从业者,一定不会对基于梯度下降的优化方法感到陌生.对于很多人来说,有了 SGD,Adam,Admm 等算法的开源实现,似乎自己并不用再过多关注优化求解的细节.然而在模型的优化上,梯 ...

最新文章

  1. pycharm安装tensorflow
  2. RabbitMQ的应用场景以及基本原理介绍
  3. jquery.validate.js插件的使用方法
  4. 玩! 框架+ Google Guice
  5. 看,他们都转行做web前端工程师了
  6. C++/CLI思辨录之再谈继承
  7. [转]# python中init和new的区别
  8. 关于以主机命名的网站集
  9. 实现gabor filter的滤波
  10. eXtremeComponents指南
  11. 在开发板显示24位的bmp格式图片
  12. 2019年5月个人总结:大家都在跨界,原谅自己的懈怠
  13. Cocos2d-x制作跨平台太空射击游戏
  14. Wordpress采集开心版,免费Wordpress采集发布伪原创
  15. JSP+Servlet技术实现分页 首页 下一页 每一页显示10条页码 下一页 尾页 第页/共页 (利用PageBean实现)
  16. 零知识证明(zero-knowledge proofs)
  17. Java线程的死锁和活锁
  18. 《笨方法学习python3》练习12: Prompting People
  19. cocos creator游戏发布和部署-HTML5篇
  20. 算法笔记——常见DP问题汇总

热门文章

  1. HTTP状态码及含义
  2. 利用LDA主题模型的生成过程仿真数据
  3. OpenCV--cvScaler颜色赋值
  4. Unity 4 3 制作一个2D横版射击游戏
  5. Git常用命令——远程操作
  6. [shell][001] [advanced]定制化自己的shell命令
  7. python动态与静态语言_静态语言和动态语言的区别
  8. 80C51汇编语言有哪几条常用伪指令,单片微机原理与接口技术答案(宋跃版)
  9. python编程能有什么用_揭秘python都能做什么?
  10. zabbix邮箱报警设置