1 前言

自从BERT(Devlin et al., 2018)刷榜各大NLP任务后,预训练+微调成了新的范式。可是,微调对于BERT的影响仍然是知之甚少。今天带来的这篇论文(Zhou et al., 2021)用分类器和DIRECTPROB从以下两方面介绍了微调对于BERT的影响:

  1. 为何微调能够提升模型的表现?

  2. 微调是如何改变用以编码词句的空间结构?

相信你一定会好好看完全文的!( 直接想看论文结论的同学可以滑到末尾看总结!

2 先验知识

2.1 DIRECTPROB

这个工具会对点进行聚类并且返回分类器要通过的区域。见图1的右图,几个点被线所连,代表一个cluster,灰色区域是分类器必须通过的。

图1. 左图为二分类问题示意,虚线代表决策边界。右图为经过DIRECTPROB划分的结果。

由此,有些量要介绍一下:

  • cluster的数目:若cluster与标签的数量一致,则说明是可被线性分割的;若cluster的数目大于标签,就如图1的右图,则说明至少有一个类的一些样本无法划分进同一个cluster,需要用非线性分类器隔开

  • cluster之间的距离:通过跟踪这个量可以一定程度上了解空间结构的变化情况,本文作者通过训练SVM找到最大边界的分类器,而cluster之间的距离则等于边界的两倍

  • 空间相似性:直觉上讲,如果在不同模型的表示中,cluster之间的相对距离差不多的话,说明这两个模型的表示也是类似的。因而,作者构建了为不同模型都定制一个距离向量,元素是clusters间的距离,那么元素个数为,为cluster的数目,可以将cluster类比为无向连通图中的节点,元素个数即为边数。对于同一个模型,不同的数据集;不同的模型,同一个数据集或是不同的模型,不同的数据集,都可用皮尔逊相关系数来计算不同距离向量之间的相似度

  • 训练细节:对于所有BERT模型,只选取最后一层用以分类。分类器是两层的神经网络。

2.2 任务选定

  • 词性标注(POS):这个可以衡量一个模型在粗粒度语法分类的表现,数据集是TreeBank

  • 依赖关系(DEP):预测两个token之间的语法依赖关系,与POS数据集一致

  • 介词超义消歧(Preposition supersense disambiguation):判断介词的语义角色(PS-role)和语义功能(PS-fxn)。数据集是Streusle v4.2 corpus,介词只是单token ,与此篇(Schneider et al., 2018)类似

3 实验分析

3.1 相比于语法任务,大模型对于语义任务的帮助更大

作者选取了BERT的tiny,small,mini,medium以及base模型(作者说由于算力无法进行较大模型的尝试,哈哈哈哈)。从tiny到base,语法任务POS只提高了,而语义任务PS-fxn提高了,这说明语法任务比语义任务需要更大的模型来处理,即语义任务要比语法任务来得困难

3.2 微调会使得训练集和测试集的差异变大(表格过大只选取BERT small)

最后一列Sim代表的即为相似性,可以看到每个任务经过微调后相似性都会下降。

3.3 微调会记住训练集,有过拟合的风险

一般而言,微调后模型的表现都会上升,有趣的是BERT small和BERT medium在PS-fxn任务上微调后反而效果下降。而且BERT small经过微调后训练集和测试集的差异性是最大的,基于这个观察,作者提出会不会是微调后模型更多地记住了训练集。为了验证猜想,作者将训练集分为subtrain和subtest,测试集不动。subtest只有微调的时候才会用,而训练分类器的时候只用到subtrain。通过观察三者的训练曲线来判断微调后模型是否记住了训练集。

结果是原始表示下subtest和test学习曲线几乎一致,经过微调后subtest和subtrain的学习曲线几乎重合,这似乎证明了作者的观点。可是在我看来,只有一个实验对于这点的证明似乎有些薄弱。

同时,作者留下一个问题,如果对训练集的记忆情况十分严重,会降低模型的泛化能力,这又该当如何?

图3. 左右分别为原始表示和经过微调后的学习曲线

愚以为还可以选取低层和高层来做对照实验,只有最后一层可能有些规律被忽略。

3.4 小模型需要更复杂的分类器

2.1讨论了通过判断cluster和标签的数目是否相等来判断是否需要线性分类器。图4中可看出对于BERT tiny而言,很多时候cluster和标签的数目并不相等,这意味着大部分时候需要非线性分类器;而BERT base,全是相等的,只需要一个线性分类器。从这方面而言,小模型需要更复杂的分类器。

图4. BERT tiny的表现情况

图5. BERT base的表现情况

3.5 微调能使分类空间变得简单

见图4,原始的表示下,大部分是非线性的;而微调后,大部分都变成线性空间了,这或许可以解释为何微调能够提高模型表现,通过使得分类空间变得更简单以此来提高分类表现。

3.6 微调使得不同标签之间的距离变大

这里选取了两个任务来观察标签之间的距离。在图6中,横轴代表微调过程中的步数,竖轴代表每个标签与其他标签距离的最小值。不难发现,随着微调的步数越来越多后,每个标签都会或多或少地远离其他标签。结合3.5,之所以微调能够提升模型表现,是因为微调能够使得分类的空间变得更简单,标签之间的距离更远,这也就意味着有更多的分类情况,可以容纳更多的分类器。

图6. 两种任务下不同标签之间的距离

3.7 微调时高层的变化程度高于低层

在图7中,选取了BERT base模型来做POS任务,横轴代表的是第几层,原始表示下先记下label所代表的cluster的中心位置,然后微调后,计算每一层新的位置与原始位置的欧式距离,即为竖轴。可以发现距离都会发生变化。随着层数逐渐增加,距离越来越远,即高层的变化程度要高于低层。

图7. 微调后cluster中心移动的距离

3.8 微调时高层并不会随意改变

2.1中说过可以用皮尔逊相关系数来计算不同表示下距离向量的相似度,在图8中横轴代表微调的步数,竖轴是同一层与它原始表示下的相似度。不难看出即使是高层,相似度依然是大于0.5,这意味着较强的线性关联。即微调过程中,尽管标签之间的距离被拉大,但是微调后的表示与原始的表示还是有着较强的相似性,即使是高层也不例外。

图8. 微调前后距离向量的皮尔逊相关系数

4 总结点评

论文核心发现

  • 微调会对相同标签的点进行聚类,比之前更易被线性分割开

  • 微调会让不同标签之间的距离变大,可容纳更多的分类器。这也就意味着分类的方法变多了,即泛化能力变强

  • 微调不会随意改变原始表示,保留了标签之间的相对距离,而为下游任务调整到不同的空间

  • 微调会让模型记住训练集,有过拟合的风险

  • 低层和高层在微调的过程中都会改变,而低层的变化更加轻微

论文点评

  • 优点:选择了较小众的量化技巧,并能一定程度上解释一些常见现象

  • 不足:实验和模型较少,缺乏说服力;有些表面的阐释过多;图的排版很糟糕

好啦,你已经了解了微调对于BERT的影响了!

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定要备注信息才能通过)

END -

召回 粗排 精排,如何各司其职?

2021-10-06

图神经网络中可能用到的11种距离, 小结

2021-10-05

Batch Size对神经网络训练的影响

2021-10-04

Knowledge Distillation | 知识蒸馏经典解读

2021-10-03

微调背后发生了什么?相关推荐

  1. [C# 基础知识系列]专题五:当点击按钮时触发Click事件背后发生的事情

    引言: 当我们在点击窗口中的Button控件VS会帮我们自动生成一些代码,我们只需要在Click方法中写一些自己的代码就可以实现触发Click事件后我们Click方法中代码就会执行,然而我一直有一个疑 ...

  2. 理解go func背后发生了什么?

    参考:理解go func背后发生了什么 - Go语言中文网 - Golang中文社区 先看下下面这段代码? (1)A与B分布在不同的goroutine队列 package mainimport (&q ...

  3. 生活当中调整时钟时间背后发生的事情

    生活当中调整时钟时间背后发生的事情 我们在生活当中想要设定时钟.手表的时间的事情,我们通过会和大多数人一样,会按照手机上的时间来设定.但是,这背后发生了什么事情,我想大部分人应该是不知道的,其实我们自 ...

  4. InetAddress.getByName背后发生了什么

    [背景] 在一次问题排查过程中,发现偶现调用"InetAddress.getByName()"无法通过域名解析到IP(实际在容器中都能正确解析到),因此怀疑和容器的DNS解析有问题 ...

  5. 在淘宝上买件东西,背后发生了什么?

    origin: http://www.linuxeden.com/html/news/20160304/165063.html 原文出处:  孙放   欢迎分享原创到 伯乐头条 [转注]:此文写于 2 ...

  6. 在淘宝上买件东西,背后发生了什么?(简述)

    你发现快要过年了,于是想给你的女朋友买一件毛衣,你打开了www.taobao.com.这时你的浏览器首先查询DNS服务器,将www.taobao.com转换成ip地址.不过首先你会发现,你在不同的地区 ...

  7. 威纶通宏开机后使用初始化宏指令_【操作系统】我们按下电脑开机键的背后发生了什么?...

    作者:CVNot 链接:https://juejin.im/post/5e8844996fb9a03c6675b9d6 操作系统是什么? 操作系统是用来管理计算机硬件的软件,狭义上实现该定义的为操作系 ...

  8. 天啦噜!生产机器连接数飙升到上万,背后发生了什么?

    0x00. 翻车现场 那是个月黑风高的夜晚,小黑哥成功将新版本发布到了生产,小心翼翼检查了应用日志,后续测试小姐姐验收成功. 恩,小黑哥我还是一如既往的稳~ 接着小黑哥就跑到楼下食堂吃个夜宵,谁知正吃 ...

  9. 当你 ping 的时候,你知道背后发生了什么吗?

    阅读本文大概需要 4.5 分钟. 来源:木木匠  my.oschina.net/luozhou/blog/2992137 01 概览 对于 ping命令,想必只要是程序员都知道吧?当我们检查网络情况的 ...

最新文章

  1. 75分钟入门微生物组数据分析和结果解读—刘永鑫(合肥,2021年6月23日)
  2. 什么是Java反射机制?
  3. ES 6 +ES 5 的相关学习笔记
  4. 还在犹豫是否迁移.NET5?这几个项目已经上线了!
  5. JAVA入门级教学之(参数传递)
  6. python调用通达信函数用户指标_通达信公式之间如何调用,如何引用通达信tdxwave指标...
  7. js中outerHTML的问题
  8. 动态磁盘与基本磁盘的相互转换
  9. 完全免费无限量京东联盟高级API - 高并发京东联盟转链接口 京东客转链接口 京粉转链接口 京东联盟返利接口 京东返利接口,线报无广告接口
  10. 马斯克发起投票:是否应该出售特斯拉10%的股票?超5成粉丝赞成
  11. 24点游戏 java实现,一个基于Java技术编写的24点游戏逼真图形版,调用了很多图片去显示游戏内容JAVA游戏源码下载...
  12. StereoNet: Guided Hierarchical Refinement for Real-Time Edge-Aware Depth Prediction(ECCV 2018)
  13. 汇编语言更象是野球拳,哈哈……
  14. mplayer - Linux下的电影播放器
  15. 反混淆JavaScript
  16. 网易云易盾朱星星:最容易被驳回的10大APP过检项
  17. 03异常(Exceptions)异常
  18. UltraISO 制作U盘启动盘
  19. shell经典,shell十三问
  20. SDCC 2015中国软件开发者大会盛大开幕

热门文章

  1. 从0-1构建用户画像数据分析流程
  2. java微信推送模板销消息(微信测试号)
  3. 【优化算法】粒子群优化算法
  4. vscode pylint 配置
  5. 学python的100个单词_200个Python学习单词请收藏
  6. swiper排旋转木马自动轮播
  7. 微信小程序登陆流程图
  8. 为什么有时候你的光标会变成下划线?
  9. (附源码)计算机毕业设计ssm火车订票系统
  10. Windos上安装VirtualBox和Vagrant