1. 程式人生 > >吳恩達Coursera深度學習課程 deeplearning.ai (5-3) 序列模型和注意力機制--課程筆記

吳恩達Coursera深度學習課程 deeplearning.ai (5-3) 序列模型和注意力機制--課程筆記

3.1 基礎模型

sequence to sequence

sequence to sequence:兩個序列模型組成,前半部分叫做編碼,後半部分叫做解碼。用於機器翻譯。
image

image to sequence

sequence to sequence:一個卷積神經網路和一個序列模型組成,前半部分叫做編碼,後半部分叫做解碼。用於圖片描述。
image

3.2 選擇最可能的句子

  • 語言模型:根據輸入的零向量根據概率預測輸出,一個單詞一個單詞的生成P(y<1>,y<2>,...,y<
    n>)
  • 機器翻譯:前半部分編碼網路將輸入的句子進行編碼,後半部分解碼網路輸出整個句子的翻譯的多種可能的概率,然後選取最可能的一種。P(y<1>,y<2>,...,y<n>|P(x<1>,x<2>,...,x<m>))

最通用的選取最合適翻譯的演算法是:集束搜尋(Beam Search)

基本原理: 每次找出集束寬度(beam width)個詞,往下進行,預測以 X 和已經預測的 Y 的元素為前提下的下一個詞的概率,仍然保留最可能的集束寬度個詞,以此類推,直到完成整個句子的翻譯。

如果集束寬度為1,那麼就是貪婪演算法了,集束搜尋只不過是每次保留三個而不是一個而已。

以法語翻譯成英語的機器翻譯為例

有:P(y<1>,y<2>|X)=P(y<1>|X)P(y<2>|X,y<1>)
- Step 1:輸入 X 編碼網路,通過softmax層計算各個單詞(詞彙表中的所有單詞)輸出的概率值P(y<1>|X),通過設定集束寬度(beam width)的大小如3,則取前3個最大輸出概率的單詞,並儲存起來。

image

  • Step 2:分別對第一步得到的每一個單詞計算其與單詞表中的所有單片語成詞對的概率P(y<2>|X,y<1>) 。有3×10000個選擇,(這裡假設詞彙表有10000個單詞),最後再通過beam width大小選擇前3個概率最大的輸出對。

image

  • Step 3~Step T:與Step2的過程是相似的,直到遇到句尾符號結束。

image

3.4 改進集束搜尋

長度歸一化

對於集束搜尋演算法,我們的目標就是最大化下面的概率:

argmaxyt=1TyP(y<t>|X,y<1>,y<2>,...,y<t1>)=argmaxyP(y<1>|X)P(y<2>|X,y<1>)...P(y<t>|X,y<1>,y<2>,...,y<t1>)
每一項都是小於1的概率值,大量很小的概率值進行相乘,可能會造成數值下溢。

所以在實踐中,一般不會最大化上面這個公式的乘積,而是取log值,變成log求和最大值,得到一個數值上更加穩定的演算法: