ACL 2018使用知識蒸餾提高基於搜尋的結構預測

哈工大SCIR發表於2018-07-03

1 基於搜尋的結構預測

1.1 結構預測

自然語言結構預測是這樣一類問題:問題的輸出有多個變數,並且變數之間有相互依賴。圖1給出了結構預測與分類的一個對比。可以看到,對於圖1中的結構預測問題——機器翻譯,演算法要輸出四個變數(對應四個翻譯的詞),而且翻譯出的四個詞是相互依賴的。

ACL 2018使用知識蒸餾提高基於搜尋的結構預測

圖1 分類(上)與結構預測(下)的對比

1.2 基於搜尋的結構預測:搜尋過程、打分函式與學習演算法

一種求解這些多變數的方法是將求解過程建模為一個搜尋過程。我們從起始狀態出發,每次選擇一個搜尋動作(對於機器翻譯來講,可以認為從詞表中選一個詞作為翻譯是一個搜尋動作),進入新的狀態。不斷重複這一過程,就可以獲得最終的結構(如圖2所示)。

ACL 2018使用知識蒸餾提高基於搜尋的結構預測

圖2 基於搜尋的結構預測與控制預測過程的打分函式

在這個搜尋過程中,我們需要一個打分函式。這個打分函式告訴我們:在一個狀態下,每個動作的可行性有多大。一種常見的方法是將這個打分函式建模為一個分類器(如圖2中的p)。這個打分函式的一般學習過程可以歸納為:首先根據專家知識找到一個正確的搜尋狀態序列(圖3中橙色的搜尋序列)。然後,在這些正確的狀態上,以正確的搜尋動作為正例訓練分類器。

ACL 2018使用知識蒸餾提高基於搜尋的結構預測

圖3 基於搜尋的結構預測的一般學習過程及其問題

1.3 問題

上述學習過程有兩種常見的問題:

  • 訓練資料歧義性:在我們的翻譯的例子裡,”這“可以翻譯this也可以翻譯為the,但訓練資料往往只有一種參考翻譯。

  • 訓練測試不一致:在訓練分類器時,我們是基於正確的搜尋狀態。但在實際測試階段,演算法會進入錯誤狀態(如圖3中的紅色狀態)。我們訓練的分類器往往不具備在錯誤狀態中做決策的能力。

在這項工作中,我們希望通過知識蒸餾(knowledge distillation)統一地解決這兩種問題。

2 知識蒸餾

知識蒸餾[Hinton et al., 2015]是一種機器學習演算法。不同於傳統的從訓練資料中有監督地學習,知識蒸餾從一個複雜模型(teacher model)的概率輸出中學習引數。圖4給出了知識蒸餾的學習目標,以及和對數似然學習目標的對比。當然,兩種學習目標可以通過插值簡單組合。

ACL 2018使用知識蒸餾提高基於搜尋的結構預測

圖4 知識蒸餾學習目標(右)與對數似然學習目標(左)的對比

在這項工作中,我們希望通過知識蒸餾統一地解決基於搜尋的結構預測中的問題。對於訓練資料歧義的問題,前人工作中常見的解決方法是使用模型整合[Dietterich, 2000]。在基於搜尋的結構預測中,我們同樣可以採用模型整合來提高模型應對有歧義訓練資料的能力。然後通過知識蒸餾,將複雜模型(模型整合)的應對歧義的能力轉移到簡單模型中。具體來講,我們可以直接在傳統學習演算法的基礎上將對數似然替換為知識蒸餾的學習目標(如圖5所示)。由於這種知識蒸餾方法在正確狀態(reference state)上進行知識蒸餾,我們將其命名為distilling from reference。

ACL 2018使用知識蒸餾提高基於搜尋的結構預測

圖5 Distilling from reference

對於訓練測試不一致的問題,前人研究的主要解決思路是在訓練過程中引入錯誤狀態並在錯誤狀態上進行模型學習。在這項工作中,我們也沿用了這一思路,用模型整合隨機地探索狀態空間,並在探索到的狀態上使用知識蒸餾目標學習模型引數(如圖6所示)。由於這種知識蒸餾方法在探索得到的狀態(explored state)上進行知識蒸餾,我們將其命名為distilling from exploration。

ACL 2018使用知識蒸餾提高基於搜尋的結構預測

圖6 Distilling from exploration

實踐中,distilling from reference與distilling from exploration可以通過簡單組合來進一步提到學習效果。我們在實驗部分也驗證了這點。

對於Distilling from exploration,我們完全放棄了傳統對數似然的學習目標。後文的實驗分析中,我們經驗性地證明完全從探索中學習知識蒸餾模型也是可行的。

3 實驗

我們在基於轉移的句法分析以及一個小規模機器翻譯資料集上進行了實驗。實驗結果如表1所示。相較基線模型,我們的蒸餾模型在不改變模型結構的情況下將句法分析的準確率提高1.3,並將機器翻譯準確率提高2.6。

表1 實驗結果

ACL 2018使用知識蒸餾提高基於搜尋的結構預測

3.1 模型整合是否具有克服歧義性的能力?

通過在依存句法分析中以dynamic oracle為工具(對於依存句法,d.o.可以在任意狀態下給出最優的動作),我們發現,相較基線模型,模型整合選擇的動作與dynamic oracle的選擇來更接近。

3.2 完全從探索中學習知識蒸餾模型是否可行?

我們通過改變α調整從知識蒸餾學習的比例。我們發現,兩個任務都呈現出越多地從知識蒸餾中學習,效果越好。這說明完全從探索中學習知識蒸餾模型是可行的。

ACL 2018使用知識蒸餾提高基於搜尋的結構預測

圖7 α值與開發集效能的曲線

3.3 從知識蒸餾中學習是穩定的嗎?

從violin-plot來看,從知識蒸餾中學習模型相較基線模型來講對初始化更不敏感,有更好的模型穩定性。

ACL 2018使用知識蒸餾提高基於搜尋的結構預測

圖8 模型穩定性

4 結論與補充資源

我們嘗試用知識蒸餾解決基於搜尋的結構預測的問題,並且取得了模型效能的顯著提高。實驗分析給出了知識蒸餾應用於基於搜尋的結構預測的一些性質並經驗性地解釋了效能提高的原因。

  • 論文:https://arxiv.org/abs/1805.11224

  • 依存句法程式碼:https://github.com/Oneplus/twpipe

  • 機器翻譯程式碼:https://github.com/Oneplus/OpenNMT-py

  • AIS演講視訊(34分到43分):https://v.qq.com/x/page/m0686geizuw.html

5 引用文獻

Thomas G. Dietterich. An experimental comparison of three methods for constructing ensembles of decision trees: Bagging, boosting, and randomization. Machine Learning, 40(2):139-157, 2000.

Geoffrey E. Hinton, Oriol Vinyals, and Jeffrey Dean. Distilling the knowledge in a neural network. CoRR, abs/1503.02531, 2015.

相關文章