前幾天看沒事看了眼GLUE榜單就發現了ALBERT這個模型,去arxiv搜了下沒搜到,還在想何時放出來,沒想到在Openreview上。。html
ALBERT原文 openreview.netGoogle一出手就是不同,再也不是BERT+的模式,而是作了個大改動。node
先來感覺一下刷榜的樂趣,GLUE:git
SQuAD:github
RACE可能沒找對,沒看到。網絡
ALBERT主要對BERT作了3點改進,縮小了總體的參數量,加快了訓練速度,增長了模型效果。分佈式
接下來介紹這三點改進。svg
在BERT、XLNet、RoBERTa中,詞表的embedding size(E)和transformer層的hidden size(H)都是相等的,這個選擇有兩方面缺點:學習
所以做者使用了小一些的E(6四、12八、25六、768),訓練一個獨立於上下文的embedding(VxE),以後計算時再投影到隱層的空間(乘上一個ExH的矩陣),至關於作了一個因式分解。spa
從後續的實驗中來看,E的大小與實驗效果也不是徹底正相關,所以其餘實驗中E都取的128。.net
跨層參數共享,就是無論12層仍是24層都只用一個transformer。這在以前讀過Universal Transformer就有了,可是覺得會火,由於作語言模型的效果比標準Transformer好。結果沒什麼人用,此次被提起來了。
做者對比了每層輸入輸出的L2距離和類似度,發現了BERT的結果比較震盪,而ALBERT就很穩定,可見ALBERT有穩定網絡參數的做用。
後BERT時代不少研究(XLNet、RoBERTa)都發現next sentence prediction沒什麼用處,因此做者也審視了一下這個問題,認爲NSP之因此沒用是由於這個任務不只包含了句間關係預測,也包含了主題預測,而主題預測顯然更簡單些(好比一句話來自新聞財經,一句話來自文學小說),模型會傾向於經過主題的關聯去預測。所以換成了SOP(sentence order prediction),預測兩句話有沒有被交換過順序。實驗顯示新增的任務有1個點的提高:
剛開始看這篇文章是很驚喜的,由於它直接把同等量級的BERT縮小了10倍+,讓普通用戶有了運行GPT二、威震天的可能。可是仔細看了實驗後才發現體量的減少是須要付出代價的:
能夠仔細看一下model的量級,而且注意一下這個speedup是訓練時間而不是inference時間(由於數據少了,分佈式訓練時吞吐上去了,因此ALBERT訓練更快),但inference仍是須要和BERT同樣的transformer計算。
能夠得出的結論是:
魚與熊掌不可兼得,尤爲是對於工程落地而言,須要在速度與效果之間尋找一個trade-off。
另外,結合Universal Transformer能夠想到的是,在訓練和inference階段能夠動態地調整transformer層數(告別十二、2四、48的配置吧)。同時能夠想辦法去避免純參數共享帶來的效果降低,畢竟越深的transformer層所學到的任務相關信息越多,能夠改進transformer模塊,加入記憶單元、每層的個性化embedding。