ICML2020 | 一行代码就能实现的测试集上分技巧

星标/置顶小屋,带你解锁

最萌最前沿的NLP、搜索与推荐技术

文 | 苏剑林

编 | 夕小瑶


在训练模型的时候,我们需要损失函数一直训练到0吗?显然不用。一般来说,我们是用训练集来训练模型,但希望的是验证集的损失越小越好,而正常来说训练集的损失降低到一定值后,验证集的损失就会开始上升(即过拟合),因此没必要把训练集的损失降低到0。

为了对抗这种过拟合现象,提高模型的测试集表现(即泛化能力),一种很自然的想法是提前终止(early stopping),也就是当观测到模型的验证集表现不降反升时,果断停止训练。这也是如今大模型跑小数据时的最常用做法。

既然如此,在模型训练loss已经到达某个阈值之后,我们可不可以做点别的事情来继续提升模型的测试集性能呢?一篇发表于机器学习顶会ICML2020上的论文《Do We Need Zero Training Loss After Achieving Zero Training Error?》[1]回答了这个问题。

不过这篇论文的回答也仅局限在“是什么”这个层面上,并没很好地描述“为什么”,另外看了知乎上kid丶[2]大佬的解读,也没找到自己想要的答案。因此自己分析了一下,记录在此。

思路描述

论文提供的解决方案非常简单,假设原来的损失函数是,现在改为

其中是预先设定的阈值。当,这时候就是执行普通的梯度下降;而,注意到损失函数变号了,所以这时候是梯度上升。因此,总的来说就是以为阈值,低于阈值时反而希望损失函数变大。论文把这个改动称为“Flooding”。

这样做有什么效果呢?论文显示,训练集的损失函数经过这样处理后,验证集的损失能出现“二次下降(Double Descent)”,如下图。简单来说就是最终的验证集效果可能更好些。

左图:不加Flooding的训练示意图;右图:加了Flooding的训练示意图

效果

从上图可以看出来这个方法的理想很丰满,那么实际表现如何呢?

作者这里在MNIST、CIFAR等众多CV领域的benchmark上进行了实验,且如下图所示

图中中间一栏是没有加flooding的结果(early stopping和weight decay的四种排列组合),右边一栏是加了flooding的结果(四种排列组合的基础上都加上flooding)。可以看到加了flooding后,大部分情况下模型都能比之前有更好的测试集表现。

个人分析

如何解释这个方法的有效性呢?可以想象,当损失函数达到之后,训练流程大概就是在交替执行梯度下降和梯度上升。直观想的话,感觉一步上升一步下降,似乎刚好抵消了。事实真的如此吗?我们来算一下看看。假设先下降一步后上升一步,学习率为,那么:

我们有

(滑动查看完整公式)

近似那一步是使用了泰勒展式对损失函数进行近似展开,最终的结果就是相当于损失函数为梯度惩罚、学习率为的梯度下降。更妙的是,改为“先上升再下降”,其表达式依然是一样的(这不禁让我想起“先升价10%再降价10%”和“先降价10%再升价10%”的故事)。因此,平均而言,Flooding对损失函数的改动,相当于在保证了损失函数足够小之后去最小化,也就是推动参数往更平稳的区域走,这通常能提供提高泛化性能(更好地抵抗扰动),因此一定程度上就能解释Flooding其作用的原因了。

本质上来讲,这跟往参数里边加入随机扰动、对抗训练等也没什么差别,只不过这里是保证了损失足够小后再加扰动。读者可以参考《泛化性乱弹:从随机噪声、梯度惩罚到虚拟对抗训练》[3]了解相关内容,也可以参考“圣经”《深度学习》第二部分第七章的“正则化”一节。

方法局限性

虽然这个方法看起来还挺work,但是不能忽视的一个细节是,作者在做上面表格里的每组flooding的实验时,都对flooding的超参b调节了20组(从0.01~0.20),如下

这在数据规模很小时实验代价还好,但单次实验代价较高时,可能就不那么实用了。

继续脑洞

有心使用这个方法的读者可能会纠结于的选择或调超参的实验代价,不过笔者倒是有另外一个脑洞:无非就是决定什么时候开始交替训练罢了,如果从一开始就用不同的学习率进行交替训练呢?也就是自始至终都执行

其中,这样我们就把去掉了(当然引入了的选择,天下没免费午餐)。重复上述近似展开,我们就得到

(滑动查看完整公式)

这就相当于自始至终都在用学习率来优化损失函数了,也就是说一开始就把梯度惩罚给加了进去。这样能提升模型的泛化性能吗?笔者简单试了一下,有些情况下会有轻微的提升,基本上都不会有负面影响,总的来说不如自己直接加梯度惩罚好,所以不建议这样做。

文章小结

本文简单介绍了ICML2020一篇论文提出的“到一定程度后就梯度上升”的训练策略,并给出了自己的推导和理解,结果显示它相当于对参数的梯度惩罚,而梯度惩罚也是常见的正则化手段之一。



 文末福利 

后台回复关键词入群
加入卖萌屋NLP/IR/Rec与求职讨论群
有顶会审稿人、大厂研究员、知乎大V和妹纸
等你来撩哦~

 关注星标 

带你解锁最前沿的NLP、搜索与推荐技术

参考文献

[1] Do We Need Zero Training Loss After Achieving Zero Training Error?: https://arxiv.org/abs/2002.08709

[2] kid丶: https://zhuanlan.zhihu.com/p/163676138

[3] 泛化性乱弹:从随机噪声、梯度惩罚到虚拟对抗训练: https://kexue.fm/archives/7466

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis系列教程(七):Redis并发竞争key的解决方案详解

Redis高并发的问题 Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题: 高并发架构系列:Redis缓存和MySQL数据一致性方案详解 如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难…

技术动态 | 北京大学计算机所邹磊教授研究组开源面向 RDF 知识图谱的自然语言问答系统 gAnswer...

项目网站: http://ganswer.gstore-pku.com/代码地址: https://github.com/pkumod/gAnswerOpenKG发布地址: http://openkg.cn/tool/ganswer研究组主页: http://mod.icst.pku.edu.cn一、KBQA 任务简介基于知识库的自然语言问答 (Question Answering over Knowledge Base, KBQA) 主…

POJ 2287 田忌赛马(贪心)

文章目录1. 题目1.1 题目链接1.2 题目大意1.3 解题思路2. Accepted 代码1. 题目 1.1 题目链接 http://poj.org/problem?id2287 1.2 题目大意 双方各有n匹战斗力各异的马,分别派出来PK,假设对方先出牌,我方后出,求我方最多能胜…

Netty的实现原理、特点与优势、以及适用场景

高并发编程系列 高并发编程系列:NIO、BIO、AIO的区别,及NIO的应用和框架选型 高并发编程系列:ConcurrentHashMap的实现原理(JDK1.7和JDK1.8) 高并发编程系列:CountDownLatch、Semaphore等4大并发工具类详解 高并发编程系列&…

拒绝无脑吹!从ACL20看预训练缺陷

星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 舒意恒、兔子酱以 BERT 为代表作的预训练模型的研究热度一直很高,到 0202 年了,预训练的研究依旧层出不穷,而且 ACL 2020 Best Paper 荣誉提名也选择了这一主题的研究…

论文浅尝 | AMUSE: 基于 RDF 数据的多语言问答语义解析方法

来源:ISWC 2017链接:https://link.springer.com/content/pdf/10.1007%2F978-3-319-68288-4.pdf本文主要关注基于RDF数据的多语言问答任务中,对不同语言问句的语义分析工作。作者提出一种基于DUDES(Dependency-based Underspecified Discourse…

贪心应用--汽车加油次数问题

文章目录1. 问题描述2. 解题思路3. 实现代码4. 测试结果1. 问题描述 已知汽车的油箱额定里程,到目的地的路途中各加油站距起点的距离,求如何加油,让加油的次数最少。 2. 解题思路 每次出发前检查下一个加油站有多远,车子能不能…

最全多线程经典面试题和答案

Java实现线程有哪几种方式? 1、继承Thread类实现多线程2、实现Runnable接口方式实现多线程3、使用ExecutorService、Callable、Future实现有返回结果的多线程 多线程同步有哪几种方法? Synchronized关键字,Lock锁实现,分布式锁等…

论文浅尝 | Aligning Knowledge Base and Document Embedding Models

本文是我们于苏黎世大学合作的关注与知识图谱和文本对齐的论文,发表于ISWC2018.文本和知识图谱都包含了丰富的信息, 其中知识图谱用结构化的三元组表示信息,文本用自由文本形式表示信息,信息表示的差异给知识图谱和文本融合对齐造成了困难&am…

学会提问的BERT:端到端地从篇章中构建问答对

星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 苏剑林机器阅读理解任务,相比不少读者都有所了解了,简单来说就是从给定篇章中寻找给定问题的答案,即“篇章 问题 → 答案”这样的流程,笔者之前也写过一些…

玩转算法面试-第四章查找值之leetcod相关笔记

查找问题 4-1,2 两类查找问题 1 查找有无:set 2 查找对应关系:map 常见的四种操作: insert, find, erase, change(map) 例题 leetcode 349 :给定两个数组,…

分治算法(Divide Conquer)

文章目录1. 分治算法思想2. 应用举例2.1 逆序度3. 分治思想处理海量数据1. 分治算法思想 分治算法的核心思想就是,分而治之,将原问题划分成n个规模较小,并且结构与原问题相似的子问题,递归地解决这些子问题,然后再合并…

史上最全Java多线程面试60题,含答案大赠送!

【BAT必考系列!多线程60题】 多线程有什么用? 线程和进程的区别是什么? ava实现线程有哪几种方式? 启动线程方法start()和run()有什么区别? 怎么终止一个线程&#…

论文浅尝 | Interaction Embeddings for Prediction and Explanation

本文是我们与苏黎世大学合作的工作,将发表于WSDM2019,这篇工作在知识图谱的表示学习中考虑了实体和关系的交叉交互,并且从预测准确性和可解释性两个方面评估了表示学习结果的好坏。给定知识图谱和一个要预测的三元组的头实体和关系&#xff0…

商汤科技-数据运维工程师-提前批笔试题目汇总

2019年8月19日 问答题1:缺失值数据预处理有哪些方法?https://juejin.im/post/5b5c4e6c6fb9a04f90791e0c 处理缺失值的方法如下:删除记录,数据填补和不处理。主要以数据填补为主。 1 删除记录:该种方法在样本数据量十分…

秋招视频攻略!13个offer,8家SSP的Q神谈算法岗秋招技巧

星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术大家还记得几个月前卖萌屋Q神推送的那期《13个offer,8家SSP,谈谈我的秋招经验》吗?据说Q神掌握了影分身的话,一毕业就能年薪600万,咳咳。。。ps&…

分治应用--最近点对问题 POJ 3714

文章目录1. 问题描述2. 解题思路3. 实现代码4. POJ 37141. 问题描述 二维平面上有n个点,如何快速计算出两个距离最近的点对? 2. 解题思路 暴力做法是,每个点与其他点去计算距离,取最小的出来,复杂度O(n2)采用分治算…

Java多线程系列(十):源码剖析AQS的实现原理

在并发编程领域,AQS号称是并发同步组件的基石,很多并发同步组件都是基于AQS实现,所以想掌握好高并发编程,你需要掌握好AQS。 本篇主要通过对AQS的实现原理、数据模型、资源共享方式、获取锁的过程,让你对AQS的整体设计…

玩转二算法课的笔记-第一章

1 问题:对一组数据进行排序 回答:快速排序算法o(NLOGN),错误。 关键词:思考 应该问面试官,这组数据有什么样的特征? 比如;有没有可能包含大量重复的元素? 如果有这个可能的话,三路快…

微软亚洲研究院NLC组招聘实习生!与一线研究员共探NLP前沿与落地!

星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术MSRA-NLC组招人啦!微软亚洲研究院(MSRA)自然语言计算组(NLC)招收长期实习生一名,与一线研究员共同进行自然语言处理领域的科研项目和落地…