Knowledge Distillation (2) 知識(shí)遷移

更好的閱讀體驗(yàn)請?zhí)D(zhuǎn)至Knowledge Distillation (2) 知識(shí)遷移

上篇討論了bert-of-theseus,算是一個(gè)開篇瘾杭,本文繼續(xù)討論關(guān)于模型蒸餾(Distilling Knowledge)及關(guān)于BERT模型的知識(shí)蒸餾役纹。
模型蒸餾的最重要的一個(gè)特點(diǎn)就是降低資源使用和加速模型推理速度修噪,而小模型往往性能較低,本文總結(jié)一些如何通過蒸餾來使小模型具有更好的性能问裕。

Distilling Knowledge

Distilling the Knowledge in a Neural Network

這篇是2015年Hinton發(fā)表的,也是我看到的最早提出Knowledge Distillation的論文织堂。
在這篇論文中,Hinton指出one-hot 的label只指示了true label 的信息率寡,但是沒有給出negative label 之間、negative 與 true label之間
的相對(duì)關(guān)系倚搬,比如:比如現(xiàn)在的任務(wù)是給定一個(gè)詞(比如:蘋果),然后判斷詞對(duì)應(yīng)的類別(電視/手機(jī)/水果/汽車)乾蛤,假如現(xiàn)在我們有兩個(gè)樣本:
(蘋果每界,[0,0,1,0])和 (小米,[0,1,0,0]), 而one-hot 形式的label并不能告訴我們家卖,蘋果中 label是水果的概率高出label是拖拉機(jī)的概率眨层,
稍低于是手機(jī)的概率,而小米中l(wèi)abel是電視的概率稍低于是手機(jī)的概率上荡,但是同時(shí)要高于是汽車和水果的概率趴樱,這些相對(duì)關(guān)系在one-hot 形式的label中
是無法得到的馒闷,而這些信息非常重要,有了這些信息叁征,我們可以更容易的學(xué)習(xí)任務(wù)纳账。于是提出了Teacher-Student模式,
即用一個(gè)大的復(fù)雜的模型(也可以是ensemble后的)來先學(xué)習(xí)捺疼,然后得到label的相對(duì)關(guān)系(logits),然后將學(xué)習(xí)到的知識(shí)遷移到一個(gè)小模型(Student)。

Distilling

具體遷移過程是Student 在進(jìn)行training 時(shí)荐糜,除了學(xué)習(xí)ground truth 外鳖链,還需要學(xué)習(xí)label 的probability(softmax output),但是不是直接學(xué)習(xí)
softmax output官扣,而是學(xué)習(xí)<code>soften labels</code>翅敌,所謂soften labels 即經(jīng)過<code>Temperature</code> 平滑后的 probability,具體形式:
q_{i} = \frac{exp(z_{i}/T)}{ \sum_{j}^{}exp(z_{j}/T)}
其中T 越大惕蹄,對(duì)應(yīng)的probability 越平滑蚯涮,如下圖所示。而平滑probability 可以看作是對(duì)soften label的一種正則化手段焊唬。

soften.png

更直觀的實(shí)驗(yàn)請查閱Knowledge Distillation From Scratch

Distill BERT

看到的第一篇針對(duì)BERT 模型做蒸餾的是Distilling Task-Specific Knowledge from BERT into Simple Neural Networks,
在這篇論文中恋昼,作者延續(xù)Hinton 的思路在BERT 上做實(shí)驗(yàn),首先用BERT-12 做Teacher赶促,然后用一個(gè)單層Bi-LSTM 做Student液肌,loss 上除了
ground truth 外,也選擇了使用teacher 的logits鸥滨,包括Temperature 平滑后的soften labels 的CrossEntropy和 logits 之間的MSE嗦哆,
最后實(shí)驗(yàn)驗(yàn)證MSE效果優(yōu)于CE。
此外婿滓,由于是從頭開始訓(xùn)練Student老速,所以只用任務(wù)相關(guān)數(shù)據(jù)會(huì)嚴(yán)重樣本不足,所以作者提出了三種NLP的任務(wù)無關(guān)的data augment策略:

  1. mask:隨機(jī)mask一部分token作為新樣本凸主,讓teacher去生成對(duì)應(yīng)logits ;
  2. 根據(jù)POS標(biāo)簽去替換橘券,得到 ”What do pigs eat?" -> " How do pigs ear?"
  3. n-gram采樣:隨機(jī)選取n-gram,n取[1-5]卿吐,丟棄其余部分旁舰。

Distilling the Knowledge in a Neural Network中曾指出 logits 之間的CrossEntropy是可以看作
是MSE 的近似版本,不過這里作者的結(jié)論是MSE 更好嗡官,此外箭窜,由于Hinton 實(shí)驗(yàn)時(shí)是巨大數(shù)據(jù)量,所以不存在樣本不足的情況衍腥,而普通實(shí)驗(yàn)時(shí)都會(huì)遇到
遷移時(shí)訓(xùn)練樣本不足磺樱,需要做數(shù)據(jù)增強(qiáng)的問題纳猫。

TinyBERT

TinyBERT 出自TinyBERT: Distilling BERT for Natural Language Understanding,由于Transformer 結(jié)構(gòu)
在NLP 任務(wù)中的強(qiáng)大能力,作者選擇用與BERT 同結(jié)構(gòu)的方式做Student竹捉,此外芜辕,為了提高KD后模型性能,做了更細(xì)致的工作:

  1. Student選擇一個(gè)更窄更淺的transformer;
  2. 將KD也分為兩個(gè)階段:pre-train 和 fine-tuning活孩,并且在兩個(gè)階段上都進(jìn)行KD;
  3. 使用了更多的loss:Embedding之間的MSE物遇,Attention Matrix中的logits之間的MSE,Hidden state之間的MSE以及最后的分類層的CE;
  4. 為了提高下游任務(wù)fine-tuning后的性能憾儒,使用了近義詞替換的策略進(jìn)行數(shù)據(jù)增強(qiáng).

優(yōu)點(diǎn)

  1. 6層transformer基本達(dá)到了bert-12的性能询兴,并且hidden size更小,實(shí)際是比bert-6更小的;
  2. 因?yàn)橛衟re-train KD起趾,所以可以拿來當(dāng)bert 一樣直接在下游fine-tuning.

缺點(diǎn)

  1. 由于hidden size的不同诗舰,所以為了進(jìn)行MSE,需要用一個(gè)參數(shù)矩陣W 來調(diào)節(jié)训裆,這個(gè)參數(shù)只在訓(xùn)練時(shí)使用眶根,訓(xùn)練完后丟棄,這個(gè)矩陣沒有任何約束边琉,覺得不優(yōu)雅;
  2. 其次属百,student model的每一層都需要去學(xué)習(xí)teacher model的對(duì)應(yīng)的block的輸出,如何對(duì)不同的層如何設(shè)計(jì)更好的權(quán)重也是一個(gè)費(fèi)力的事变姨;
  3. 雖然student的結(jié)構(gòu)也是transformer族扰,但是由于hidden size 不同,沒法使用teacher的預(yù)訓(xùn)練結(jié)果定欧,但是我覺得這里其實(shí)可以用降維的方式用
    teacher的預(yù)訓(xùn)練結(jié)果渔呵,可能不需要pretraining的階段了也說不定。

DistilBERT

DistilBERT 出自DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter,
論文中作者通過調(diào)查發(fā)現(xiàn)BERT 中的hidden size 的對(duì)計(jì)算效率的改變比hidden layer nums 的影響小砍鸠,說白了就是讓模型變矮比讓模型變瘦效率更高扩氢,
所以作者使用了一個(gè)更矮的BERT來做Student 來遷移BERT 中的知識(shí)。由于DistilBERT 是一個(gè)與BERT 同結(jié)構(gòu)只是層數(shù)更小爷辱,所以DistilBERT 可以用
BERT 的預(yù)訓(xùn)練的權(quán)重進(jìn)行初始化录豺,此外,DistilBERT 是一個(gè)與任務(wù)無關(guān)的模型饭弓,即與BERT 一樣巩检,可以對(duì)很多下游任務(wù)進(jìn)行fine-tuning。
由于DistilBERT 與 BERT 的前幾層一致示启,所以loss 的選擇上就更多一些,作者選擇了triple loss:
MLM loss + embedding cosin loss + soften labels cross entropy .s

優(yōu)點(diǎn)

DistilBERT 做到了與BERT 一樣领舰,完全與任務(wù)無關(guān)夫嗓,不需要添加額外的Distillation 階段(添加后結(jié)果會(huì)更好)迟螺。

MobileBERT

MobileBERT 出自MobileBERT: a Compact Task-Agnostic BERT for Resource-Limited Devices,
作者同樣采用一個(gè)transformer 作為基本結(jié)構(gòu),但作者認(rèn)為深度很重要舍咖,寬度較小對(duì)模型損壞較小矩父,所以整體架構(gòu)是保持模型深度不變,
通過一個(gè)矩陣來改變feature size排霉,即bottleneck窍株,在通過在block的前后插入兩個(gè)bottleneck,來scale feature size攻柠。由于
MobileBERT太窄太深球订,所以不好訓(xùn)練,作者提出新的方式瑰钮,通過一個(gè)同深但是更寬的同架構(gòu)的模型來訓(xùn)練 作為teacher冒滩,然后用MobileBERT遷移。
loss 設(shè)計(jì)上主要包括三部分:feature map之間的MSE浪谴,Attention logits之間的KL开睡,以及pre-training MLM + pre-training-NSP + pre-training-KD
訓(xùn)練策略上,有三種方式:

  1. 將KD作為附加預(yù)訓(xùn)練的附加任務(wù)苟耻,即一起訓(xùn)練篇恒;
  2. 分層訓(xùn)練,每次訓(xùn)練一層凶杖,同時(shí)凍結(jié)之前的層胁艰;
  3. 分開訓(xùn)練,首先訓(xùn)練遷移官卡,然后單獨(dú)進(jìn)行pre-training.

此外蝗茁,為了提高推理速度,將gelu 替換為更快的 relu 寻咒,LayerNormalization 替換為 更簡單的NoNorm哮翘,也做了量化的實(shí)驗(yàn)。

優(yōu)點(diǎn)

  1. 首先mobileBERT容量更小毛秘,推理更快饭寺,與任務(wù)無關(guān),可以當(dāng)bert來直接在下游fine-tuning叫挟,而之前的KD大多數(shù)時(shí)候需要與任務(wù)綁定并使用數(shù)據(jù)
    增強(qiáng)艰匙,才能達(dá)到不錯(cuò)的性能;
  2. 論文實(shí)驗(yàn)非常詳實(shí)抹恳,包括如何選擇inter-block size, intra-block size, 不同訓(xùn)練策略如何影響等;
  3. 訓(xùn)練策略上员凝,除了之前的一起訓(xùn)練完,實(shí)驗(yàn)了兩種新的訓(xùn)練方式奋献,而最終的一層一層的訓(xùn)練與skip connection 有異曲同工的作用:每層都學(xué)一小部分
    內(nèi)容健霹,從而降低學(xué)習(xí)的難度旺上;
  4. 替換了gelu 和 LayerNormalization,進(jìn)一步提速.

缺點(diǎn)

  1. 要訓(xùn)練一個(gè)IBBERT作為teacher,而這個(gè)模型容量與BERT-Large差不多糖埋,增加了訓(xùn)練難度.

論文總結(jié)

以上論文的遷移過程其實(shí)可以總結(jié)為兩類:

  1. soft label遷移宣吱,即主要遷移Teacher 模型最后分類層的logits 及相應(yīng)的soft label;
  2. feature遷移瞳别,即除了最后分類層外征候,還遷移Teacher 模型中的output/attention/embedding等特征。

Student 的選擇上祟敛,除了自定義外疤坝,還可以選擇跟Teacher 同結(jié)構(gòu),而為了降低參數(shù)量垒棋,可以選擇將模型變矮/變窄/減小hidden size 等方式卒煞。
而為了蒸餾后的模型能更加的general,適應(yīng)更多的task叼架,就需要遷移更多的信息畔裕,設(shè)計(jì)上也越復(fù)雜。

想法

實(shí)際工作上乖订,大多數(shù)時(shí)候我們都是需要一個(gè)task 來做模型扮饶,而以上論文中告訴我們,遷移的信息越多乍构,Student 的性能越好甜无。而針對(duì)具體task ,我覺得
比較簡潔有效的一種方式是采用更矮的Teacher 來作為Student 哥遮,這樣可以直接將Teacher 中的前幾層的信息完全遷移過來岂丘,然后在object 上,
加入遷移Teacher 在train data 上的logits 眠饮,這樣就可以比較有效的進(jìn)行蒸餾了奥帘。
除此之外,讓我們換個(gè)角度看看為什么logits 能增強(qiáng)Student 模型的性能呢仪召?除了遷移的角度外寨蹋,其實(shí)logits 提供了label
更多的信息(不同類別的相對(duì)關(guān)系),而這個(gè)額外信息只要優(yōu)于隨機(jī)分布扔茅,就能對(duì)模型提供更多的約束信息已旧,從而增強(qiáng)模型性能,即當(dāng)前的模型可以看
作是分別擬合ground truth 和 logits的兩個(gè)模型的<code>ensemble</code>召娜,只不過是兩個(gè)模型共享參數(shù)运褪。
上面我們提到只要logits </code>優(yōu)于隨機(jī)</code>,對(duì)Student 模型來說就會(huì)有所提升,那logits 由誰產(chǎn)生的其實(shí)并不重要吐句。所以胁后,我們除了可以用Teacher 產(chǎn)生的
logits來增強(qiáng)Student 模型外,我們還可以增強(qiáng)Teacher 模型嗦枢,或者直接用Student 先學(xué)習(xí)一下,產(chǎn)生logits屯断,再用Student 去遷移上次產(chǎn)生的logits文虏。
想到這里,我不禁的有個(gè)大膽的想法:<code>既然我可以一邊生成logits殖演, 一邊學(xué)習(xí)logits氧秘,那我不是可以持續(xù)這個(gè)過程,直到模型完全擬合train data趴久,
生成的logits退化為one-hot丸相,那此時(shí)的模型是不是能得到一個(gè)非常大的提升呢?</code>

實(shí)驗(yàn)

實(shí)驗(yàn)的基本設(shè)置是用12層bert 作為Teacher model 彼棍,用3層bert 作為Student model 灭忠。soften labels 采用Temperature 平滑后的結(jié)果,此外座硕,
Student model 除了學(xué)習(xí) soften labels 的外弛作,也需要學(xué)習(xí)ground truth。

Teacher-to-Student

Teacher model 在train data 上訓(xùn)練华匾,然后在train data 上生成對(duì)應(yīng)的soften labels映琳,Student model 學(xué)習(xí)ground truth 和 soften labels。

student-to-student

既然soften labels 是一種對(duì)labels 的一種平滑估計(jì)蜘拉,那我們可以用任何方式去估計(jì)他萨西,所以這里我們就用student 去做一個(gè)估計(jì):
student model 在train data 上進(jìn)行訓(xùn)練,然后在train data 上生成對(duì)應(yīng)的soften labels 旭旭,將 student model 利用bert 預(yù)訓(xùn)練結(jié)果重新初始化谎脯,
然后去學(xué)習(xí)ground truth 和 soften labels.

normal-noise-training

既然是對(duì)labels 的一個(gè)估計(jì),那假如給一個(gè)隨機(jī)的估計(jì)您机,只要保證生成的logits 中true label 對(duì)應(yīng)的值最大穿肄,就能對(duì)Student 模型進(jìn)行一定程度的提升:
直接在train label 上添加一個(gè)normal noise ,然后重新進(jìn)行平滑后歸一际看,作為soften labels讓student model 去學(xué)習(xí)咸产。

實(shí)驗(yàn)結(jié)果

\begin{array}{c|c|c} \hline \\ \text{teacher standalone} & \text{student standalone} & \text{teacher-to-student} & \text{teacher-to-teacher} & \text{student-to-student} & \text{normal-noise-student}\\ \hline \\ 60.21\% & 58.14\% & 60.14\% & 60.14\% & 61.07\% & 59.5\% \end{array}

從結(jié)果中可以看到:

  1. 優(yōu)于隨機(jī)的logits 對(duì)Student 模型有一定的提升,估計(jì)越準(zhǔn)確仲闽,提升越高脑溢;
  2. 越大的模型性能越好;
    3.迭代進(jìn)行l(wèi)ogits 的生成與訓(xùn)練不能進(jìn)一步提高模型性能,原因主要是新的logits 分布相比之前的對(duì)模型的提升非常小,此外這個(gè)分布也比較容易擬
    合屑彻,所以無法進(jìn)一步提升验庙。

完整實(shí)驗(yàn)代碼地址distilling_knowledge_bert

總結(jié)

本文主要針對(duì)目前針對(duì)BERT 的知識(shí)蒸餾進(jìn)行了總結(jié),并提出了針對(duì)具體任務(wù)時(shí)可行的簡潔方案社牲,同時(shí)在新的視角下探討了知識(shí)蒸餾有效的一些原因粪薛,
并通過實(shí)驗(yàn)進(jìn)行了驗(yàn)證,發(fā)表順序上上篇bert-of-theseus 更晚一些搏恤,有興趣的可以再去看一下上一篇违寿。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市熟空,隨后出現(xiàn)的幾起案子藤巢,更是在濱河造成了極大的恐慌,老刑警劉巖息罗,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掂咒,死亡現(xiàn)場離奇詭異,居然都是意外死亡迈喉,警方通過查閱死者的電腦和手機(jī)绍刮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弊添,“玉大人录淡,你說我怎么就攤上這事∮桶樱” “怎么了嫉戚?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長澈圈。 經(jīng)常有香客問我彬檀,道長,這世上最難降的妖魔是什么瞬女? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任窍帝,我火速辦了婚禮,結(jié)果婚禮上诽偷,老公的妹妹穿的比我還像新娘坤学。我一直安慰自己,他們只是感情好报慕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布深浮。 她就那樣靜靜地躺著,像睡著了一般眠冈。 火紅的嫁衣襯著肌膚如雪飞苇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音布卡,去河邊找鬼雨让。 笑死,一個(gè)胖子當(dāng)著我的面吹牛忿等,可吹牛的內(nèi)容都是我干的栖忠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贸街,長吁一口氣:“原來是場噩夢啊……” “哼娃闲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起匾浪,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎卷哩,沒想到半個(gè)月后蛋辈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡将谊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年冷溶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尊浓。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逞频,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出栋齿,到底是詐尸還是另有隱情苗胀,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布瓦堵,位于F島的核電站基协,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏菇用。R本人自食惡果不足惜澜驮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惋鸥。 院中可真熱鬧杂穷,春花似錦、人聲如沸卦绣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迎卤。三九已至拴鸵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背劲藐。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工八堡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人聘芜。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓兄渺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親汰现。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挂谍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容