1. 程式人生 > >吳恩達Deeplearning.ai 知識點梳理(course 5,week 3)

吳恩達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,那麼計算量就是100001010000^{10},這個就太誇張了。

Beam Search

  Beam Search主要就是為了改善這個問題。如下圖:
在這裡插入圖片描述
  第一步的時候,挑選前B個概率比較大的例如In,Jane和September,然後到下一步,下一步就有3x10000個選擇,然後從30000個選擇裡邊再挑3個概率比較大的,比方說in September, Jane is, Jane visits,這三個比較大,以此類推,這樣的複雜度就是O

(nLB)O(nLB),n是詞典大小,L是要翻譯的句子的長度,B是beam的寬度。比之前的O(nL)O(n^L)要好很多了。
  這個其實是一種折中,假如B=1就是貪心,B=n就是全部搜尋。

Refinement of Beam Search

在這裡插入圖片描述
  由於優化的是這個條件概率,所以要把每一個輸出的y都乘起來,但是問題是y都小於0,一長了之後,計算機計算這個乘法的精度可能跟不上,所以可以把它們轉化成log後,計算加法。然後無論是乘法還是log,由於概率小於1,因此越乘肯定越小,因此要在前邊除以一個Ty,也就是輸出的長度。根據經驗,可以給這個輸出的長度做一個α\alpha次方,來進行調節,一般是0.7。
在這裡插入圖片描述
  然後是B的選擇,一般來說10個就可以了,很多部署上線的系統,大概100也可。而作為research,肯定是要越大越好,所以很可能1000到10000也是有可能的。

Error Analysis

  由於Beam Search並不總能得到一個最優結果,那麼假如效果不好,究竟是Beam Search的鍋,還是RNN的鍋呢?可以用如下的方法:
在這裡插入圖片描述
  首先有人類的一個標準翻譯,然後拿到機器翻譯的結果,分別是yy^*y^\hat{y},然後直接輸入到翻譯系統裡邊計算條件概率P(yx)P(y^*|x)P(y^x)P(\hat{y}|x)假如前者大,而又做錯了,說明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層,也就是每一個翻譯的詞彙的輸出,加權依賴於輸入句子的每一個詞彙輸出。然後這個加權係數是訓練出來的。這樣就做到了有目標的“重點關注”。
在這裡插入圖片描述
  具體如何訓練這個權重呢?簡要的說是將s<t1>s^{<t-1>}a<t>a^{<t'>}疊起來,然後通過一個FC層(Dense層),產生一個e<t,t>e^{<t,t'>},然後在對e<t,t>e^{<t,t'>}進行softmax,保證後邊的線性加權平均(Dot層)的加權係數和等於1。更細節的結構如下圖所示:
在這裡插入圖片描述
這種結構有一個問題就是計算複雜度到了o(n2)o(n^2),也就是二次的複雜度。
在這裡插入圖片描述
  一個很有趣的東西是觀察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年初的時候啊。然後輾轉創業未成,目前又回到這個領域,感慨萬千。機器替代人這個程序是不會變的。人直立行走,解放了雙手,現在人也要讓機器解放人的雙手,人類不要去做那些重複性的東西了,過上更好的生活。