每天给你送来NLP技术干货!


paper: Raise a Child in Large Language Model: Towards Effective and Generalizable Fine-tuning

link: https://arxiv.org/pdf/2109.05687.pdf

去年让我印象最深刻的应该就是RDrop和这篇了,趁着晚上有时间,就来简单的说下这篇文章。

总体说一下

由于预训练模型的兴起,最近的研究很多投身于如何在不遗忘预训练模型的参数的同时,又能学到新的下游任务的finetune的方法。比如Henry Gouk提出的distance-based的方法,将finetune学习到的参数控制在原始预训练参数一个球形范围内;哈工大的Sanyuan Chen在EMNLP也提出了recall and learn的方法,即边预训练边学习下游任务的方法,并提出了RecAdam新的算法。

本文的方法采用了更为巧妙地方法,通过mask掉部分梯度来防止更新过度从而导致原始的预训练信息的遗忘,有点像在反向传播中使用前向传播的dropout的方法,巧也,妙也。并在实验中得出普遍比普通finetune方法还要高出1.5~8.6%的性能,也比前人改进的finetune方法高出0.6~1.3个点。

很好在自己的实验上进行落地,所以给大家推荐一下。

两种实验方法

如下图的算法所示,不要被算法吓到,很简单的,总结起来就是通过某个方法找到需要没有被mask的梯度节点(这里叫做child),然后生成0-1mask矩阵,和原来梯度乘就完成了更新与不更新的操作了。

那么如何选取哪些梯度不更新,作者提出两种方法:

  1. task-free方法,即随便mask梯度

  2. task-driven方法,即需要根据不同任务来决定mask哪些梯度

第一种为完全类似dropout一样的,随机选取部分梯度节点进行mask,不参与梯度更新,说点学术化点就是服从伯努利分布:

其中p_f为保留率,当其为1时就是所有都保留,都不mask,就是普通的finetune了。其中,当mask完后,要对保留下来的梯度进行放大1/p_f倍的操作(类似dropout吧~)。

虽然听起来这个随机的方法很简单,但值得注意的是,这个证明其有效的过程需要好好学学和看看的,这里说下最终结论:

这种随机mask的方法,有助于损失跳出局部最优,跳出鞍点,鼓励模型寻找更为平坦的局部最优面。

另一种方法为基于任务相关的mask方法,这里采用的FIM方法(Fisher Information Matrix),即对每一个梯度平方的期望:

求它在每一个样本的均值的梯度:

这个梯度越大,那么就表示这个梯度节点对该任务就格外重要,相反越不重要的就越要mask了。其中mask的比率就是选择topk的方法一样。

实验

两种方法和普通finetune方法在4种预训练模型中的性能比较:

上面为主要试验,但感觉为了论文的充分性吧,作者又讨论了该方法的领域泛化性

除此之外,还讨论了任务的泛化性:

都还是挺不错的。

以往的前沿方法对比,更能体现出其有效性:

最后还做了在目前比较火的低资源情况下的性能分析:

这篇文章还是很不错的,不光是方法,更是学习如何将一个十分简单的idea写成故事(8页论文)的能力。

学习道路长且艰,与君共勉。


下载一:中文版!学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套!  后台回复【五件套】
下载二:南大模式识别PPT  后台回复【南大模式识别】

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

整理不易,还望给个在看!

阿里+北大 | 在梯度上做简单mask竟有如此的神奇效果相关推荐

  1. 阿里云服务器ECS上部署简单的SSM项目

    一.引言(为什么选择Linux部署) 1.1 开发环境(dev) 外部用户无法访问,开发人员使用,版本变动很大 平时大家大多是在Windows或者Mac操作系统下去编写代码进行开发,在开发环境中安装大 ...

  2. 早就听闻阿里开源的 Arthas 在做 Java 应用诊断上十分牛逼,没失望

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 来源 | https://jitwxs.cn/a64edcb ...

  3. 阿里云OSS域名配置及简单上传

    目前开发系统,附件文件一般都会使用第三方的存储空间来保存,一方面是为了开发者提供便利,另一方可以减轻系统的访问压力,下面介绍一下阿里云的OSS的一些简单配置和使用. 一.阿里云OSS配置 前提:你需要 ...

  4. 在阿里云上做云防火墙引流

    详细教你再阿里云上做云防火墙引流 前言 准备操作 结束语 前言 云防火墙 属于软件形式,通过软件算法,这就方便了很多站长和服务器运维人员.提供统一的互联网边界.内网VPC边界.主机边界流量管控与安全防 ...

  5. 2010年史上最简单的做母盘教程

    2010年史上最简单的做母盘教程 辛苦了两个小时才把教程写完....写得不好大家多多包涵 其实做母盘是一件十分简单的事,只要大家敢去试就能成功的,这教程只给小白看的,老鸟路过指点一下. 本人是珠海信佑 ...

  6. 做玫瑰花的方法 用纸_史上最简单的纸玫瑰花的折法教程教你用纸编法做玫瑰花...

    史上最简单的纸玫瑰花的折法教程教你用纸编法做玫瑰花 玫瑰花的折法制作教程一直以来都是不少同学比较喜欢的手工制作教程类型,无论是折纸玫瑰花的制作还是其他手工类型纸玫瑰花的制作,总是能够满足大家响应的制作 ...

  7. 基于阿里云的OSS上传从简单实现 到项目业务应用(一)入门了解篇

    使用阿里云OSS 功能的准备工作 环境准备 环境要求 使用Java 1.8及以上版本. 查看版本 执行命令java -version查看Java版本. 安装方法一: 如果使用Maven 安装阿里云OS ...

  8. 在图数据上做机器学习,应该从哪个点切入?

    作者 | David Mack 编译 | ronghuaiyang 来源 | AI公园(ID:AI_Paradise) [导读]很多公司和机构都在使用图数据,想在图上做机器学习但不知从哪里开始做,希望 ...

  9. 基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器——《干饭聊天室》

    基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器--<干饭聊天室> 在这里首先感谢前端小伙伴飞鸟 前端技术请看一款基于React.C++,使用TCP/HTTP协 ...

  10. python自动源码_谷歌推出Tangent开源库,在Python源代码上做自动微分

    原标题:谷歌推出Tangent开源库,在Python源代码上做自动微分 李林 编译自 Google Research Blog 谷歌今天推出了一个新的开源Python自动微分库:Tangent. 和现 ...

最新文章

  1. 2018.09.24-2018.09.30
  2. 遥感计算机分类实验的难点,8-遥感实验.doc
  3. 欢迎您参加_ADT技术培训营
  4. python-base64编码与解码
  5. mysql8 安装_MySQL8.x安装使用
  6. Spring : Spring Aop 获取增强(通知)
  7. AndroidStudio配置gradle,让App自动签名
  8. java 处理时间的类_详解JAVA 时间处理相关类
  9. 机器学习(统计学习方法)基础知识
  10. Oracle字符集及其查看和修改
  11. MongoDB学习笔记
  12. 双目视觉摄像机的参数标定参考坐标系介绍
  13. 1-3 Grammar
  14. 金彩教育:拼多多运营的方法有哪些
  15. Python二进制内容转为中文(二进制转中文)
  16. nyoj1328派队方案
  17. 深度 | 5分钟读懂阿里零售通智慧供应链平台
  18. 2022年物联网统计数据
  19. 最近公共祖先(LCA)Tarjan
  20. super关键字什么时候使用?super的适用场景是?

热门文章

  1. axios发post请求,后端接收不到参数的问题
  2. 优秀的基于VUE移动端UI框架合集
  3. Mybatis-Dao层开发之Mapper接口
  4. 【JVM】上帝视角看JVM内存模型,分而治之论各模块详情
  5. git的丰富实用经验
  6. fiddler修改客户端发出去的请求
  7. 用Scheme写Scheme编译器(三):一元运算
  8. T-sql语句查询执行顺序
  9. Windows8 Metro应用开发之C#(3)- 数据控件ListView、GridView、FlipView
  10. PETSHOP模式IDAL,SQLSERVERDAL,存储过程以及模型类代码的生成工具