作者 | BroLin 出品 | 对白的算法屋
从 BERT 开始,预训练模型(PLMs) 微调(finetune)已经成为了NLP领域的常规范式。通过引入额外的参数(新的网络层)和特定任务的目标函数,PLMs在该任务的数据集下经过finetune后,总能取得评价指标上的提升,甚至达到SOTA。
但是为什么finetune总能提高BERT在下游任务上的性能表现?
BERT在finetune的时候词向量空间究竟发生了什么?
BERT输出层应该再接一个什么样的分类器才能取得性能提升?
今天这篇文章使用两种探针技术(probe)在四种探测任务上量化了BERT在finetune前后表示空间的变化,直观形象的回答了上述问题。相信大家看完以后,一定会收获满满
每天一个不同的小期待 (ฅ>ω<*ฅ)
一、先说结论
BERT将词表中每个单词映射为一个高维(768维)向量,这些单词可被视为表示空间中的点。
- 微调操作将具有相同标签的点分组到一个簇(cluster)中,简化了词向量的底层表示。因此,微调后更容易进行单词的类别划分。
- 微调操作在不同方向上以不同程度移动词向量,从而增大了代表不同类别的簇之间的分割区域,让不同类别的词向量距离更远,以此提高了分类精度。
- 微调操作为下游任务移动词向量的空间位置时,并不随意,而是很大程度上保留了不同簇在finetune之前的相对位置。
- 微调操作可以通过模型参数记忆训练集,从而引入了可见样本(训练集)与不可见的样本(测试集)之间的差异。这会导致过拟合问题。
- 在微调时,BERT的所有层参数都会改变,但越靠近输出层的layer变化越大。即,高层变化大于低层变化。
二、两种探针技术
作者使用了两种探针技术来探测微调之后的词向量表示空间。
- Classifier-based probes 基于分类器的探针。微调效果到底好不好,微调之后的词向量表示是否有效,可以直接用针对下游任务的分类器的准确度来衡量。只有微调效果足够好时,分类效果才够准。
- DIRECTPROBE 基于聚类的探针。由作者在另外一篇文章中提出(NAACL2021),用于直接量化词向量表示在几何空间上的变化。
基于分类器的探针
但是第一种基于分类器的探针,并不可靠。如下图所示,分类器的性能不仅与微调后的词向量表示有关,还会受到各种因素的干扰。比如,优化器在收敛之前就停止了,或者我们选择了一个错误的初始化点等等这些都会导致分类效果的降低。
作者在自己的博客中对这一问题进行了实验,如下表所示。选择supersense role labeling任务,每种分类器(Model Type)除了在参数初始化时选用不同的随机种子,其余(batch_size, epoch, optimazer...)均一样。共训练10次,Min是10次中最差的准确率,Max是最好的,difference是Max-Min的差值。可以发现仅仅是参数初始化不同,分类器的性能足足有3-4个百分点的变化。
DIRECTPROBE探针
上述实验结果表明,分类器的效果受到多种因素的扰动,这种扰动往往是不容忽视的,它并不能准确可靠地衡量词向量的表示效果。因此,作者自己提出了一个基于聚类的探针,DIRECTPROBE,不用分类器,而是从几何空间角度来衡量微调前后的词向量表示效果。该探针只适用于POS、NER这类预测单词类别的任务(labeling task)。
对单词进行打标,可以被视为词向量的聚类问题,即在表示空间中寻找不同类别单词之间的边界。如下图所示,假设红点代表名词,绿点代表动词,想要判断当前词是动词还是名词,只需看该词经过finetune后的向量表示 vector是否落在黑色圆圈中。
区分红点和绿点的黑色圆圈(决策边界)可被视为一种分类器。理论上,有无穷个分类器可以用于划分红点和绿点。如下图所示,可以使用灰色区域来近似表达这无穷个决策边界(分类器)。这样对单词进行分类就被转化为了一个聚类问题,同类别的单词应该被分组到为同一个簇。每个簇的最外围节点相连接可构成一个凸多边形(convex hull),如红点所示。为保证可以找到决策边界来划分单词类别,每个凸多边形之间不能有重叠。则寻找决策边界(灰色区域)问题转化为了在寻找凸多边形簇的聚类问题。注意,不同的簇可能属于同一个标签。比如,下图绿点构成了三个簇,但都代表动词类别。
如下图动画所示,DIRECTPROBE本质上是一个用于解决上述聚类问题的算法:
- 将每个点视为一个簇(cluster)
- 总是选择距离最近的两个簇进行合并
- 两个簇只有在满足如下条件时才可以被合并
- 他们的标签类别相同
- 合并后新簇的凸多边形不能与其他簇的凸多边形有重叠。
- 重复上述步骤,直至没有新的簇产生。
那么DIRECTPROBE聚类出来的这些簇可以用来干嘛呢?
判断何时选用线性分类器
当要对某个数据集进行POS等labeling task时,可以先用DIRECTPROBE对微调后的词向量进行聚类,如果产生的簇的个数n等于任务的类别个数m,说明每个簇对应一个类别,使用线性分类器就可以很好地区分不同类别的样本,运算速度快。如果n大于m,说明一个类别可能对应多个簇。如上图所示,绿点(动词类别)对应三个簇(凸多边形),无法用一条直线来区分红点和绿点,因此只有选择非线性分类器(neural networks)才能取得好的分类效果。
揭示representation的内部结构
训练一个线性SVM来计算不同簇之间的margin,不同簇之间的距离可以用两倍的margin来表示。通过比较微调前后不同簇之间的距离,可以量化微调之后的词向量表示的变化。
揭示不同representation之间的空间相似度
针对一种representation,计算两两簇之间的距离 ,构成距离向量 。若簇的个数 等于任务实际类别个数,则 的长度为 。若要衡量两种不同representation的空间相似性,则可以计算它们的距离向量的皮尔逊相关系数。
三、四种探测任务
如下图所示,作者使用不同规模的BERT在四种探测任务上进行了微调训练。一种BERT对应一种表示空间(representation)。除了BERT base版训练5个epochs之外,其余规模的BERT均训练10个epochs。分类器探针接到BERT输出层,跟着BERT一起微调。为了降低微调过程中不稳定性的影响,同一个任务作者使用不同的初始化参数进行了五次微调。
上述四种探测任务介绍如下:
part-of-speech tagging
词性标注任务。labeling task中的代表性任务,如下图所示,一句话中的每个词都要预测其类别。
preposition supersense role prediction (PS-role) 一句话中的每个介词可被标记为一种类别,表明介词的类别
preposition supersense function prediction (PS-fxn)
预测介词的作用。如下图所示,句子中的介词均被加粗显示,介词的role lable紧跟其后。如果某个介词有function label,则跟在箭头之后。
dependency head prediction
预测两个单词之间的语法依赖关系。前三个任务预测一个单词的类别,与之不同,本任务预测一对单词类别别。我们将这对单词的词向量concat为一个vector,用这个vector代表这对单词在表示空间中的向量。
四、探测结果分析
微调增大了训练集和测试集的差异度
下图最右边一列Sim表示训练集和测试集表示空间(representation~train~,representation~test~)之间的相似度。发现微调后(tuned)比微调前(originalal)相似度有降低,这表明微调操作增大了训练集和测试集的空间离散程度。
给我感觉,R-Drop在接下来一段时间,会不会成为竞赛拿奖的一种标配?因为从论文里的实验可以看出,基本引入R-Drop都会带来1 ~ 2个点的提升。对于工程上来说嘛,就可以把引入R-Drop当成一种常规操作,超参不多,慢慢调,总会带来一点提升,唯一的牺牲就是增加一点训练时间,但是并不会增加线上应用时的推理时间。
微调后性能反而降低?
上图中红色框出,发现微调后BERT~small~在PS-fxn任务上反而准确率降低了。为了进一步研究这一问题,如下图作者将原训练集按8:2划分为subtrain和subtest。使用原始train对BERT~small~进行微调,微调前后均只使用subtrain训练分类器。分类器的训练不参与微调。
如下图所示,微调前分类器在subtest和test上的学习曲线一致。微调后,虽然分类器没有见过subtest,但BERT见过了subtest,导致分类器在subtest上学习曲线和subtrain上一致,性能有了大幅提升。这表明微调使BERT记住了subtest中的样本。据此猜测,微调也许会使得模型过拟合从而降低模型对不可见样本的泛化能力,导致性能下降?
BERT规模越小需要的分类器越复杂
除了规模较小的BERT~tiny,mini~之外,BERT输出层之后接一个简单的线性分类器就可以搞定四种探测任务(聚类簇个数等于任务类别数)。而BERT~tiny,mini~则需要使用非线性分类器才能满足大部分任务,如下图所示。一个启示是,炼大模型确实有用,大模型微调后可以使得表示空间更简单(类别可被线性边界区分)。如果受限于资源不得不用小模型,则尽量把分类器搞得复杂一点。
微调推远了不同类别的簇
下图展示了BERT~base~在POS tagging任务的微调过程中三个簇质心的移动路径。作者选用了微调前三个相近的簇(三个很难区分的类别ADJ,VERB, NOUN),使用PCA技术将高维的质心映射到二维空间中。随着微调的进行,质心在不同的方向上移动,并彼此远离。比如,微调前蓝点和红点相距很近,微调后两个类别的距离增大了(L2>L1)。高层Layer12分离不同类别的能力比低层Layer1更强(L3>L2)。
高层比下层的变化更大
下图(横轴是层数纵轴是距离)展示了BERT~base~在POS tagging任务上,随着微调的进行,某一类别的簇的质心与其他簇质心的欧式距离的平均值在layer的增加下不断增加。随着层数的增加,不同簇之间的距离也随之增大,即微调时高层在表示空间上的变化比下层的更大。
下图横轴为微调过程中梯度更新的次数,纵轴为微调前后表示空间的相似度。看出下层(Layer2 Layer6)微调前后几乎无变化。高层微调后变化很大,这与上述结论一致。
五、总结
今天这篇文章使用两种探针技术定量分析了不同规模BERT在微调时的变化,带领读者抵近观察了一番BERT的表示空间。回到开头的三个问题,读完文章,似乎都得到了解答。
为什么微调带来性能提升? -- > 微调增大了不同类别之间的距离,使得划分更好做。
微调时词向量究竟发生了什么变化? -- > 为了使类间距离增加,词向量沿不同方向移动了不同程度。高层变化大于下层。
BERT外接分类器的设计准则? -- > BERT参数规模小则分类器结构应该复杂一些。针对Lableing Task,先使用DIRECTPROBE对微调后的词向量进行聚类,若簇大小等于类别数量,则外界一个简单的线性分类器再进行微调就可以解决问题。
但是作者只分析了不同簇之间的距离,没有分析同一个簇内的词向量变化。直觉上,类间距离变大类内距离变小的“高内聚低耦合”词向量表示才是一个好的微调应该产生的效果。
另外,除了实验结论外,本文实验方法和可视化分析也非常值得学习~
你好,我是对白,硕士毕业于清华,现大厂算法工程师,拿过八家大厂的SSP级以上offer。
高中荣获全国数学和化学竞赛二等奖。
本科时独立创业五年,成立两家公司,并拿过总计三百多万元融资(已到账),项目入选南京321高层次创业人才引进计划。创业做过无人机、机器人和互联网教育,保研后选择退居为股东。
我每周至少更新三篇原创,分享自己的算法技术、创业心得和人生感悟。