Coursera吴恩达《序列模型》课程笔记(3)-- Sequence models Attention mechanism
紅色石頭的個人網站:redstonewill.com
《Recurrent Neural Networks》是Andrw Ng深度學習專項課程中的第五門課,也是最后一門課。這門課主要介紹循環神經網絡(RNN)的基本概念、模型和具體應用。該門課共有3周課時,所以我將分成3次筆記來總結,這是第三節筆記。
1. Basic Models
Sequence to sequence(序列)模型在機器翻譯和語音識別方面都有著廣泛的應用。下面,我們來看一個機器翻譯的簡單例子:
針對該機器翻譯問題,可以使用“編碼網絡(encoder network)”+“解碼網絡(decoder network)”兩個RNN模型組合的形式來解決。encoder network將輸入語句編碼為一個特征向量,傳遞給decoder network,完成翻譯。具體模型結構如下圖所示:
其中,encoder vector代表了輸入語句的編碼特征。encoder network和decoder network都是RNN模型,可使用GRU或LSTM單元。這種“編碼網絡(encoder network)”+“解碼網絡(decoder network)”的模型,在實際的機器翻譯應用中有著不錯的效果。
這種模型也可以應用到圖像捕捉領域。圖像捕捉,即捕捉圖像中主體動作和行為,描述圖像內容。例如下面這個例子,根據圖像,捕捉圖像內容。
首先,可以將圖片輸入到CNN,例如使用預訓練好的AlexNet,刪去最后的softmax層,保留至最后的全連接層。則該全連接層就構成了一個圖片的特征向量(編碼向量),表征了圖片特征信息。
然后,將encoder vector輸入至RNN,即decoder network中,進行解碼翻譯。
2. Picking the most likely sentence
Sequence to sequence machine translation模型與我們第一節課介紹的language模型有一些相似,但也存在不同之處。二者模型結構如下所示:
Language model是自動生成一條完整語句,語句是隨機的。而machine translation model是根據輸入語句,進行翻譯,生成另外一條完整語句。上圖中,綠色部分表示encoder network,紫色部分表示decoder network。decoder network與language model是相似的,encoder network可以看成是language model的a<0>a<0>,是模型的一個條件。也就是說,在輸入語句的條件下,生成正確的翻譯語句。因此,machine translation可以看成是有條件的語言模型(conditional language model)。這就是二者之間的區別與聯系。
所以,machine translation的目標就是根據輸入語句,作為條件,找到最佳翻譯語句,使其概率最大:
max?P(y<1>,y<2>,?,y<Ty>|x<1>,x<2>,?,x<Tx>)maxP(y<1>,y<2>,?,y<Ty>|x<1>,x<2>,?,x<Tx>)
例如,本節筆記開始介紹的例子,列舉幾個模型可能得到的翻譯:
顯然,第一條翻譯“Jane is visiting Africa in September.”最為準確。那我們的優化目標就是要讓這條翻譯對應的P(y<1>,?,y<Ty>|x)P(y<1>,?,y<Ty>|x)最大化。
實現優化目標的方法之一是使用貪婪搜索(greedy search)。Greedy search根據條件,每次只尋找一個最佳單詞作為翻譯輸出,力求把每個單詞都翻譯準確。例如,首先根據輸入語句,找到第一個翻譯的單詞“Jane”,然后再找第二個單詞“is”,再繼續找第三個單詞“visiting”,以此類推。這也是其“貪婪”名稱的由來。
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。
概率表示為:P(y^<1>|x)P(y^<1>|x)
然后,再分別以in,jane,september為條件,計算每個詞匯表單詞作為預測第二個單詞的概率。從中選擇概率最大的3個作為第二個單詞的預測值,得到:in september,jane is,jane visits。
概率表示為:P(y^<2>|x,y^<1>)P(y^<2>|x,y^<1>)。
此時,得到的前兩個單詞的3種情況的概率為:
P(y^<1>,y^<2>|x)=P(y^<1>|x)?P(y^<2>|x,y^<1>)P(y^<1>,y^<2>|x)=P(y^<1>|x)?P(y^<2>|x,y^<1>)
接著,再預測第三個單詞。方法一樣,分別以in september,jane is,jane visits為條件,計算每個詞匯表單詞作為預測第三個單詞的概率。從中選擇概率最大的3個作為第三個單詞的預測值,得到:in september jane,jane is visiting,jane visits africa。
概率表示為:P(y^<3>|x,y^<1>,y^<2>)P(y^<3>|x,y^<1>,y^<2>)。
此時,得到的前三個單詞的3種情況的概率為:
P(y^<1>,y^<2>,y^<3>|x)=P(y^<1>|x)?P(y^<2>|x,y^<1>)?P(y^<3>|x,y^<1>,y^<2>)P(y^<1>,y^<2>,y^<3>|x)=P(y^<1>|x)?P(y^<2>|x,y^<1>)?P(y^<3>|x,y^<1>,y^<2>)
以此類推,每次都取概率最大的三種預測。最后,選擇概率最大的那一組作為最終的翻譯語句。
Jane is visiting Africa in September.
值得注意的是,如果參數B=1,則就等同于greedy search。實際應用中,可以根據不同的需要設置B為不同的值。一般B越大,機器翻譯越準確,但同時也會增加計算復雜度。
4. Refinements to Beam Search
Beam search中,最終機器翻譯的概率是乘積的形式:
arg?max∏t=1TyP(y^<t>|x,y^<1>,?,y^<t?1>)argmax∏t=1TyP(y^<t>|x,y^<1>,?,y^<t?1>)
多個概率相乘可能會使乘積結果很小,遠小于1,造成數值下溢。為了解決這個問題,可以對上述乘積形式進行取對數log運算,即:
arg?max∑t=1TyP(y^<t>|x,y^<1>,?,y^<t?1>)argmax∑t=1TyP(y^<t>|x,y^<1>,?,y^<t?1>)
因為取對數運算,將乘積轉化為求和形式,避免了數值下溢,使得數據更加穩定有效。
這種概率表達式還存在一個問題,就是機器翻譯的單詞越多,乘積形式或求和形式得到的概率就越小,這樣會造成模型傾向于選擇單詞數更少的翻譯語句,使機器翻譯受單詞數目的影響,這顯然是不太合適的。因此,一種改進方式是進行長度歸一化,消除語句長度影響。
arg?max?1Ty∑t=1TyP(y^<t>|x,y^<1>,?,y^<t?1>)argmax1Ty∑t=1TyP(y^<t>|x,y^<1>,?,y^<t?1>)
實際應用中,通常會引入歸一化因子αα:
arg?max?1Tαy∑t=1TyP(y^<t>|x,y^<1>,?,y^<t?1>)argmax1Tyα∑t=1TyP(y^<t>|x,y^<1>,?,y^<t?1>)
若α=1α=1,則完全進行長度歸一化;若α=0α=0,則不進行長度歸一化。一般令α=0.7α=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?y?。在RNN模型上使用beam search算法,得到機器翻譯,記為y^y^。顯然,人工翻譯y?y?最為準確。
Jane visite l’Afrique en septembre.
Human: Jane visits Africa in September.????y?y?
Algorithm: Jane visited Africa last September.????y^y^
這樣,整個模型包含兩部分:RNN和beam search算法。
然后,將輸入語句輸入到RNN模型中,分別計算輸出是y?y?的概率P(y?|x)P(y?|x)和y^y^的概率P(y^|x)P(y^|x)。
接下來就是比較P(y?|x)P(y?|x)和P(y^|x)P(y^|x)的大小。
P(y?|x)>P(y^|x)P(y?|x)>P(y^|x):Beam search算法有誤
P(y?|x)<P(y^|x)P(y?|x)<P(y^|x):RNN模型有誤
如果beam search算法表現不佳,可以調試參數B;若RNN模型不好,則可以增加網絡層數,使用正則化,增加訓練樣本數目等方法來優化。更多錯誤分析方法,可以參照之前的筆記:Coursera吳恩達《構建機器學習項目》課程筆記(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的宗旨是機器翻譯越接近參考的人工翻譯,其得分越高,方法原理就是看機器翻譯的各個單詞是否出現在參考翻譯中。
最簡單的準確度評價方法是看機器翻譯的每個單詞是否出現在參考翻譯中。顯然,上述機器翻譯的每個單詞都出現在參考翻譯里,準確率為77=177=1,其中,分母為機器翻譯單詞數目,分子為相應單詞是否出現在參考翻譯中。但是,這種方法很不科學,并不可取。
另外一種評價方法是看機器翻譯單詞出現在參考翻譯單個語句中的次數,取最大次數。上述例子對應的準確率為2727,其中,分母為機器翻譯單詞數目,分子為相應單詞出現在參考翻譯中的次數(分子為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為:
countclipcount=1+0+1+1+12+1+1+1+1=46=23countclipcount=1+0+1+1+12+1+1+1+1=46=23
如果只看單個單詞,相應的unigrams precision為:
如果是n個連續單詞,相應的n-grams precision為:
總結一下,可以同時計算p1,?,pnp1,?,pn,再對其求平均:
p=1n∑i=1npip=1n∑i=1npi
通常,對上式進行指數處理,并引入參數因子brevity penalty,記為BP。顧名思義,BP是為了“懲罰”機器翻譯語句過短而造成的得分“虛高”的情況。
p=BP?exp(1n∑i=1npi)p=BP?exp(1n∑i=1npi)
其中,BP值由機器翻譯長度和參考翻譯長度共同決定。
7. Attention Model Intuition
如果原語句很長,要對整個語句輸入RNN的編碼網絡和解碼網絡進行翻譯,則效果不佳。相應的bleu score會隨著單詞數目增加而逐漸降低。
對待長語句,正確的翻譯方法是將長語句分段,每次只對長語句的一部分進行翻譯。人工翻譯也是采用這樣的方法,高效準確。也就是說,每次翻譯只注重一部分區域,這種方法使得bleu score不太受語句長度的影響。
根據這種“局部聚焦”的思想,建立相應的注意力模型(attention model)。
如上圖所示,attention model仍由類似的編碼網絡(下)和解碼網絡(上)構成。其中,S<t>S<t>由原語句附近單元共同決定,原則上說,離得越近,注意力權重(attention weights)越大,相當于在你當前的注意力區域有個滑動窗。
8. Attention Models
Attention model中選擇雙向RNN,可以使用GRU單元或者LSTM。由于是雙向RNN,每個a<t′>a<t′>表示:
a<t′>=(a→<t′>,a←<t′>)a<t′>=(a→<t′>,a←<t′>)
RNN編碼生成特征,注意力權重用αα表示,C是各個RNN神經元經過注意力權重得到的參數值。例如,α<1,t′>α<1,t′>表示機器翻譯的第一個單詞“jane”對應的第t’個RNN神經元,C<1>C<1>表示機器翻譯第一個單詞“jane”對應的解碼網絡輸入參數。滿足:
∑t′α<1,t′>=1∑t′α<1,t′>=1
C<1>=∑t′α<1,t′>?a<t′>C<1>=∑t′α<1,t′>?a<t′>
也就是說,α<t,t′>α<t,t′>表示輸出y^<t>y^<t>對RNN單元a<t′>a<t′>的注意力權重因子。
為了讓α<t,t′>α<t,t′>之和為1,利用softamx思想,引入參數e<t,t′>e<t,t′>,使得:
α<t,t′>=e<t,t′>∑Txt′e<t,t′>α<t,t′>=e<t,t′>∑t′Txe<t,t′>
這樣,只要求出e<t,t′>e<t,t′>,就能得到α<t,t′>α<t,t′>。
如何求出e<t,t′>e<t,t′>呢?方法是建立一個簡單的神經網絡,如下圖所示。輸入是S<t?1>S<t?1>和a<t′>a<t′>,輸出是e<t,t′>e<t,t′>。
然后,利用梯度下降算法迭代優化,計算得到e<t,t′>e<t,t′>和α<t,t′>α<t,t′>。
Attention model的一個缺點是其計算量較大,若輸入句子長度為TxTx,輸出句子長度為TyTy,則計算時間約為Tx?TyTx?Ty。但是,其性能提升很多,計算量大一些也是可以接受的。
有趣的是,Attention model在圖像捕捉方面也有應用。
Attention model能有效處理很多機器翻譯問題,例如下面的時間格式歸一化:
下圖將注意力權重可視化:
上圖中,顏色越白表示注意力權重越大,顏色越深表示權重越小。可見,輸出語句單詞與其輸入語句單詞對應位置的注意力權重較大,即對角線附近。
9. Speech recognition
深度學習中,語音識別的輸入是聲音,量化成時間序列。更一般地,可以把信號轉化為頻域信號,即聲譜圖(spectrogram),再進入RNN模型進行語音識別。
之前,語言學家們會將語音中每個單詞分解成多個音素(phoneme),構建更精準的傳統識別算法。但在end-to-end深度神經網絡模型中,一般不需要這么做也能得到很好的識別效果。通常訓練樣本很大,需要上千上萬個小時的語音素材。
語音識別的注意力模型(attention model)如下圖所示:
一般來說,語音識別的輸入時間序列都比較長,例如是10s語音信號,采樣率為100Hz,則語音長度為1000。而翻譯的語句通常很短,例如“the quick brown fox”,包含19個字符。這時候,TxTx與TyTy差別很大。為了讓Tx=TyTx=Ty,可以把輸出相應字符重復并加入空白(blank),形如:
ttt_h_eee___?___qqq__?ttt_h_eee___?___qqq__?
其中,下劃線”_“表示空白,”??“表示兩個單詞之間的空字符。這種寫法的一個基本準則是沒有被空白符”_“分割的重復字符將被折疊到一起,即表示一個字符。
這樣,加入了重復字符和空白符、空字符,可以讓輸出長度也達到1000,即Tx=TyTx=Ty。這種模型被稱為CTC(Connectionist temporal classification)。
10. Trigger Word Detection
觸發字檢測(Trigger Word Detection)在很多產品中都有應用,操作方法就是說出觸發字通過語音來啟動相應的設備。例如Amazon Echo的觸發字是”Alexa“,百度DuerOS的觸發字是”小度你好“,Apple Siri的觸發字是”Hey Siri“,Google Home的觸發字是”Okay Google“。
觸發字檢測系統可以使用RNN模型來建立。如下圖所示,輸入語音中包含一些觸發字,其余都是非觸發字。RNN檢測到觸發字后輸出1,非觸發字輸出0。這樣訓練的RNN模型就能實現觸發字檢測。
但是這種模型有一個缺點,就是通常訓練樣本語音中的觸發字較非觸發字數目少得多,即正負樣本分布不均。一種解決辦法是在出現一個觸發字時,將其附近的RNN都輸出1。這樣就簡單粗暴地增加了正樣本。
至此,Ng深度學習專項課程全部總結完畢!
更多AI資源請關注公眾號:紅色石頭的機器學習之路(ID:redstonewill)
總結
以上是生活随笔為你收集整理的Coursera吴恩达《序列模型》课程笔记(3)-- Sequence models Attention mechanism的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吴恩达《神经网络与深度学习》精炼笔记(5
- 下一篇: 为什么中国开发不出流行的操作系统和编程语