RoBERTa:高级丹药炼制记录

  • 2019 年 11 月 29 日
  • 笔记

炼丹一道,上可通天,直穿九重天,置于卫星中,巡视万物;下可通地,直达九幽,便了矿藏所在,预知地震;前通千年,博览全书,能知未解之迷;后通未来,观现今,可推将起之事;还通那世间大道,不论何物,只待给个入与出,其中曲折便能仿其八九。如此神通之道,却是不通个明明白白

往往炼制一炉丹药,成者不知所以然(自然也能编排出个所以然),败者亦不知所以然。是故,世人多称丹道者,玄学也

便是笔者初入丹道,照丹方炼丹,时成时败,成者自然欣喜万分,败者细细回顾解决之,时有抓耳挠腮也解决不了者,只得求助门派师兄。待师兄上前,重开丹炉待重现,半响过后,却丝毫问题没有,尴尬万分,莫非这丹炉还能辨新手与熟手,师兄见之,哈哈大笑几声,拍拍肩鼓励之,便离去,想必此乃常情。玄学之说可见一斑。

然丹道之难者,无外乎其所涉因素过多,丹炉,丹方,丹材,药引,火候… 便是那天地元气之运转,却或也与此炉丹药之成败有关。

于是乎,为炼炉好丹药,有心者,便是沐浴更衣,洗脸漱口,举着三炷香,朝着祖师爷爷们拜上一拜,还请讨口饭吃。却说祖师爷爷们,都乃何人,元始天尊韩丁其一,灵宝天尊贲桥其二,道德天尊杨立昆其三。

却说近来,丹道一途渐趋完备,大门大派仗着人才济济,门内财力雄厚,屡练神丹。说来也奇,若是那寻常仙术秘法,各门各派便是打死也不透露,只炼丹一道,却是大大方方公之于众,却也端的不怕他人学去。无奈何,神丹出世,且不说那炼制所需顶级丹炉与神火,便是那炼制所需奇花异草,天才地宝,却也是难收集齐一二,更不提诸多未公布炼制细节。

纵是备齐材料,租借来丹炉神火,却也费用颇巨,那小门小派与孤身散修也只得望洋兴叹,只盼得每每炼出神丹,大门大派尊口一开,让大家观摩一番。

如若不给观摩,也是无可奈何,便如那番国之 OpenAI,练得神丹,曰:“此丹乃不祥之物,唯恐心术不正者用其危害人间,是故吾派将其封印之。” 引起丹界一片唇枪舌战,终放出一二神丹弱化版,供众人观摩。剩之者,想是要束之高阁,藏之名山,便是要传个千百代。

却说番国之另一大派,狗狗教。番国之教派,甚多怪名,猫猫狗狗,牛牛羊羊多有之。狗狗派自去年末,炼出 BERT 神丹,乃是开天辟地之举,一时 BERT 徒子徒孙霸占神丹榜,直至狗狗派再炼神丹 XLNet,在神丹榜上夺得榜首。(XLNet 详见:《飞跃芝麻街:XLNet 详解》

此等举动,他派焉可服气,于是乎,与狗狗其名之非死不可派,重炼 BERT 神丹,制出 RoBERTa 神丹,重夺魁首。

在此,在下便来粗解 RoBERTa 炼制过程。

说起丹道,寻常丹师,便多按图索骥,照着丹方老老实实炼,关键在于妙用。通之略深者,便醉心于提升丹道。

提升丹道之途,一来,奇思妙想,发明一新丹方,练出丹药若较之前丹药效力更好,那便是好丹方,有幸者更能登上些榜单;二来,勤勤恳恳,便是于原有丹方上花些时间,如何提升其炼制之细微处,如火温多少,何种丹炉更佳,炼制时间愈长是否影响效力。

RoBERTa 便乃此第二法中佼佼者,改进炼制之法,让 BERT 神丹效力大增,重回了神丹榜首,压得 XLNet 一筹。

却说 RoBERTa 炼制之法妙在何处,一言概之,左龙右凤,加之五虎上将。潜龙凤雏,No Next Sentence PredictionDynamic Masking。五虎上将,东南西北中,不是多就是长:More DataMore stepsLarger batchesLarger byte level BPE vocab,再有 1024 数之上好丹炉 V100.

此等比喻,不免有些牵强附会,诸位略听之即可,不必做真。

More Data

却说,没有数据(Data)炼丹便如无根之水,一切无从说起。且 XLNet 便乃海量数据堆之,欲与其较,理当更多数据。于是乎,RoBERTa 用到数据:

  • Books Corpus + English Wikipedia (16GB):乃 BERT 最初用之数据
  • CC-News(76GB): 自 CommonCrawl News 数据中去粗存精得之数据,约含六千三百万篇新闻,自二零一六年九月至二零一九年二月。
  • OpenWebText(38GB):此数据却是借鉴 GPT2 ,取道友交流论坛 Reddit 中,karma (道友点赞)数大于三帖中链接内容。
  • Stories(31GB):同样取之 CommonCrawl,却非新闻类数据,乃取故事类数据。

较之 XLNet:

  • BooksCorpus + English Wikipedia (13GB)
  • Giga5 (16GB)
  • ClueWeb 2012B (19GB)
  • Common Crawl (78GB)

却是数据量更大,RoBERTa 有 161 GB之多,而 XLNet 略少有 126 GB。

More Steps

炼制更长久,却只是力气活,此处最多达五十万步。

Large Batch

一批量(batch),乃炼制中单次引入数据量, 常规设置一百二十八,二百五十六等等便可,如 BERT 原方即用 二五六之数,RoBERTa 则用八千为批量数。

据些文献记载,在解决训练稳定问题情况下,却有批量数大便是好的说法,其用之三万二千大批量炼制。而此处用之八千数,因此批量数处尚有探究余地

大批量炼丹,最为讲究训练过程,如何调节优化器,在大威能下,不炸炉,稳定炼丹,此处对万金油优化器 Adam 中两项参数进行了调整

第一,便是 Adam 中二阶矩估计时的 β_2,一般对于梯度稀疏之问题,如 NLP 与 CV,建议将此值设大,接近 1,因此通常默认设置为 0.999,而此处却设 0.98。

第二个,却是对一貌似没太大关系之变量进行修改,即 Adam 中的 ε .

据丹方说明,调节此项,可提高炼制稳定性,甚至时有提升表现发生。然 最早只用来防止除零情况发生,没料到在此处亦可帮助炼制。

可惜文中未对上述两者进行解释,私以为,此两者都与二次距有关,想必与大批量训练时二次距特殊性有关

larger byte level BPE vocab

此策略需细细解释,larger 易解,此处难点乃 byte level 与之 Byte Pair Encoding (BPE)。

何谓 byte level,炼丹之道,自最古以来,便是自大到小,初以为万物即万物,不想待观之细处,万物乃相通,皆由小颗粒组成。

NLP 炼丹,亦如此,上古时期,认知有限加之丹炉过小,多用词粒度来炼丹,此做法便也是算是将人类对词语之认知引入。待到今日,丹炉各个巨大无比,便是用之更小粒度,子词,utf-8 编码,甚至最底层之字节(byte),来进行炼丹,亦能处理良好。此所谓 byte level,正因其粒度之小,无所不能组成,便能让 NLP 炼丹少了未知词之烦恼

至于 Byte Pair Encoding,详情可查阅别处典籍。最早 NLP 炼丹用其学习子词,使词表更小。此处则是习得高频字节组合,置入词表。最终词表总大小五万上下。

然此法对表现无提升,甚至有下降,但著者们认为其带来收益远大于损失,因之其词表泛用性。

1024 V100s

便如其名,乃用之一千零二十四个上好丹炉 V100,分布式炼制。

No Next Sentence Prediction

却是不用 BERT 丹方中 Next Sentence Prediction (NSP) 任务,长长一句直接 Masked Language Model (MLM) 训练,SpanBert 中亦有类似训练操作,详见:《SpanBert:对 Bert 预训练的一次深度探索》

此处,丹师们做出多组有趣实验:

  1. 真实句子对加之 NSP 炼制
  2. 成对句子段加之 NSP 炼制,乃原始 BERT 所为
  3. 连续长句拼接无 NSP 炼制,句子可跨文档
  4. 同上,句子不可跨文档

却说性能对比,简而言之 1<2<3<4,可观得

  • 真实句子过短,不如拼接成句子段
  • 无 NSP 任务,略好过有 NSP
  • 不跨文档好过跨文档

后两者想来亦与 SpanBERT 中提之噪音问题有关。

dynamic masking

听起来似乎很是厉害,然而却只是一个很简单改进。

何为 dynamic,只因原 BERT 预处理数据时,先处理好哪些位置被 mask,于是乎,炼制时,也就用着这些 static mask。而 dynamic 却是在训练时实时 mask,纵然是同一句话,每次 mask 位置也是随机不同

炼制结果

此处需关注点,首先横向 RoBERTa,BERT,XLNet 对比,三者于小数据集 Books + Wiki 上相近设置炼制结果,可见通过改进训练,RoBERTa 给 BERT 带来很大提升,根据比较想来主要是 larger batch,dynamic masking,与 no next sentence prediction 三者合力所为。即使相比起 XLNet 本质结构之改进,一些任务也有一较之力,然私以为,若 XLNet 以之相同炼制条件,却还是更优。

横向尚有 XLNet 与 RoBERTa 大批量与多步数对比,然因之条件之大不同,难以公平对比。

接着纵向对比, 那便是训练愈长性能愈好

最终结论,RoBERTa 对 BERT 炼制的改进可谓非常之棒,使其性能提升,尚能与 XLNet 较量,然 XLNet 对丹药结构本质改进还是更优,因为此处多个技巧也可用于 XLNet,相信 XLNet 改进炼制方法后,会重回榜首

当然,因之 SpanBERT 与 RoBERTa 同出一派,便待日后炼出 SpanRoBERTa 亦或是 RoSpanBERTa 再杀回来,也不足为奇。