Beam Search 及5種優化方法


Beam Search 及5種優化方法

參考:吳恩達 深度學習 筆記 Course 5 Week 3 Sequence Models

回顧beam search:

對greedy search進行了改進:擴大搜索空間,更容易得到全局最優解。beam search包含一個參數beam width \(B\),表示每個時間步保留得分最高的B個序列,然后下一時間步用這\(B\)個候選序列繼續生成。

在sequence models中,input text \(\{x^{<1>},\dots,x^{<T_x>}\}\)輸入Encoder,再通過Decoder,softmax層會輸出詞表大小\(|V|\)個輸出概率值。

Beam Search的步驟:

  1. 找到第一個輸出的概率值\(P(y^{<1>}|x)\),取最大的前\(B\)個單詞保存。
  2. 分別計算前面\(B\)種情況下的Decoder輸出\(P(y^{<2>}|x,y^{<1>})\),將會有\(B\cdot|V|\)個結果,最大化整個句子的概率\(P(y^{<1>},y^{<2>}|x)=P(y^{<1>}|x)P(y^{<2>}|x,y^{<1>})\),即第一個、第二個詞對有最大的概率,從中選擇概率最高的\(B\)個結果並保存。
  3. 每一步都有\(B\)個網絡副本,來評估下一個單詞的概率。繼續計算並選擇,直到出現句尾符號<EOS>

吳恩達的Andrew Ng的Coursera深度學習課程中提出了Beam Search的Refinement,如下面Normalization的第一部分。

Beam Search的優化方法有幾類:

  • Hypothesis filtering:對生成的候選序列進行過濾。
  • Normalization:針對Beam Search得分函數的改進。
  • Decoding with auxiliary language model:利用輔助語言模型改進decoder。
  • Decoding with lexical constraints:添加對單詞或短語的限制,decoder生成時需要參照限制詞表。
  • Search algorithms:優化搜索策略,尋找更高效的算法。

2. Beam Search Refinement

2.1 Hypothesis filtering

可以通過控制 (unkown words) 數量來對 beam search 生成的 hypotheses 進行 filtering. 當一個 hypothese 包含太多 時可以將其 drop 掉。需要注意的是,drop hypotheses 會暫時降低 beam size。

2.2 Normalization

主要是對beam search的得分函數進行改進,包括對輸出句子的長度和coverage添加懲罰。

2.2.1 Length Normalization

參考:吳恩達 深度學習 筆記 Course 5 Week 3 Sequence Models

Beam Search 要最大化的概率\(P(y^{<1>},\dots,y^{<T_y>}|X)\),即衡量整個句子的概率,可以表示成條件概率的乘積:

\[P(y^{<1>},\dots,y^{<T_y>}|X)=P(y^{<1>}|X)P(y^{<2>}|X,y^{<1>})P(y^{<3>}|X,y^{<1>},y^{<2>})\dots P(y^{<T_y>}|X,y^{<1>},y^{<2>},\dots,y^{<T_y-1>}) \]

因為每個條件概率都是小於1,多個小於1的數值相乘,會造成數值下隘(numerical underflow)。數值太小,導致電腦的浮點表示不能精確地存儲,所以實踐中不能最大化這個乘積,而是取\(log\)值。

最大化\(logP(y|x)\)求和的概率值,數值更穩定,不容易出現數值誤差(rounding errors)或數值下溢。因為對數函數(\(log\)函數)是嚴格單調遞增的函數,最大化\(logP(y|x)\)和最大化\(P(y|x)\)是等價的。實際工作中,我們總是記錄概率的對數和(the sum of logs of the probabilities),而不是概率的乘積(the production of probabilities)。

總結對beam search的目標函數的改進:

  • 對於beam search的原始目標函數

\[arg \max_{y} \prod_{t=1}^{T_y}P(y^{<t>}|X,y^{<1>},\dots,y^{<t-1>}) \]

如果一個句子很長,那么這個句子的概率會很低,因為多個小於1的數字相乘得到一個更小的概率值。這個目標函數會傾向於短的輸出,因為短句子的概率由更少數的小於1的數字乘積得到。

  • 對於改進后的beam search的目標函數

\[arg \max_{y} \sum_{t=1}^{T_y}logP(y^{<t>}|X,y^{<1>},\dots,y^{<t-1>}) \]

每個概率\(P(y|x)\in(0,1]\),而\(log P(y|x)\)是負數。如果句子很長,加起來的項很多,結果越為負。所以這個目標函數也會影響較長的輸出,因為長句子一直累加目標函數的值會十分小。

  • 改進beam search:引入歸一化,降低輸出長句子的懲罰。

\[arg \max_{y} \frac{1}{T_y^{\alpha}}\sum_{t=1}^{T_y}logP(y^{<t>}|X,y^{<1>},\dots,y^{<t-1>}) \]

\(\alpha\in [0,1]\)是一個超參數,一般取\(\alpha=0.7\)。取值是試探性的,可以嘗試不同的值,看哪一個能得到最好的結果。

  • \(\alpha=0\),不歸一化。
  • \(\alpha=1\),標准的長度歸一化。

在Beam Search最后使用上式選擇一個最優的句子。

如何選擇\(B\)?

  • \(B\)越大(10~100),考慮的情況越多,得到更好的結果,計算量越大,速度越慢。
  • \(B\)取小(1~10),得到的結果可能不夠好,計算速度快。
  • 一般選擇\(B=10\)

Beam Search與DFS/BFS不同,是近似搜索算法/啟發式算法,不是找全局最優,而是找局部最優。

在實際項目中,如何發現是RNN模型出了問題,還是Beam Search出了問題?

增加\(B\)一般不會影響模型,就像增加數據集。

Beam Search中的誤差分析:

在翻譯任務中,\(y^*\)表示人工翻譯結果,\(\hat{y}\)表示算法結果。

用RNN模型計算\(P(y^*|x)\)\(P(\hat{y}|x)\),即比較期望值概率和輸出概率的大小,來發現是RNN還是Beam Search的問題。

  • 第一種情況:\(P(y^*|x)>P(\hat{y}|x)\),Beam Search出錯。

    期望值概率更高,但是Beam Search沒有選擇期望值,是Beam Search的問題,可以通過增加B來改善。

  • 第二種情況:\(P(y^*|x)\le P(\hat{y}|x)\),RNN模型出錯,需要在RNN模型上花更多時間。

    RNN模型給出了錯誤的概率\(P(y^*|x)\),給一個好的句子小的概率。可以通過正則化,更大的訓練數據,不同的網絡結構等方法改進。

如果使用長度歸一化,則需要用歸一化后的值來判斷。

誤差分析過程如下圖所示,先遍歷development set,找出算法產生的錯誤。例如,\(P(y^*|x)=2\times 10^{-10}, P(\hat{y}|x)=1\times 10^{-10}\),屬於第一種情況,Beam Search出錯。后面依次標注錯誤類型,通過這個誤差分析過程,得出Beam Search和RNN模型出錯的比例是多少。如果發現Beam Search造成大部分錯誤,可以增大beam width。相反,如果發現RNN模型造成更多錯誤,可以進行更深層次的分析:是否需要增加正則化、獲得更多訓練數據、嘗試一個不同的網絡結構或其他方案。

2.2.2 Coverage Normalization

論文1:Coverage-based Neural Machine Translation

論文2:Google’s Neural Machine Translation System: Bridging the Gapbetween Human and Machine Translation

這里將Beam Search 的目標函數稱為Beam Search得分函數score。采用對數似然作為得分函數,如下所示,Beam Search會傾向於更短的序列。引入length normalization對長度進行歸一化可以解決這一問題。

\[score(x,y)=\sum_{t=1}^{T_y}logP(y_t|x,y_{<t}) \]

2016年華為諾亞方舟實驗室的論文1提到,機器翻譯的時候會存在over translation or undertranslation due to attention coverage 。作者提出了coverage-based atttention機制來解決coverage 問題。

Google’s Neural Machine Translation System 的論文2<7. Decoder>提出了 length normalization 和 coverage penalty。coverage penalty 主要用於使用 Attention 的場合,通過 coverage penalty 可以讓 Decoder 均勻地關注於輸入序列 x 的每一個 token,防止一些 token 獲得過多的 Attention。

論文2把對數似然、length normalization 和 coverage penalty 結合在一起,可以得到新的beam search得分函數,如下面的公式所示,其中\(X\)是source,\(Y\)是當前target, \(lp\) 是 length normalization,\(cp\) 是 coverage penalty,\(p_{i,j}\)是第\(j\)個target對應第\(i\)個輸入的Attention值。超參數\(\alpha\)\(\beta\)分別控制length normalization 和 coverage penalty。如果\(\alpha=0 \;\& \;\beta=0\),Decoder就退回普通的Beam Search。

2.2.3 End of sentence Normalization

參考:Beam search

有時Decoder生成序列很難停止,此時需要對最大生成長度進行控制,可以采用下面的公式進行約束:

\[ep(X,Y)=\gamma\frac{|X|}{|Y|} \]

其中 \(|X|\)是source的長度,\(|Y|\)是當前target的長度,\(\gamma\)是End of sentence normalization的系數。那么由上式可知,target長度越長的話,上述得分越低,這樣就會防止出現生成序列不停止的情況。

對於得分函數的改進方法,還有很多,例如有論文《 A Diversity-Promoting Objective Function for Neural Conversation Models》采用最大化互信息MMI(Maximum Mutual Information)作為目標函數,也可以作為Beam Search的得分函數。

2.3 Decoding with auxiliary language model

Beam search 還可以利用一個輔助的 language model 來定義 score function, 例如 “Shallow Fusion”:

\[s(Y,X)=s_{TM}(Y,X)+\beta \cdot s_{LM}(Y) \]

其中\(s_{LM}(Y)\)是輸出序列\(Y\)的語言模型\(LM\)的對數概率,\(\beta\)是一個超參數。需要注意的是語言模型\(LM\)不能使用雙向RNN,需要與翻譯模型$TM $共享相同的詞匯表(標記和特征)。

2.4 Decoding with lexical constraints

添加詞表的限制,使得beam search只要在輸入端找到對應的source token,那就限制詞語或短語的生成。在論文Lexically Constrained Decoding for Sequence Generation Using Grid Beam Search中描述了Grid Beam Search方法,接受簡單的one-token constraints。

2.5 Search algorithms

論文《Best-First Beam Search》關注於提升 Beam Search 的搜索效率,提出了 Best-First Beam Search 算法,Best-First Beam Search 可以在更短時間內得到和 標准Beam Search 相同的搜索結果。論文中提到 Beam Search 的時間和得分函數調用次數成正比,如下圖所示,因此作者希望通過減少得分函數的調用次數,從而提升 Beam Search 效率。

Best-First Beam Search 使用了優先隊列並定義新的比較運算符,從而可以減少調用得分函數的次數,更快停止搜索。

3. References

Beam search

Google’s Neural Machine Translation System: Bridging the Gapbetween Human and Machine Translation

【RNN】深扒能提高預測准確率的beam search

Coursera深度學習教程中文筆記

Sequence Models

吳恩達 深度學習 筆記 Course 5 Week 3 Sequence Models

詳細介紹 Beam Search 及其優化方法

beam Seach refinement

Modeling Coverage for Neural Machine Translation

COVERAGE-BASEDNEURALMACHINETRANSLATION

Coverage-based Neural Machine Translation

A Diversity-Promoting Objective Function for Neural Conversation Models

A Diversity-Promoting Objective Function for Neural Conversation Models論文閱讀

Best-First Beam Search


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM