【吳恩達深度學習筆記】5.3序列模型和注意力機制Sequence models&Attention mechanism

打瞌睡~發表於2020-12-09

第五門課 序列模型(Sequence Models)

3.1基礎模型(Basic Models)

seq2seq模型用於機器翻譯:用一個編碼網路(encoder network)來對輸入的法語句子進行編碼,然後用一個解碼網路來生成對應的英語翻譯。
在這裡插入圖片描述
image to sequence模型用於影像描述:
在這裡插入圖片描述

3.2選擇最可能的句子(Picking the most likely sentence)

機器翻譯模型和語言模型非常相似,不同在於語言模型總是以零向量開始,而encoder網路會計算出一系列向量來表示輸入的句子,decoder網路以這個句子開始,而不是以零向量開始,所以把它叫做條件語言模型(conditional language model)。
假如通過模型將法語翻譯成英文,通過輸入的法語句子模型將會告訴你各種英文翻譯所對應的可能性。不是從得到的分佈中進行隨機取樣,而是要找到一個英語句子,使得條件概率 P ( y ∣ x ) P(y|x) P(yx)最大化。所以在開發機器翻譯系統時,要做的一件事就是想出一個演算法,用來找出合適的 y y y值,使得該項最大化,解決這種問題最通用的演算法就是束搜尋(Beam Search)。

貪心搜尋(Greedy Search)生成第一個詞的分佈以後,它將會根據條件語言模型挑選出最有可能的第一個詞進入機器翻譯模型中,然後繼續挑選下一個最有可能的詞,但是真正需要的是一次性挑選出整個單詞序列,從 y < 1 > y^{<1>} y<1> y < T y > y^{<T_y>} y<Ty>來使得整體概率最大化。

3.3集束搜尋(Beam Search)

貪婪演算法只會挑出最可能的那一個單詞,然後繼續。而集束搜尋會考慮多個選擇,集束搜尋演算法有一個引數B,叫集束寬(beam width),集束搜尋會考慮 B B B個可能結果,然後把這些結果存到計算機記憶體裡以便後面嘗試。集束搜尋演算法的第二步會針對每個第一個單詞考慮第二個單詞是什麼,即第一個、第二個單詞對有最大的概率 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>}) P(y<1>,y<2>x)=P(y<1>x)P(y<2>x,y<1>),找出第一個和第二個單詞對最可能的 B B B個結果,接著繼續直到最後一步。即最大化概率: a r g   m a x   P ( y < 1 > , . . . , y < T y > ∣ x ) = ∏ t = 1 T y P ( y < t > ∣ x , y < 1 > , . . . , y < t − 1 > ) arg\space max\space P(y^{<1>},...,y^{<T_y>}|x)=\prod^{T_y}_{t=1}P(y^{<t>}|x,y^{<1>},...,y^{<t-1>}) arg max P(y<1>,...,y<Ty>x)=t=1TyP(y<t>x,y<1>,...,y<t1>)

如果集束寬等於1,只考慮1種可能結果,實際上就變成了貪婪搜尋演算法。

3.4改進集束搜尋(Refinements to Beam Search)

上節介紹了基本的束搜尋演算法(the basic beam search algorithm),長度歸一化(Length normalization)是對束搜尋演算法作調整的一種方式,幫助得到更好的結果。束搜尋的結果乘積概率(the product probabilities)通常遠小於1,會造成數值下溢(numerical underflow)。數值下溢就是數值太小導致電腦的浮點表示不能精確地儲存,在實踐中不會最大化這個乘積,而是取 l o g log log值,會得到一個數值上更穩定的演算法,不容易出現數值的舍入誤差(rounding errors)。所以實際工作記錄概率的對數和(the sum of logs of the probabilities)。

通過除以翻譯結果的單詞數量,即取每個單詞的概率對數值的平均了,可以明顯減少了對輸出長的結果的懲罰。在實踐中會用一個更柔和的方法加上指數 α \alpha α,可以等於0.7。如果等於1相當於完全用長度來歸一化,如果等於0相當於完全沒有歸一化, α \alpha α是演算法另一個超引數(hyper parameter),需要調整大小來得到最好的結果。從經過評估的句子中挑選出在歸一化的log概率目標函式上得分最高的一個,也叫作歸一化的對數似然目標函式(a normalized log likelihood objective)。 a r g   m a x   1 T y α ∑ t = 1 T y l o g P ( y < t > ∣ x , y < 1 > , . . . , y < t − 1 > ) arg\space max\space \frac{1}{T_y^\alpha}\sum^{T_y}_{t=1}logP(y^{<t>}|x,y^{<1>},...,y^{<t-1>}) arg max Tyα1t=1TylogP(y<t>x,y<1>,...,y<t1>)

束寬B越大演算法執行慢,記憶體佔用也會增大。束寬小演算法執行的更快,記憶體佔用也小,
但結果會沒那麼好。通常取 B = 10 B=10 B=10

3.5集束搜尋的誤差分析(Error analysis in beam search)

束搜尋演算法是一種近似搜尋演算法(an approximate search algorithm),也被稱作啟發式搜尋演算法(a heuristic search algorithm),它不總是輸出可能性最大的句子,它僅記錄著B為前3或者10或是100種可能。那麼如果束搜尋演算法出現錯誤會怎樣呢?

模型有兩個主要部分,一個是神經網路模型,即序列到序列模型(sequence to sequence model),將這個稱作是RNN模型,它實際上是個編碼器和解碼器( an encoder and a decoder)。另一部分是束搜尋演算法,以某個集束寬度B執行。
在這裡插入圖片描述
通過對開發集中每一個錯誤例子執行誤差分析得出束搜尋演算法和RNN模型出錯的比例是多少 B R \frac{B}{R} RB確定錯誤是搜尋演算法出了問題,還是生成目標函式(束搜尋演算法使之最大化)的RNN模型出了問題。

3.6Bleu得分(Bleu Score)

機器翻譯如果有多個不錯的答案,要怎樣衡量準確性呢? 常見的解決辦法是通過BLEU得分(the BLEU score)來解決。BLEU(bilingual evaluation understudy (雙語評估替補))得分做的就是,給定一個機器生成的翻譯,根據精確度評估(the modified precision measure)方法自動計算一個分數來衡量機器翻譯的好壞。

定義 P n P_n Pn n n n元片語精確度:機器翻譯輸出中的 n n n元片語的countclip之和除以 n n n元片語的出現次數之和。而且會用額外的BP 懲罰因子(the BP penalty)來調整這項。BP的意思是“簡短懲罰”( brevity penalty),能夠懲罰輸出了太短翻譯結果的翻譯系統。
在這裡插入圖片描述
擁有單一實數評估指標(a single real number evaluation metric)的重要性,因為它能夠讓你嘗試兩種想法,然後看一下哪個得分更高,儘量選擇得分更高的那個,BLEU得分對於機器翻譯來說,具有革命性的原因是因為它有一個相當不錯的雖然不是完美的但是非常好的單一實數評估指標。

這裡有一篇相關參考部落格:BLEU演算法詳解

參考論文:Papineni, Kishore& Roukos, Salim & Ward, Todd & Zhu, Wei-jing. (2002). BLEU: a Method for Automatic Evaluation of Machine Translation.10.3115/1073083.1073135.

3.7注意力模型直觀理解(Attention Model Intuition)

注意力模型(the Attention Model)可以使編碼解碼的構架(a Encoder-Decoder architecture)來完成的機器翻譯更好工作。在神經網路中,記憶非常長句子是非常困難的。有了注意力模型,機器翻譯系統只會翻譯句子的一部分,Bleu score不會隨著Setence length的增加而有一個巨大的下傾(huge dip),這個下傾衡量了神經網路記憶一個長句子的能力。
在這裡插入圖片描述
為了避免與RNN中的感知機(the activations)混淆,用 S S S來表示RNN的隱藏狀態。注意力模型會計算注意力權重(a set of attention weights),用 a < t , t > a^{<t,t>} a<t,t>表示生成第t個詞時應該放多少注意力在這個第t塊資訊處。

參考論文:Dimitri, Bahdanau, Camcrun Cho, Yoshe Bengio。(Bahdanau D, Cho K, Bengio Y. Neural Machine Translation by Jointly Learning to Align and Translate[J]. Computer Science,2014.

3.8注意力模型(Attention Model)

注意力模型讓一個神經網路只注意到一部分的輸入句子。當它在生成句子的時候,更像人類翻譯。
在這裡插入圖片描述
α < t , t ′ > \alpha^{<t,t'>} α<t,t> y < t > y^{<t>} y<t> t t t處生成輸出詞時,應該在 t ′ t' t時花在 a a a上注意力的數量。 C < t > C^{<t>} C<t>是上下文向量。
在這裡插入圖片描述

3.9語音識別(Speech recognition)

本節介紹seq2seq模型是如何應用於音訊資料的(audio data),比如語音(the speech)。語音識別演算法(a speech recognition algorithm)通過輸入音訊,然後輸出音訊的文字內容。人耳並不會處理聲音的原始波形,而是通過一種特殊的物理結構來測量不同頻率和強度的聲波。音訊資料的常見預處理步驟是執行這個原始的音訊片段,然後生成一個聲譜圖(a spectrogram),橫軸是時間,縱軸是聲音的頻率(frequencies),圖中不同的顏色顯示了聲波能量的大小(the amount of energy),也就是在不同的時間和頻率上這些聲音有多大。偽空白輸出(the false blank outputs)也經常應用於預處理步驟。在音訊被輸入到學習演算法之前,人耳所做的計算和這個預處理過程非常相似。語音識別系統是用音位(phonemes)來構建的,也就是人工設計的基本單元(hand-engineered basic units of cells)。
在這裡插入圖片描述
利用CTC損失函式(CTC cost)來做語音識別。CTC是Connectionist Temporal Classification。通常輸入的時間步數量(the number of input time steps)要比輸出的時間步的數量(the number of output time steps)多出很多。CTC損失函式的一個基本規則是將空白符之間的重複字元摺疊起來,上圖用下劃線表示特殊的空白符(blank character),它和空格(space character)是不一樣的。神經網路因為有很多這種重複的字元,和很多插入在其中的空白符,所以最後我們得到的文字會短上很多。

參考文獻:Graves A, Gomez F. Connectionist temporal classification:labelling unsegmented sequence data with recurrent neural networks[C]// International Conference on Machine Learning. ACM, 2006:369-376.

3.10觸發詞檢測(Trigger Word Detection)

隨著語音識別的發展,越來越多的裝置可以通過你的聲音來喚醒,這有時被叫做觸發字檢測系統(rigger word detection systems)。其中的關鍵字檢測系統(keyword detection system)將會更加簡單,它可以通過一個更簡潔的數量更合理的資料來完成。
在這裡插入圖片描述
計算出一個音訊片段(an audio clip)的聲譜圖特徵(spectrogram features)得到特徵向量 x < 1 > 、 x < 2 > . . . x^{<1>}、x^{<2>}... x<1>x<2>...,然後把它放到RNN中。最後定義目標標籤。假如音訊片段中的某一點是一個觸發字,比如"Alexa”,那麼在這一點之前在訓練集中把目標標籤都設為0,在這個點之後把目標標籤設為1。該演算法一個明顯的缺點是它構建了一個很不平衡的訓練集(a very imbalanced training set),0的數量比1多太多了。一個簡單粗暴的方式是在輸出變回0之前,多次輸出1,即在固定的一段時間內輸出多個1,這樣稍微提高了1與0的比例。

錯題

  1. 在機器翻譯中,如果我們在不使用句子歸一化的情況下使用集束搜尋,那麼演算法會輸出過短的譯文。
  1. 在觸發詞檢測中, x^<t>是時間 t 時的音訊特徵(就像是頻譜特徵一樣)。

相關文章