吳恩達Deeplearning.ai 知識點梳理(course 5,week 3)
本週主要講了多種sequence to sequence結構,包括conditional language model,beam searching,bleu,attention,speech recognition,以及trigger word detection。
Basic Model
一個最基本的model就是這種,前邊使用一個Basic RNN/LSTM/GRU的序列,然後輸入x(一般都是定長的,不夠長補零),然後輸入給一個類似sequence generator的結構。由於後邊這個sequence generator的初始狀態並不是0,因此也稱為conditional language model。只要翻譯的句子不是特別特別長,這個模型相當管用。
另一個與之類似的是Image Captioning,也就是看圖說話,簡要描述這個圖。它是通過前邊比方說VGG/Alexnet等分類模型對影象進行特徵提取,然後作為condition,輸入給一個RNN,然後得到最終的Caption。對於比較短的Caption,這個網路相當有效。
Pick The Most Likely Sentence
之前的language model是model了每一個sentence的概率,而這個機器翻譯的任務,則是給定了一個句子(例如法語),找打對應英文的句子。因此,它其實就是一個找到最大條件概率的過程:
這個找最大條件概率的問題為什麼不用貪心演算法呢?主要是這樣:
例如這個句子,Jane is …,由於在翻譯is後邊的單詞的時候,很有可能由於is going比較常見(P(A|B)=P(A,B)/P(B)),導致選擇了is going to be visiting。雖說也可以,但是顯得比較囉嗦。但是假如我們真的去找最大值的話,計算量又太大了。比方說長度為10,詞典大小是10,000,那麼計算量就是,這個就太誇張了。
Beam Search
Beam Search主要就是為了改善這個問題。如下圖:
第一步的時候,挑選前B個概率比較大的例如In,Jane和September,然後到下一步,下一步就有3x10000個選擇,然後從30000個選擇裡邊再挑3個概率比較大的,比方說in September, Jane is, Jane visits,這三個比較大,以此類推,這樣的複雜度就是,n是詞典大小,L是要翻譯的句子的長度,B是beam的寬度。比之前的要好很多了。
這個其實是一種折中,假如B=1就是貪心,B=n就是全部搜尋。
Refinement of Beam Search
由於優化的是這個條件概率,所以要把每一個輸出的y都乘起來,但是問題是y都小於0,一長了之後,計算機計算這個乘法的精度可能跟不上,所以可以把它們轉化成log後,計算加法。然後無論是乘法還是log,由於概率小於1,因此越乘肯定越小,因此要在前邊除以一個Ty,也就是輸出的長度。根據經驗,可以給這個輸出的長度做一個次方,來進行調節,一般是0.7。
然後是B的選擇,一般來說10個就可以了,很多部署上線的系統,大概100也可。而作為research,肯定是要越大越好,所以很可能1000到10000也是有可能的。
Error Analysis
由於Beam Search並不總能得到一個最優結果,那麼假如效果不好,究竟是Beam Search的鍋,還是RNN的鍋呢?可以用如下的方法:
首先有人類的一個標準翻譯,然後拿到機器翻譯的結果,分別是和,然後直接輸入到翻譯系統裡邊計算條件概率和假如前者大,而又做錯了,說明Beam Search 沒有把好的挑出來,是Beam Search的鍋,假如後邊大,那說明RNN擬合的有問題,因此是RNN的鍋。
Bleu
Bleu用來計算翻譯的好壞的。
比方說我MT給出的結果是好幾個the,這個肯定不對,但是如果計算precision,the全部都中,那麼精度就是7/7,100%,這個肯定不好,那麼我們就反過來,reference去命中MT,比方說the,命中2個,那麼就是2/7。也就是分母裡邊一共有7個the,然後reference裡邊有2個。
再進一步:
用Bigram,也就是兩個詞的片語,列出來,例如the cat 一共有了兩個。cat on 有一個。然後再去看ref裡邊每一個片語有幾個,得到precision,是4/6。
這樣就可以得到一個n-gram的Bleu score演算法。
然後得到一個加權+short length penalty的最終版本精度。
Attention Model
長句子基本的RNN對短句子很有效,但是對於長句子的準確率下降。如圖中所示的例子,如果句子特別長,需要RNN的這種encoder-decoder的模型需要記住所有的詞彙之後,才開始翻譯。Attention Model 就是為了解決長句子而引入的。通常來說,我們作為人,也不是把一大長句子看完才開始翻譯,而是有目標有重點的翻譯。因此,attention model也是將部分“重點內容”重點看。
如上圖所示,首先使用雙向RNN對整個句子進行特徵提取或者建模吧,然後在上邊再疊加一層dot層,也就是每一個翻譯的詞彙的輸出,加權依賴於輸入句子的每一個詞彙輸出。然後這個加權係數是訓練出來的。這樣就做到了有目標的“重點關注”。
具體如何訓練這個權重呢?簡要的說是將和疊起來,然後通過一個FC層(Dense層),產生一個,然後在對進行softmax,保證後邊的線性加權平均(Dot層)的加權係數和等於1。更細節的結構如下圖所示:
這種結構有一個問題就是計算複雜度到了,也就是二次的複雜度。
一個很有趣的東西是觀察Attention層的權重分佈。比方說上圖的這個將人類的日期書寫轉化成機器的日期書寫。可以看到權重分佈。M權重很大,因為M直接就判斷了是5月。
Speech Recognition
語音識別。
語音識別是將語音clip轉化為文字。通常來說先把audio clip用短時傅立葉變換到頻域,然後每一個時間t就有一個頻域向量。
一種是使用attention model:
類似於機器翻譯。這個就不過多說了。
還有一種是CTC:
這種網路是輸入和輸出一樣多,也是用RNN/GRU/LSTM連起來,然後輸出的結果是ttt____hhh__eee這種,這種認為是對的,然後在collapse起來得到最後的結果。
Trigger Word Detection
這種trigger word detection,也就是hi siri這種,是將語音片段劃分成一段一段的,例如10秒,然後在trigger word的後邊一個時間點label為1,然後前邊的都是0,但是這種0,1分佈太不均勻了,因此會將1後邊一段長度的也設定為1。用來1、0平衡一些。
最後
這是deep learning.ai最後的一節課了。想當年上大學本科,最喜歡的課是數電和模式識別,讀研入學的時候(11年)想了想影象語音一直沒什麼起色,於是選了通訊方向,但是依舊對這些感興趣。讀研的時候還上了概率圖模型課,那可是12年初的時候啊。然後輾轉創業未成,目前又回到這個領域,感慨萬千。機器替代人這個程序是不會變的。人直立行走,解放了雙手,現在人也要讓機器解放人的雙手,人類不要去做那些重複性的東西了,過上更好的生活。