煉丹一道,上可通天,直穿九重天,置於衛星中,巡視萬物;下可通地,直達九幽,便了礦藏所在,預知地震;前通千年,博覽全書,能知未解之迷;後通未來,觀現今,可推將起之事;還通那世間大道,不論何物,只待給個入與出,其中曲折便能仿其八九。如此神通之道,卻是不通個明明白白。
往往煉製一爐丹藥,成者不知所以然(自然也能編排出個所以然),敗者亦不知所以然。是故,世人多稱丹道者,玄學也。
便是筆者初入丹道,照丹方煉丹,時成時敗,成者自然欣喜萬分,敗者細細回顧解決之,時有抓耳撓腮也解決不了者,只得求助門派師兄。待師兄上前,重開丹爐待重現,半響過後,卻絲毫問題沒有,尷尬萬分,莫非這丹爐還能辨新手與熟手,師兄見之,哈哈大笑幾聲,拍拍肩鼓勵之,便離去,想必此乃常情。玄學之說可見一斑。
然丹道之難者,無外乎其所涉因素過多,丹爐,丹方,丹材,藥引,火候... 便是那天地元氣之運轉,卻或也與此爐丹藥之成敗有關。
於是乎,為煉爐好丹藥,有心者,便是沐浴更衣,洗臉漱口,舉著三炷香,朝著祖師爺爺們拜上一拜,還請討口飯吃。卻說祖師爺爺們,都乃何人,元始天尊韓丁其一,靈寶天尊賁橋其二,道德天尊楊立昆其三。
卻說近來,丹道一途漸趨完備,大門大派仗著人才濟濟,門內財力雄厚,屢練神丹。說來也奇,若是那尋常仙術秘法,各門各派便是打死也不透露,只煉丹一道,卻是大大方方公之於眾,卻也端的不怕他人學去。無奈何,神丹出世,且不說那煉製所需頂級丹爐與神火,便是那煉製所需奇花異草,天才地寶,卻也是難收集齊一二,更不提諸多未公布煉製細節。
縱是備齊材料,租借來丹爐神火,卻也費用頗巨,那小門小派與孤身散修也只得望洋興嘆,只盼得每每煉出神丹,大門大派尊口一開,讓大家觀摩一番。
如若不給觀摩,也是無可奈何,便如那番國之 OpenAI,練得神丹,曰:「此丹乃不祥之物,唯恐心術不正者用其危害人間,是故吾派將其封印之。」 引起丹界一片唇槍舌戰,終放出一二神丹弱化版,供眾人觀摩。剩之者,想是要束之高閣,藏之名山,便是要傳個千百代。
卻說番國之另一大派,狗狗教。番國之教派,甚多怪名,貓貓狗狗,牛牛羊羊多有之。狗狗派自去年末,煉出 BERT 神丹,乃是開天闢地之舉,一時 BERT 徒子徒孫霸佔神丹榜,直至狗狗派再煉神丹 XLNet,在神丹榜上奪得榜首。(XLNet 詳見:《飛躍芝麻街:XLNet 詳解》)
此等舉動,他派焉可服氣,於是乎,與狗狗其名之非死不可派,重煉 BERT 神丹,制出 RoBERTa 神丹,重奪魁首。
在此,在下便來粗解 RoBERTa 煉製過程。
說起丹道,尋常丹師,便多按圖索驥,照著丹方老老實實煉,關鍵在於妙用。通之略深者,便醉心於提升丹道。
提升丹道之途,一來,奇思妙想,發明一新丹方,練出丹藥若較之前丹藥效力更好,那便是好丹方,有幸者更能登上些榜單;二來,勤勤懇懇,便是於原有丹方上花些時間,如何提升其煉製之細微處,如火溫多少,何種丹爐更佳,煉製時間愈長是否影響效力。
RoBERTa 便乃此第二法中佼佼者,改進煉製之法,讓 BERT 神丹效力大增,重回了神丹榜首,壓得 XLNet 一籌。
卻說 RoBERTa 煉製之法妙在何處,一言概之,左龍右鳳,加之五虎上將。潛龍鳳雛,No Next Sentence Prediction 與 Dynamic Masking。五虎上將,東南西北中,不是多就是長:More Data、More steps、Larger batches、Larger 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:
卻是數據量更大,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 預訓練的一次深度探索》
此處,丹師們做出多組有趣實驗:
真實句子對加之 NSP 煉製
成對句子段加之 NSP 煉製,乃原始 BERT 所為
連續長句拼接無 NSP 煉製,句子可跨文檔
同上,句子不可跨文檔
卻說性能對比,簡而言之 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 再殺回來,也不足為奇。