完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制

完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制算法

1 Basic Models


Sequence to sequence(序列)模型在機器翻譯和語音識別方面都有着普遍的應用。下面,咱們來看一個機器翻譯的簡單例子:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
針對該機器翻譯問題,可使用「編碼網絡(encoder network)」+「解碼網絡(decoder network)」兩個RNN模型組合的形式來解決。encoder network將輸入語句編碼爲一個特徵向量,傳遞給decoder network,完成翻譯。具體模型結構以下圖所示:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
其中,encoder vector表明了輸入語句的編碼特徵。encoder network和decoder network都是RNN模型,可以使用GRU或LSTM單元。這種「編碼網絡(encoder network)」+「解碼網絡(decoder network)」的模型,在實際的機器翻譯應用中有着不錯的效果。api

這種模型也能夠應用到圖像捕捉領域。圖像捕捉,即捕捉圖像中主體動做和行爲,描述圖像內容。例以下面這個例子,根據圖像,捕捉圖像內容。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
首先,能夠將圖片輸入到CNN,例如使用預訓練好的AlexNet,刪去最後的softmax層,保留至最後的全鏈接層。則該全鏈接層就構成了一個圖片的特徵向量(編碼向量),表徵了圖片特徵信息。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
而後,將encoder vector輸入至RNN,即decoder network中,進行解碼翻譯。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制網絡

2 Picking the Most Likely Sentence


Sequence to sequence machine translation模型與咱們第一節課介紹的language模型有一些類似,但也存在不一樣之處。兩者模型結構以下所示:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
Language model是自動生成一條完整語句,語句是隨機的。而machine translation model是根據輸入語句,進行翻譯,生成另一條完整語句。上圖中,綠色部分表示encoder network,紫色部分表示decoder network。decoder network與language model是類似的,encoder network能夠當作是language model的輸入,是模型的一個條件。也就是說,在輸入語句的條件下,生成正確的翻譯語句。所以,machine translation能夠當作是有條件的語言模型(conditional language model)。這就是兩者之間的區別與聯繫。機器學習

因此,machine translation的目標就是根據輸入語句,做爲條件,找到最佳翻譯語句,使其機率最大:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
例如,本節筆記開始介紹的例子,列舉幾個模型可能獲得的翻譯:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
實現優化目標的方法之一是使用貪婪搜索(greedy search)。Greedy search根據條件,每次只尋找一個最佳單詞做爲翻譯輸出,力求把每一個單詞都翻譯準確。例如,首先根據輸入語句,找到第一個翻譯的單詞「Jane」,而後再找第二個單詞「is」,再繼續找第三個單詞「visiting」,以此類推。這也是其「貪婪」名稱的由來。ide

Greedy search存在一些缺點。首先,由於greedy search每次只搜索一個單詞,沒有考慮該單詞先後關係,機率選擇上有可能會出錯。例如,上面翻譯語句中,第三個單詞「going」比「visiting」更常見,模型極可能會錯誤地選擇了「going」,而錯失最佳翻譯語句。其次,greedy search大大增長了運算成本,下降運算速度。性能

所以,greedy search並非最佳的方法。下一小節,咱們將介紹Beam Search,使用近似最優的查找方式,最大化輸出機率,尋找最佳的翻譯語句。學習

3 Beam Search


Greedy search每次是找出預測機率最大的單詞,而beam search則是每次找出預測機率最大的B個單詞。其中,參數B表示取機率最大的單詞個數,可調。本例中,令B=3。測試

按照beam search的搜索原理,首先,先從詞彙表中找出翻譯的第一個單詞機率最大的B個預測單詞。例如上面的例子中,預測獲得的第一個單詞爲:in,jane,september。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
而後,再分別以in,jane,september爲條件,計算每一個詞彙表單詞做爲預測第二個單詞的機率。從中選擇機率最大的3個做爲第二個單詞的預測值,獲得:in september,jane is,jane visits。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
此時,獲得的前兩個單詞的3種狀況的機率爲:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
接着,再預測第三個單詞。方法同樣,分別以in september,jane is,jane visits爲條件,計算每一個詞彙表單詞做爲預測第三個單詞的機率。從中選擇機率最大的3個做爲第三個單詞的預測值,獲得:in september jane,jane is visiting,jane visits africa。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
此時,獲得的前三個單詞的3種狀況的機率爲:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
以此類推,每次都取機率最大的三種預測。最後,選擇機率最大的那一組做爲最終的翻譯語句。優化

Jane is visiting Africa in September.ui

值得注意的是,若是參數B=1,則就等同於greedy search。實際應用中,能夠根據不一樣的須要設置B爲不一樣的值。通常B越大,機器翻譯越準確,但同時也會增長計算複雜度。

4 Refinements to Beam Search


Beam search中,最終機器翻譯的機率是乘積的形式:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
多個機率相乘可能會使乘積結果很小,遠小於1,形成數值下溢。爲了解決這個問題,能夠對上述乘積形式進行取對數log運算,即:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
由於取對數運算,將乘積轉化爲求和形式,避免了數值下溢,使得數據更加穩定有效。

這種機率表達式還存在一個問題,就是機器翻譯的單詞越多,乘積形式或求和形式獲得的機率就越小,這樣會形成模型傾向於選擇單詞數更少的翻譯語句,使機器翻譯受單詞數目的影響,這顯然是不太合適的。所以,一種改進方式是進行長度歸一化,消除語句長度影響。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
實際應用中,一般會引入歸一化因子α:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
若α=1,則徹底進行長度歸一化;若α=0,則不進行長度歸一化。通常令α=0.7,效果不錯。

值得一提的是,與BFS (Breadth First Search) 、DFS (Depth First Search)算法不一樣,beam search運算速度更快,可是並不保證必定能找到正確的翻譯語句。

5 Error Analysis in Beam Search


Beam search是一種近似搜索算法。實際應用中,若是機器翻譯效果很差,須要經過錯誤分析,判斷是RNN模型問題仍是beam search算法問題。

通常來講,增長訓練樣本、增大beam search參數B都能提升準確率。可是,這種作法並不能獲得咱們期待的性能,且並不實際。

首先,爲待翻譯語句創建人工翻譯,記爲y∗。在RNN模型上使用beam search算法,獲得機器翻譯,記爲y^。顯然,人工翻譯y∗最爲準確。

Jane visite l’Afrique en septembre.
Human: Jane visits Africa in September. y∗
Algorithm: Jane visited Africa last September. y^

這樣,整個模型包含兩部分:RNN和beam search算法。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
若是beam search算法表現不佳,能夠調試參數B;若RNN模型很差,則能夠增長網絡層數,使用正則化,增長訓練樣本數目等方法來優化。更多錯誤分析方法,能夠參照以前的筆記:吳恩達《構建機器學習項目》精煉筆記(2)– 機器學習策略(下)

6 Bleu Score(optional)


使用bleu score,對機器翻譯進行打分。

首先,對原語句創建人工翻譯參考,通常有多我的工翻譯(利用驗證集火測試集)。例以下面這個例子:

French: Le chat est sur le tapis.
Reference 1: The cat is on the mat.
Reference 2: There is a cat on the mat.

上述兩我的工翻譯都是正確的,做爲參考。相應的機器翻譯以下所示:

French: Le chat est sur le tapis.
Reference 1: The cat is on the mat.
Reference 2: There is a cat on the mat.
MT output: the the the the the the the.

如上所示,機器翻譯爲「the the the the the the the.」,效果不好。Bleu Score的宗旨是機器翻譯越接近參考的人工翻譯,其得分越高,方法原理就是看機器翻譯的各個單詞是否出如今參考翻譯中。

最簡單的準確度評價方法是看機器翻譯的每一個單詞是否出如今參考翻譯中。顯然,上述機器翻譯的每一個單詞都出如今參考翻譯裏,準確率爲7/7=1,其中,分母爲機器翻譯單詞數目,分子爲相應單詞是否出如今參考翻譯中。可是,這種方法很不科學,並不可取。

另一種評價方法是看機器翻譯單詞出如今參考翻譯單個語句中的次數,取最大次數。上述例子對應的準確率爲2/7,其中,分母爲機器翻譯單詞數目,分子爲相應單詞出如今參考翻譯中的次數(分子爲2是由於「the」在參考1中出現了兩次)。這種評價方法較爲準確。

上述兩種方法都是對單個單詞進行評價。按照beam search的思想,另一種更科學的打分方法是bleu score on bigrams,即同時對兩個連續單詞進行打分。仍然是上面那個翻譯例子:

French: Le chat est sur le tapis.
Reference 1: The cat is on the mat.
Reference 2: There is a cat on the mat.
MT output: The cat the cat on the mat.

對MIT output進行分解,獲得的bigrams及其出如今MIT output中的次數count爲:

the cat: 2
cat the: 1
cat on: 1
on the: 1
the mat: 1

而後,統計上述bigrams出如今參考翻譯單個語句中的次數(取最大次數)countclipcountclip爲:

the cat: 1
cat the: 0
cat on: 1
on the: 1
the mat: 1

相應的bigrams precision爲:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
若是隻看單個單詞,相應的unigrams precision爲:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
若是是n個連續單詞,相應的n-grams precision爲:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
總結一下,能夠同時計算p1,⋯,pnp1,⋯,pn,再對其求平均:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
一般,對上式進行指數處理,並引入參數因子brevity penalty,記爲BP。顧名思義,BP是爲了「懲罰」機器翻譯語句太短而形成的得分「虛高」的狀況。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
其中,BP值由機器翻譯長度和參考翻譯長度共同決定。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制

7 Attention Model Intuition


若是原語句很長,要對整個語句輸入RNN的編碼網絡和解碼網絡進行翻譯,則效果不佳。相應的bleu score會隨着單詞數目增長而逐漸下降。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
對待長語句,正確的翻譯方法是將長語句分段,每次只對長語句的一部分進行翻譯。人工翻譯也是採用這樣的方法,高效準確。也就是說,每次翻譯只注重一部分區域,這種方法使得bleu score不太受語句長度的影響。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
根據這種「局部聚焦」的思想,創建相應的注意力模型(attention model)。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制

8 Attention Models


完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制

Attention model的一個缺點是其計算量較大,若輸入句子長度爲Tx,輸出句子長度爲Ty,則計算時間約爲Tx∗Ty。可是,其性能提高不少,計算量大一些也是能夠接受的。

有趣的是,Attention model在圖像捕捉方面也有應用。

Attention model能有效處理不少機器翻譯問題,例以下面的時間格式歸一化:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
下圖將注意力權重可視化:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
上圖中,顏色越白表示注意力權重越大,顏色越深表示權重越小。可見,輸出語句單詞與其輸入語句單詞對應位置的注意力權重較大,即對角線附近。

9 Speech Recognition


深度學習中,語音識別的輸入是聲音,量化成時間序列。更通常地,能夠把信號轉化爲頻域信號,即聲譜圖(spectrogram),再進入RNN模型進行語音識別。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
以前,語言學家們會將語音中每一個單詞分解成多個音素(phoneme),構建更精準的傳統識別算法。但在end-to-end深度神經網絡模型中,通常不須要這麼作也能獲得很好的識別效果。一般訓練樣本很大,須要上千上萬個小時的語音素材。

語音識別的注意力模型(attention model)以下圖所示:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
通常來講,語音識別的輸入時間序列都比較長,例如是10s語音信號,採樣率爲100Hz,則語音長度爲1000。而翻譯的語句一般很短,例如「the quick brown fox」,包含19個字符。這時候,Tx與Ty差異很大。爲了讓Tx=Ty,能夠把輸出相應字符重複並加入空白(blank),形如:
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
其中,下劃線」「表示空白,」⊔「表示兩個單詞之間的空字符。這種寫法的一個基本準則是沒有被空白符」「分割的重複字符將被摺疊到一塊兒,即表示一個字符。

這樣,加入了重複字符和空白符、空字符,可讓輸出長度也達到1000,即Tx=Ty。這種模型被稱爲CTC(Connectionist temporal classification)。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制

10 Trigger Word Detection


觸發字檢測(Trigger Word Detection)在不少產品中都有應用,操做方法就是說出觸發字經過語音來啓動相應的設備。例如Amazon Echo的觸發字是」Alexa「,百度DuerOS的觸發字是」小度你好「,Apple Siri的觸發字是」Hey Siri「,Google Home的觸發字是」Okay Google「。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
觸發字檢測系統可使用RNN模型來創建。以下圖所示,輸入語音中包含一些觸發字,其他都是非觸發字。RNN檢測到觸發字後輸出1,非觸發字輸出0。這樣訓練的RNN模型就能實現觸發字檢測。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制
可是這種模型有一個缺點,就是一般訓練樣本語音中的觸發字較非觸發字數目少得多,即正負樣本分佈不均。一種解決辦法是在出現一個觸發字時,將其附近的RNN都輸出1。這樣就簡單粗暴地增長了正樣本。
完結篇 | 吳恩達《序列模型》精煉筆記(3)-- 序列模型和注意力機制

相關文章
相關標籤/搜索