【第 5 部分-序列模型-第三週】在吳恩達深度學習視頻基礎上,筆記總結,添加個人理解。- ZJ
CSDN:http://blog.csdn.net/JUNJUN_ZHAO/article/details/79549819
序列模型和注意力機制(Sequence to sequence models)
3.1 基礎模型 (Basic models)
您好,歡迎參加本課程的最後一週也是深度學習微專業課程的最後一週。
在本週中,您將學到 seq2seq (sequence to sequece models)。 從機器翻譯到語音識別,都取得了很大的作用。
先從最基礎模型開始,之後會學到 集束搜索 (Beam search)和注意力模型(Attention Model),一直到最後的音頻模型,比如語音。
例子:
假設你想輸入一個法語句子,例如“Jane visite I’Afrique en septembre”。並且,你想把它翻譯成英文句子“ Jane is visiting Africa in September”。
用 到 ,表示輸入的句子的單詞,用 到 來表示輸出序列中的單詞。
那麼,如何訓練一個新的神經網絡來輸入序列 x,並輸出到序列 y ?
Sequence to Sequence model :
- 首先,建立一個網絡,稱之爲 編碼網絡(encoder network),它是一個 RNN 的結構,RNN 的單元可以是 GRU 也可以是 LSTM.
- 每次只向這個網絡輸入一個法語單詞,將輸入序列接收完畢後,RNN 網絡會輸出一個向量,來代表這個輸入序列。
之後,建立一個解碼網絡(decoder network),以編碼網絡的輸出作爲輸入,之後它可以被訓練爲每次輸出一個翻譯後的單詞。直到輸出序列結尾或者句子結尾標記。則解碼網絡工作結束。(把每一步生成的單元傳遞到下一個單元中來測試,就像之前用語言模型合成文本時一樣)
深度學習在近期最卓越的成功之一就是:這個模型確實有效。(在給出足夠的法語和英語文本的情況下,訓練這個模型,通過輸入一個法語句子來輸出對應的英語翻譯 )
這個網絡用簡單的編碼網絡來對輸入的法語句子進行編碼,然後用一個解碼網絡來生成對應的英語翻譯。
圖像描述(Image captioning ):
另一個與 seq2seq 類似的結構,被用來做圖像描述(Image captioning )。
- 給出一張貓的圖片,它能自動輸出該圖片的描述:一隻貓坐在椅子上。
如何訓練這樣的網絡?通過輸入圖像來輸出描述?
方法步驟:
- 在之前圖像描述的課程中,我們知道如何將圖片輸入到卷積神經網絡中,比如一個預訓練的 AlexNet 結構,然後讓其學習圖片的編碼(或者學習圖片的一系列特徵)
- 上述圖片給出的是 AlexNet 結構 ,去掉最後的 Softmax 單元,預訓練的 AlexNet 結構 會給你一個 4096 維的特徵向量,向量表示的就是這張貓的圖片。(這個預訓練網絡可以是圖像的編碼網絡,得到一個 4096 維的向量,來表示這張圖片)
- 接着把這個向量輸入到 RNN 中,RNN 要做的就是生成圖像的描述,每次生成一個單詞,(一個個的生成單詞序列)
在圖像描述領域這個方法相當有效。
總結:
以上學習了 seq2seq model 是怎麼運作的,以及 image to sequendce or image captioning 圖像描述,這兩個模型的運作方式是類似的。
但是,運作方式也有一些不同,主要體現在如何用語言模型合成新的文本,並生成對應序列的方面,一個主要的區別就是:我們期望的不是一個隨機選取的翻譯,而是最準確的翻譯。
3.2 選擇最有可能的句子(Picking the most likely sentence)
在 seq2seq machine translation model 機器翻譯模型中,以及在第一週所用的語言模型之間,有相似的地方,但是也有許多重要的區別,Let’s take a look .
可以把 機器翻譯想象成是建立一個條件語言模型。(Machine translation as building a conditional language model)
- 如上圖所示,語言模型(language model )是我們在第一週所建立的模型,這個模型可以估計句子的可能性,(這就是語言模型所做的事情)也可以用於生成新的句子。
- 機器翻譯模型(Machine translation):如上圖所示,分爲編碼網絡和解碼網絡
- 可以發現,機器翻譯模型的解碼網絡(紫色部分)與上面的語言模型非常幾乎是一樣的。
- 不同在於語言模型總是以 零向量開始,而機器翻譯模型中的 編碼網絡會計算出一系列向量來表示句子的輸入。所以稱之爲條件語言模型(conditional language model)相比於語言模型輸出任意句子的概率 ,翻譯模型會輸出句子的英文翻譯(取決於輸入的法語句子)。
Finding the most likely translation:
現在,想要通過模型將法語翻譯成英文。
- 通過輸入的法語句子,模型將會告訴你各種英文翻譯的所對應的可能性(概率) 。
- 顯然,我們不希望它隨機的輸出,如果你從這個分佈中,進行取樣,得到 p(y | x),可能取樣一次,就能得到很好的翻譯,但也可能得到截然不同的翻譯。如上圖所示,得到幾種不同的翻譯結果。
- 所以,使用這個模型來進行機器翻譯時,並不是從得到的分佈中,進行隨機取樣,而是要找到一個英語句子 y 使得條件概率最大化
- 在開始機器翻譯系統時,要做的一件事,就是想出一個算法,用來找出合適的 y 值,使得該項最大化,而解決這種問題通用的算法,就是 Beam search(束搜索)
Why not a greedy search?爲什麼不用貪心搜索呢?
貪心搜索:是一種來自計算科學的算法,生成第一個詞的分佈以後,它將會根據你的條件語言模型,挑選出一個最有可能的詞,進入你的機器翻譯模型中,在挑選出第一個詞之後,它將會在挑選出最有可能的第二個詞,….第三個詞….這種算法叫做貪心算法。
但是,你真正需要的是一次性調選擇出整個單詞序列,來使得整體的概率最大化。
如上圖所示,第一個翻譯比第二個翻譯更加簡潔,但是貪心算法,在選出前兩個單詞(Jane is )後,會選擇更加常見的 going 而不是 visiting,從而得到的不是最佳的翻譯。
- 假設你有 10000 個詞,然後又一個 10 個單詞的句子,那麼就有 種可能性,所以計算每一種概率是不實際的,因爲用一個近似的搜索算法,它會盡力的挑選句子 y 使得條件概率最大化。雖然不能保證,但已經足夠了。
總結:本節學到了,機器翻譯時如何用來解決條件語言模型問題的,相比之間的語言模型,隨機得到一個句子,這個模型可以得到一個最優可能的英語翻譯。我們需要一個合適的搜索算法,下節講解。
3.3 集束搜索 (Beam Search)
在機器翻譯中,給定輸入如法語句子, 我們想要的是最有可能的翻譯結果,而不是隨機的,對於語音識別也是一樣,給定一個輸入的語音片段,我們期望得到最接近原意的文本翻譯結果。
Beam Search (集束搜索)就是來解決這個問題。
Beam Search Algorithm:
- Beam Search 首先要做的就是挑選要輸出的英語翻譯中的第一個單詞,如上圖所示,列出 10000 個詞的詞彙表,
- 第一步,我們使用編碼解碼這樣的網絡來評估第一個單詞的概率值,給定輸入序列 x 即法語作爲輸入,第一個輸出 y 的概率值是多少,集束搜索算法會考慮多個選擇,會有一個參數 B,叫做 集束寬(beam width)這個例子中,將 B = 3,代表一次會考慮 3 個,(in jane september)若是 10 ,則一次考慮 10 個,
第二步,已經選出了 (in jane september) 作爲第一個單詞,三個最可能的選擇,beam search 接下來會針對每個第一個單詞,考慮第二個單詞是什麼,如(in——a/aron/september…..zulu)爲了評估第二個單詞,我們使用上圖中 綠色部分的編碼網絡 當解碼網絡輸出爲 爲 in ,然後 in 再作爲下一次的輸入 再輸出 ,這樣的網絡就可以評估第二個單詞的概率了
第一個和第二個單詞對的概率:
(jane——–)(september——–) 同理,如上圖所示,最終得出 30000 個可能的概率,然後從中選出 概率最大的三個,
Beam searcj (B=3):
我們快速解釋下,集束搜索的下一步,前面說過前幾個單詞,最可能的選擇是 in september 和 jane is 和 jane visits ,對於每一對單詞,先保存下來,作爲給定輸入 x(法語句子)情況下, y1 和 y2 的概率值。
像之前一樣,我們考慮第三個單詞是什麼,如上圖所示,循環下去,直到句子結束。
總結:已經學習了集束搜索是如何工作的,同時當然也有一些技巧和優化,使得集束算法更加高效。下節繼續。
3.4 改進定向搜索 (Refinements to Beam Search)
上節學習了基本的束搜索算法,這節會學到一些技巧,能使算法運行的更好。
Length normalization(長度歸一化):
- 長度歸一化就是對集束搜索算法,稍微調整的一種方式,來得到更好的結果。
- 如上圖所示,第一個公式是乘積概率,計算這個公式時,每一個概率都是遠小於 1 的,很多個小於 1 的數值乘起來,會得到極小的數字,從而造成數值下溢(數值下溢,就是數值太小了)。
- 因此,解決上面數值下溢的問題,如上圖第二個公式所示,我們不會最大化這個乘積,而是取 log 值,轉爲最大化這個 log 求和的概率,在選擇最有可能的句子 y 時,會得到同樣的結果。所以通過取 log ,會得到一個數值上更穩定的算法。
- log 函數是嚴格的單調遞增函數,最大化 與最大化 是一樣的,如果一個 y 值能使前者最大,就肯定能使後者 也取最大,所以常用的是取對數和。
- 對第二個公式進一步優化,可以使機器翻譯效果更好,目前存在的問題是,(第二個公式可能更趨向於選擇簡短的翻譯結果),因爲短句子的概率,是由更少數量的小於 1 的數字乘積得到的。(若很多概率是負值,那麼相加後則是更大的負值)
- 所以,第三個公式,我們不再最大化這個目標函數,而是進行歸一化,通過除以翻譯結果的單詞數量,這樣就是取每個單詞的概數對數值的平均值了。這樣明顯減少了對輸出長句子的懲罰。
- 在實踐中,有個探索性的方法,相比於直接除以 (輸出句子的單詞總數),採用更柔和的方法 加上指數 (超參數),如 ,因爲 若 則是完全歸一化,若 則是完全沒有歸一化。(只是試探性的,並沒有理論驗證)
總結:如何運行束搜索算法?
- 當你運行,Beam search 時,你會看到很多長度 的句子,當束寬 beam width = 3,你會記錄所有這些可能的句子的長度,三個最有可能的選擇。
- 然後,針對這些所有句子的可能輸出句子,並用第三個公式進行評分,取概率最大的幾個句子,然後對這些束搜索得到的句子,計算這個目標函數。
- 最後,從經過評估的這些句子中,挑選出在歸一化的 log 概率目標函數上得分最高的一個。有時也叫做,歸一化的對數似然目標函數。這就是最終輸出的翻譯結果。
一些實現的細節:
如何選擇束寬 beam width B?
- B 越大 考慮的選擇越多,找到的句子可能越好,但是 B 越大,算法的計算代價越大,因爲要把很多可能選擇保存起來。
large B : better result, but slower
small B: wrose result,but faster
取決於不同的應用場景,如產品,科研,論文,取決於特定的應用,特定的領域。
B = 10 ,100 ,1000,3000
3.5 定向搜索的誤差分析 (Error analysis in beam search)
在之前的課程中,學習到誤差分析,如何可以幫助你集中時間來做項目中最有用的工作,束搜索算法是一種近似搜索算法,也被稱爲啓發式搜索算法(heuristic search algorithm)。
它不總是輸出可能性最大的句子,而是記錄着 B = 3, 10 ,100 種可能。
so ,如果束搜索算法出現錯誤會怎樣呢?
本節將會學習到,誤差分析和束搜索算法是如何相互起作用的,以及你怎麼才能發現是 beam search 出現問題,還是 RNN 模型出現問題。
對束搜索算法進行誤差分析:
如上圖所示,對法語進行翻譯:
Human:人類的翻譯,在開發集中,翻譯的是很好的,標記爲
Algorithm : 機器翻譯的很糟糕,標記爲
模型主要分爲兩部分 :
1.一個是神經網絡模型(sequence to sequence model)成爲 RNN model ,是個編碼器 (encoder) 和解碼器(decoder)
2.另一部分是束搜索算法,以某個 集束寬度 beam width B 運行
如果你能找出造成這個不好的翻譯的原因,確定是哪一部分,可以更好的解決問題。所以我們要找到到底是哪部分出現的問題。
- RNN 會計算 ,事實證明,此時你能做的最有效的事情就是用這個模型,來計算 的同時也計算 ,然後比較一下,這兩個值哪個能大,你就能夠更清楚地將這個糟糕的翻譯結果,歸咎於 RNN 或者 beam search 算法。
我們繼續探究一下其中的邏輯,我們將比較 兩個值的大小。
Case 1: >
- Beam search 選擇了 ,但是 包含 的 的值更大。
- 結論:Beam search 實際上不能給你一個能使 最大化的 y 值。
個人理解:首先模型得出的結果是 > ,也就是 Beam search 應該選擇 , 但是 Beam search 卻選擇了 ,那麼這就是 Beam search 的錯了。
Case 2: ≤ ,
- 的翻譯比 好,但是 RNN 卻預測出來 ≤ ,
- 結論:RNN model 錯了。
一個細節,如果使用了長度歸一化,那麼要做的就不是比較 兩種可能性的大小,而是比較長度歸一化後的最優化目標函數值,不過目前先忽略這種情況。
錯誤分析過程:
- 先遍歷開發集,然後在其中找出算法產生的錯誤,比較 可能性大小,確定是哪種錯誤。
- 接着遍歷更多的例子,如上圖所示,逐一進行標記。
- 通過這個過程,就可以執行誤差分析,得出束搜索算法和 RNN 模型出錯的比例是多少。
- 有了這樣的誤差分析過程,你就可以對開發集中每一個糟糕的翻譯,確定是 beam search 出了問題,還是 RNN model 出了問題。
- 確定下來,那個錯誤發生的比例大,然後再進行下一步的分析。
總結:
這就是束搜索算法中的誤差分析,這個誤差分析過程是十分有用的,它可以用於分析近似最佳算法 (approximate optimization algorithm),(如 beam search),這些算法被用來優化學習算法(例如序列到序列模型/ RNN)輸出的目標函數或代價函數。
3.6 Bleu 得分 (Bleu Score)
機器學習的一大難題是,一個法語句子可以有多種英文翻譯,而且都同樣好,所以當有多個,同樣好的答案時,怎麼評估一個機器翻譯系統呢?有多個答案的時候,要怎樣衡量準確性呢?
常見的解決辦法就是,通過 Bleu 來解決。接下來講解 Bleu 怎麼工作的。
如圖所示:
- 法語句子 French: Le chat est sur le tapis.
- 人工翻譯 參考 1:The cat is on the mat.
- 另一個人工翻譯 參考2 :There is a cat on the mat.
Bleu 所做的就是給定一個機器生成的翻譯,它能夠自動的計算一個分數,來衡量機器翻譯的好壞,只要這個機器生成的翻譯與任何一個人工翻譯的結果足夠接近,就能得到一個比較高的 Bleu 得分。
Bleu : bilingual evaluation understudy (雙語評估替補)
Bleu 的初衷是相對於請評估員,人工的評估機器翻譯系統,Bleu 得分就相當於一個候補者,它可以代替人類來評估機器翻譯的每一個輸出結果。
MT (machine translation 縮寫)
MT output: the the the the the the the . 一個非常糟糕的翻譯。
衡量輸出質量的方法之 一 是,觀察輸出結果的每一個詞。看其是否出現在參考中,這被稱作是機器翻譯的精確度。
在這種情況下 the the the the the the the 這 7 個單詞,每個單詞都出現在了 上面兩個 人工翻譯的句子中,所以 是 衡量結果是 7/7 。(“看起來是一個極好的精確度” 實際不然)
Precision 衡量:7/7 (得分看着好,其實翻譯是不好的)
- 所以這就是爲什麼把出現在參考中的詞,在 MT 輸出的所有詞中所佔的比例作爲精確度評估標準,並不是很有用的原因。
解決辦法:
改良後的精確度評估方法
- 我們把每一個單詞的記分上限,定爲它在參考句子中出現的最多次數,在參考 1 中,單詞 the 出現了兩次,在參考 2 中,單詞 the 只出現了 1 次。所以 單詞 the 的得分上限爲 2 。所以句子得分是 2/7
Modified precision: 2/7
- 分母 7 代表是 單詞 the 出現的總次數,
- 分子 2 代表 單詞 the 出現的次數,我們再到達上限時截斷計數,這就是改良後的精確度評估。
目前我們關注的是單個單詞的 Bleu 得分,但實際上我們想關注的是 成對的單詞或者 句子的得分。
Bleu score on bigrams (二元詞組的 Bleu 得分):
bigrams 相鄰的兩個單詞。
接着上面的例子,MT output 輸出的 The cat the cat on the mat. 雖然不是很好的句子,但是比上一個強。
如上圖所示,
1.對相鄰的二元詞組羅列下來,
2 count 然後計算 每個二元詞組出現了多少次。
3.在定義 截取計數最大上限,給算法設置得分上限,上限值爲二元詞組出現在參考 1 或 2 中的最大次數。
4.最後,修改後的二元詞組的精確度就是,4/6 各列相加。
Bleu score on unigrams:
unigram: 單word ——— 一元詞組
bigram: 雙 word ——— 二元詞組
trigram: 三 word ——— 三元詞組
最後給出公式,如上圖所示.
一元詞組:
n 元詞組:
- 改良後的精確度得分,評估的是 一元詞組或是 二元詞組或三元詞組 甚至是取更大值的 n 元詞組,這個方法能讓你衡量機器翻譯輸出中,與參考相似重複的程度。
- 另外,你可以確信,如果機器翻譯輸出與參考 1 或 參考 2 完全一致的話,那麼所有的 , 等等的值,都會等於 1.0 ,爲了得到改良後的 1.0 的精確度,只要你的輸出與參考之一完全相同就能滿足,不過有時即使輸出結果,並不完全與參考相同,也是有可能的,可以將它們以另一種方式組合。但願仍能得到不錯的翻譯結果。
Bleu details:
- n 元詞組的 Bleu 得分,也是計算出的 n 元詞組改良後的精確度。
Combined Bleu score :爲了用一個值來表示,需要計算 如 然後將它們用這個公式組合在一起,取平均值。
求 相加的平均值 如 x,然後進行指數運算 ,對線性運算進行乘方運算,嚴格單調遞增的運算,之後用 BP 的懲罰因子來調整這項。
BP : brevity penalty 簡短懲罰。
- 瞭解一個細節,事實表明,如果你輸入了一個非常短的翻譯,那麼它會更容易得到一個高精確度,因爲輸出的大部分詞可能都出現在參考之中。
- 不過我們並不想要一個特別短的翻譯結果,因爲簡短懲罰(BP),就是一個調整因子,它能夠懲罰輸出了太短翻譯結果的翻譯系統。
BP 公式:
- BP = 1 ,if MT_output_length > reference_output_length 如果機器翻譯結果長度 > 人工翻譯結果長度
- BP exp(1- MT_output_length / reference_output_length) (其他情況下 )如果機器翻譯結果長度 <= 人工翻譯結果長度
總結:
- 在之前的視頻中瞭解了,單一實數評估指標(single real number evaluation metric)的重
要性,因爲它能夠讓你嘗試兩種想法,然後看得分高低,選擇得分高的一個。 - Bleu score 對於機器翻譯來說,具有革命性的原因是,它有一個非常好的單一實數評估指標(Single real number evaluation metric)。從而加快了機器翻譯領域的進程。加快算法開發過程。
- 經驗:直接使用開源的試驗結果。下載下來然後直接評估系統。
- 目前 Bleu 系統用來評估許多生成文本的系統,如機器翻譯系統,以及之前的提到的圖像描述系統 ( Image captioning ):用神經網絡來實現圖像描述,再用 Bleu score 來評估結果在多大程度上與參考描述或多個人工完成的參考描述內容相符。
3.7 注意力模型直觀理解 (Attention Model Intuition)
回顧:
在本週大部分時間內,我們都在學習使用這個編碼-解碼 (Encoder-Decoder)架構來完成機器翻譯,當一個 RNN 讀一個句子,另一個 RNN 就會輸出一個句子。在此基礎上做一些改變——注意力模型,可以使它工作的更好。
注意力模型是深度學習中重要的思想之一。接下來學習它是如何運作的。
The problem of long sequences:
- 給定一個很長的法語句子,綠色編碼網絡做的是,讀整個句子,然後記憶整個句子,再在感知機中傳遞,對紫色的解碼網絡,再翻譯出整個句子。
- 而人工翻譯,則是讀一部分,翻譯一部分。人在一次性記憶整個句子方面比較困難。
- 從上圖的 Bleu score 可以看出來,太短的句子得分低,稍短中等句子得分高,而長句子得分更低,在神經網絡中記憶長句子也是相對困難的。
注意力模型的直觀理解:
雖然源於機器翻譯,但是也推廣到了其他應用領域。
- 如上圖所示,假設,使用 雙向 RNN ( bidirectional RNN ),爲了計算每個輸入單詞的特徵集,必須要理解,輸出 ,但是並不只是翻譯一個單詞,所以可以先取去掉上面的 y .
- 使用雙向 RNN ,要對單詞做的就是對於句子裏的每五個單詞,計算一個句子中單詞的特徵集,也有可能是周圍的詞。
- 接着,試着生成英文翻譯,使用另一個 RNN 來生成英文翻譯,用 來表示 RNN 的隱藏狀態(感知機),希望經過 後可以生成 Jane.
- 問題就是,當嘗試生成第一個詞,應該看法語句子的哪個部分?看起來似乎是,先看第一個單詞,或者它附近的單詞,但是別看太遠,比如說句末。
- 所以,注意力模型就會計算注意力權重,將用 來表示當生成第一詞時,應該放多少注意力,在這第一塊信息處,然後計算第二個 注意力權重, 在看 第一個 單詞時,需要放多少注意力在第二個單詞,後面同理。
- 之後,這些將展示出,應該花多少注意力在記號 爲 C 的內容上,這就是一個 RNN 單元,如何嘗試生成第一個詞的,這就是第一步。
- 第二步,將有一個新的隱藏狀態 ,也會用一個新的注意力權值集,將用紫色線部分的 , ,後面同理,有了上下文 C ,然後之前生成的 Jane 也將輸入進 單元中,則便有了上下文,然後一起生成第二個單詞,之後,依次同理。
- RNN 向前執行,直到最後比如生成
<EOS>
,這些是注意力權重,即 ,當你嘗試生成 第 t 個單詞時,你應該放多少注意力在第 t 個 法語單詞上。 - 當生成一個特定的英文詞時,這允許它在每個時間步,去看周圍詞距內的法語詞,要花多少注意力。
3.8 注意力模型 (Attention Model)
上一節,學習了注意力模型如何讓一個神經網絡,只注意到一部分的輸入句子,在它生成句子的時候更像人類的翻譯,下面將這些想法,轉化成公式,來應用注意力模型。
- 與上節相同,假設輸入一個句子,並使用雙向 RNN or 雙向 GRU ,or 雙向 LSTM,去計算每個詞的特徵。LSTM 更常用。
- 對於前向傳播,有第一個時間步的前向傳播的激活值,第一個時間步後向傳播的激活值,如上圖所示。
- 爲了簡化表示,使用 , 時間步 t 上的特徵向量,但是爲了保持符號的一致性,用 代表法語句子裏面的詞。
- 接下來,我們只進行前向計算,就是單向的 RNN 用狀態 S 表示生成翻譯,所以第一個時間步,它應該生成 ,當輸入上下文 C 時,C 取決於,注意力參數 這個參數說明 上下文有多少取決於我們得到的特徵,或者我們從不同的時間步中,得到的激活值,
所以我們定義上下文的方式,實際上來源於,被注意力權重除權的不同時間步中的特徵值,於是更公式化的注意力權重,將會滿足非負的條件,所以就是 0 或正數,相加爲 1,如上圖所示。
注意: :注意力權重。 :激活函數值。
- 就是 應該在 t’ 時,花在 a 上注意力的數量,換句話說,就是當你在 t 處 生成輸出詞,你應該花多少注意力在第 t’ 個輸出詞上面,這是生成輸出的其中一步。之後同理。
- 最後要做的就是定義如何計算這些注意力權重。
計算注意力權重 :
就是 應該在 t’ 時,花在 a 上注意力
先計算 ,其中 關於 t, t’ 關鍵是使用 softmax ,來確保這些權重加起來等於 1 ,對 t’ 求和,比如每一個固定的 t 值,這些加起來等於 1 。
- 之後計算 e 項,可以使用的方式是,如上圖所示的 一個小的神經網絡, 就是神經網絡在上個時間步的狀態,如上圖右邊神經網絡所示。 是上個時間步的特徵的另一個輸入。
- 直觀來想,如果你想要決定要花多少注意力在 t’ 的激活值上,於是,似乎它會很大程度上取決於上一個時間步的隱藏狀態的激活值,目前還沒有當前狀態的激活值,
- 取決於 這兩個值,並不知道具體的函數是什麼,所以可以做的就是訓練很小的神經網絡去學習這個函數到底是什麼,反向傳播算法,梯度下降會得到一個正確的函數。
缺點:
- 時間複雜度 是 ,如果你有 個單詞輸入, 個輸出單詞。於是注意力參數的總數就會是
- 這個算法,有着三次方的消耗,但是在機器翻譯的應用上,輸入和輸出的句子一般不會太長,三次方也是可以接受的,不過有些研究工作,嘗試減少這個消耗。
- 在其他領域 如 Image capturing 圖片加標題,當你在看圖片寫標題的時候,一次只花注意力在一部分圖片上面。
注:注意力模型是一個非常強大的想法。
3.9 語音識別 (Speech recognition)
現今,最令人振奮的發展之一,就是 seq2seq 模型 在語音識別方面的準確性有很大的提升,接下來講解 seq2seq 是如何應用於音頻數據的。
語音識別問題:
- 有一個音頻片段 x ,任務是自動的生成文本 y ,
- 音頻片段的圖片,就是氣壓隨着時間而變化。
- 音頻數據常見的預處理步驟,就是運行整個原始的音頻片段,然後生成一個聲譜圖,如上圖中,帶顏色的聲譜圖,橫軸是時間,縱軸是聲音的頻率,圖中不同的顏色顯示聲波能量的大小,(或者還聽到過仿空白輸出)也經常應用於預處理步驟,在音頻輸入到學習算法之前,
- 在 end to end 端到端的深度學習模型系統中,通過輸入音頻片段,然後直接輸出音頻的文本,不同的行業 相應的訓練時間 不同 300 h ,3000h, 100,000 小時的數據
如何建立一個語音識別系統?
- 在輸入音頻的不同時間幀上,可以用一個注意力模型來輸出文本描述。
用 CTC 損失函數來做語音識別,圖上只用一個簡單的 RNN 來舉例子,實際中可能更多是雙向的 LSTM 結構很深的模型。
在語音識別中,通常輸入的時間步數量要比輸出的時間步的數量多出許多,如,有一段 10 秒的音頻,特徵是 100 赫茲的,即 每秒有 100 個樣本,於是,這段 10 秒的音頻片段,就會有 1000 個輸入,輸出可能就沒有 1000 個單詞 或字符了,怎麼辦呢?
- CTC 損失函數 允許 RNN 生成這樣的輸出,_ 這是特殊的字符,叫做空白符,
ttt_h_eee_ _ _ _ _ _qqq_ _ _ _
這樣的輸出被看做是正確的輸出, - CTC 損失函數的一個基本規則,是將空白符之間重複的字符摺疊起來,(注意: blank 空白符 和 space 空格是不同的)這樣就能生成 the q…….
3.10 觸發字檢測 (Trigger word detection)
現在已經學習了很多關於深度學習和序列模型的內容,現在可以簡單的描繪出一個觸發字系統,隨着語音識別的發展,越來越多的設備,可以通過聲音來喚醒,稱爲 觸發字檢測系統(Trigger word detection system).
有關於觸發字檢測系統的文獻,還處於發展階段,所以對於觸發字系統,最好的算法是什麼,目前還沒有一個廣泛的定論。
下面簡單介紹一種可以使用的算法。
- 現在有一個 RNN 結構,把一個音頻片段,計算出它的聲譜圖特徵,得到特徵向量(音頻特徵) ,然後放到 RNN 中。
- 定義目標標籤 y ,假如音頻片段中的某一點(如上圖所示),是某個人剛剛說的觸發字,如 “Alexa” 或其他的 ‘Okay Google’, 那麼在這一點之前,就可以在訓練集中,把目標標籤都設爲 0 ,然後再這點之後,把目標標籤都設爲 1。
- 在之後,觸發字又說了一遍,如上圖所示,後面一點,那麼再次,將這點之前目標標籤設爲 0 ,之後的設置爲 1 。這樣的標籤方案對 RNN 來說是可行的,運行的還可以。
- 但是,缺點是,它構建了一個很不平衡的訓練集, 0 的數量比 1 太多了,還有一個解決方法,雖然有點簡單粗暴,但確實能使其變的更容易訓練。比起只在一個時間步上去輸出 1 ,其實可以在輸出 變回 0 之前,多次輸出 1 ,或說在固定的一段時間內,輸出多個 1 ,如上圖所示。
3.11 結論和致謝 (Summary and thank you)
歷經了幾個月,終於學完了吳恩達老師的全部課程。歡呼一下!!!
首先,對吳恩達老師的感謝是無以言表的,老師授課內容語速適中,多年的教授經驗,使得他會用最簡單的方式讓我聽明白複雜的原理。還是那句話,吳恩達老師的課程是最好的課程。
後續,對於學習過的內容需要多加複習,而且對於提到的知識點,都需要深入研究,課程中提到的論文,最好都可以系統學習下來,道阻且長,加油吧!
最後,再次感謝吳恩達老師!感謝網易雲課堂!感謝一路上幫助我的許多朋友!
PS: 歡迎掃碼關注公衆號:「SelfImprovementLab」!專注「深度學習」,「機器學習」,「人工智能」。以及 「早起」,「閱讀」,「運動」,「英語 」「其他」不定期建羣 打卡互助活動。