能否构成三角形的条件代码_【论文】一行代码发一篇ICML?

02b3ca41756d94d0b9b6f338f7442d34.png

这篇文章发自2020年的ICML,脑洞很大!一行代码??!

Flooding

fdf49d95a37c20ebe91f82e03bd82db2.png

上图可以大致描述整篇文章干了一件啥事。先看左边一列,是一个正常的训练过程,对于阶段A,随着training loss的降低,test loss也会 跟着降低;但是到阶段B后,我们继续在训练集上训练,会让test loss上升。

右边一列是本文提出的 flooding 方法,当training loss大于一个阈值(flood level)时,进行正常的梯度下降;当training loss低于阈值时,会反过来进行梯度上升,让training loss保持在一个阈值附近,让模型持续进行“random walk”,并期望模型能被优化到一个平坦的损失区域,这样发现test loss进行了double decent!

一个简单的理解是,这和early stop类的方法类似,防止参数被优化到一个不好的极小值出不来。

7d0683626fb536b98f1c1ce0f2c67ebe.png

本文也是十分的“嚣张”,直接在文章introduction部分贴出了pytorch代码,仅仅增加了一行代码,真是好气!整个的损失从

被改成了

8e050162de2df4e8de1b8dfb719fb0de.png

fc619ba98869a2519ab944d33e37afc8.png

接下来是自己的一些思考,假设我们的损失

一开始如由左图所示,横坐标是参数
,纵坐标是损失
,此时有两个极小值点(灰色三角形和红色三角形),首先试问哪一个极小值要好一些(这个后面再做分析)。

另外,假设虚线代表

,那么使用 flooding 方法相当于把低于阈值部分翻上来,二维的情况也类似。

可以发现,整个目标多了很多极小值,二维平面的情况则是多了一圈极小值,是否可以说右边的损失要比左边的损失更加“平坦”,然后泛化能力会越好。

8c1ed2dbebe35a42cb89f3b45a3ca8c5.png

接下来是我的一些分析,首先是前面提到的灰色三角形和红色三角形两个极小值点,分别由上述两个损失代替,右边的损失比左边的损失看起来更“平坦”。

我们从对抗样本的角度来理解,蓝色的笑脸代表正常被分对的样本,对抗样本是通过优化样本使得损失变大,从而让模型对该样本分错(黄色的难过脸)。

直观来看,越平坦的损失会让对抗样本的生成越困难(

越大),因此越平坦的损失会让模型对对抗扰动越鲁棒。

其实,一般的鲁棒性和泛化性也如此,一般的鲁棒性是指模型对样本进行一些诸如高斯模糊、椒盐噪声等等鲁棒。

换句话说,对样本进行一定的扰动(

),模型对扰动后样本的损失不要太大才行,越平坦的损失,一般鲁棒性也会越好。另一方面,泛化性也是一样,模型的预测一般满足相似的输入有相似的输出(假设损失对
光滑),也就是说,模型对样本学到的模式是某种特征左右的样本应该属于为某一类。

换句话说,对于一个未见过的样本

(黄色难过脸)和样本
(蓝色笑脸)属于相同类,模型能将其分对的必要条件是损失不要过大,则此时“平坦”的损失能够满足这一条件,且泛化性会越好。

最后我们再来从svm的角度来思考这个问题。对于一个线性可分的二分类问题,有无数条分类面能将其分开,而svm是去挑选能满足“最大间隔”的分类器。

从另一个角度来理解是,越平坦的损失,是不是能越尽可能的将不同类给分开,因为样本进行些许扰动,损失的变化不会太大,相当于进行细微扰动后的样本不会跑到分类面的另一边去!

上述的分析存在着一个问题是,横坐标应该是参数

,而我却一直把横坐标当作
,但其实认真想想,换成
也好像成立。因为神经网络参数
是乘积的形式,对参数
的细微变化能否等价于对样本
的细微变化!

感谢关注和点赞,欢迎分享给更多人~

文章转载自知乎@ Kid,已授权。

温馨提示:新智元主页新增“实用贴合集”,含AI技术教程、开源工具、书籍及视频下载等,欢迎大家参与。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开的技术细节和最佳实践,逐步培养起自己的项目开和问题解决能力。此外,在求职或创业过程中,具备跨平台开能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值