1. 程式人生 > >吳恩達Coursera深度學習課程 DeepLearning.ai 提煉筆記(5-3)-- 序列模型和注意力機制

吳恩達Coursera深度學習課程 DeepLearning.ai 提煉筆記(5-3)-- 序列模型和注意力機制

完結撒花!以下為吳恩達老師 DeepLearning.ai 課程專案中,第五部分《序列模型》第三週課程“序列模型和注意力機制”關鍵點的筆記。

同時我在知乎上開設了關於機器學習深度學習的專欄收錄下面的筆記,以方便大家在移動端的學習。歡迎關注我的知乎:大樹先生。一起學習一起進步呀!^_^

序列模型 — 序列模型和注意力機制

1. 基礎模型

sequence to sequence 模型:

sequence to sequence 模型最為常見的就是機器翻譯,假如這裡我們要將法語翻譯成英文:

  • 輸入:x<1>x<2>x<Tx>;這裡每個x
    <t>
    均為對應法語句子中的每個單詞;
  • 輸出:y<1>y<2>y<Ty>;這裡每個y<t>均為對應英語句子中的每個單詞;
  • 網路結構:many-to-many RNN網路結構。

對於機器翻譯的序列對序列模型,如果我們擁有大量的句子語料,則可以得到一個很有效的機器翻譯模型。模型的前部分使用一個編碼網路來對輸入的法語句子進行編碼,後半部分則使用一個解碼網路來生成對應的英文翻譯。網路結構如下圖所示:

還在路上,稍等...

相關論文:

  • Sutskever et al., Sequence to sequence learning with neural networks, 2014;
  • Cho et al., Learning phrase representation using RNN encoder-decoder for statistical machine translation, 2014;

image to sequence 模型:

與上面的這種編解碼類似的還有就是影象描述的應用。

  • 輸入:影象;
  • 輸出:描述影象的句子;
  • 網路結構:CNN結構學習影象的編碼,RNN結構解碼輸出對應的句子。

對於影象描述的網路結構如下圖所示:

還在路上,稍等...

相關論文:

  • Mao et. al., 2014. Deep captioning with multimodal recurrent neural networks;
  • Vinyals et. al., 2014. Show and tell: Neural image caption generator;
  • Karpathy and Li, 2015. Deep visual-semantic alignments for generating image descriptions;

2. 挑選最可能的句子

機器翻譯:條件語言模型

對於機器翻譯來說和之前幾節介紹的語言模型有很大的相似性但也有不同之處。

  • 在語言模型中,我們通過估計句子的可能性,來生成新的句子。語言模型總是以零向量開始,也就是其第一個時間步的輸入可以直接為零向量;
  • 在機器翻譯中,包含了編碼網路和解碼網路,其中解碼網路的結構與語言模型的結構是相似的。機器翻譯以句子中每個單詞的一系列向量作為輸入,所以相比語言模型來說,機器翻譯可以稱作條件語言模型,其輸出的句子概率是相對於輸入的條件概率。

二者對比如下圖所示:

還在路上,稍等...

尋找最大的概率輸出:

還是以法語翻譯英語為例,通過輸入的法語句子,模型將會告訴我們各種英文句子輸出所對應的可能性,如下圖中的句子所示。

還在路上,稍等...

對於各種可能的翻譯結果,我們並不是要從得到的分佈中進行隨機取樣,而是要找到一個使得條件概率最大化的英文句子作為輸出。所以在設計機器翻譯模型的時候,一個重要的步驟就是設計一個合適的演算法,找到使得條件概率最大化的的結果。目前最通用的演算法就是:束搜尋(Beam Search)。

不使用貪心搜尋的原因:

對於我們的機器翻譯模型來說,使用貪心搜尋演算法,在生成第一個詞的分佈後,貪心搜尋會根據我們的條件語言模型挑選出最有可能輸出的第一個詞語,然後再挑選出第二個最有可能的輸出詞語,依次給出所有的輸出。

但是對於我們建立的機器翻譯模型來說,我們真正需要的是通過模型一次性地挑選出整個輸出序列:y<1>y<2>y<Ty>,來使得整體的概率最大化。所以對於貪心搜尋來說,這種方法對於機器翻譯來說是不可行的。

另外對於貪心搜尋演算法來說,我們的單詞庫中有成百到千萬的詞彙,去計算每一種單詞的組合的可能性是不可行的。所以我們使用近似的搜尋辦法,使得條件概率最大化或者近似最大化的句子,而不是通過單詞去實現,雖然不能保證我們得到的就是條件概率最大化的結果,但是往往這已經足夠了。

還在路上,稍等...

Beam search 演算法:

這裡我們還是以法語翻譯成英語的機器翻譯為例:

  • Step 1:對於我們的詞彙表,我們將法語句子輸入到編碼網路中得到句子的編碼,通過一個softmax層計算各個單詞(詞彙表中的所有單詞)輸出的概率值,通過設定集束寬度(beam width)的大小如3,我們則取前3個最大輸出概率的單詞,並儲存起來。
還在路上,稍等...
  • Step 2:在第一步中得到的集束寬度的單詞數,我們分別對第一步得到的每一個單詞計算其與單詞表中的所有單片語成詞對的概率。並與第一步的概率相乘,得到第一和第二兩個詞對的概率。有3×10000個選擇,(這裡假設詞彙表有10000個單詞),最後再通過beam width大小選擇前3個概率最大的輸出對;
還在路上,稍等...
  • Step 3~Step T:與Step2的過程是相似的,直到遇到句尾符號結束。
還在路上,稍等...

4. 集束搜尋的改進

長度歸一化:

對於集束搜尋演算法,我們的目標就是最大化下面的概率:

argmaxyt=1TyP(y<t>|x,y<1>,,y<t1>)=argmaxyP(y<1>,,y<Ty>|x)=argmaxyP(y<1>|x)P(y<2>|x,y<1>)P(y<Ty>|x,y<1>,,y<Ty1>)

上面的得到的每一項一般都是很小的概率值,大量很小的概率值進行相乘,最後會得到更小的值,可能會造成數值下溢。所以在實踐中,我們不會最大化上面這個公式的乘積,而是取log值,變成log求和最大值,得到一個數值上更加穩定的演算法,公式如下:

argmaxyy=1TylogP(y<t>|x,y<1>,,y<t1>)

另外,我們還可以通過對上面的目標進行歸一化,使其得到更好的效果。相比直接除以輸出單詞長度的值,可以使用更加柔和的方式:在Ty上加上一個指數α,如α=0.7,通過調整其大小獲得更加好的效果。

1Tαyargmaxyy=1TylogP(y<t>|x,y<1>,,y<t

相關推薦

Coursera深度學習課程 DeepLearning.ai 提煉筆記5-3-- 序列模型注意力機制

完結撒花!以下為吳恩達老師 DeepLearning.ai 課程專案中,第五部分《序列模型》第三週課程“序列模型和注意力機制”關鍵點的筆記。 同時我在知乎上開設了關於機器學習深度學習的專欄收錄下面的筆記,以方便大家在移動端的學習。歡迎關注我的知

Coursera深度學習課程 DeepLearning.ai 提煉筆記5-1-- 迴圈神經網路

Ng最後一課釋出了,撒花!以下為吳恩達老師 DeepLearning.ai 課程專案中,第五部分《序列模型》第一週課程“迴圈神經網路”關鍵點的筆記。 同時我在知乎上開設了關於機器學習深度學習的專欄收錄下面的筆記,以方便大家在移動端的學習。歡迎關

Coursera深度學習課程 DeepLearning.ai 提煉筆記1-3-- 淺層神經網路

以下為在Coursera上吳恩達老師的DeepLearning.ai課程專案中,第一部分《神經網路和深度學習》第三週課程“淺層神經網路”部分關鍵點的筆記。筆記並不包含全部小視訊課程的記錄,如需學習筆記中捨棄的內容請至Coursera 或者 網易雲課堂

Coursera深度學習課程 DeepLearning.ai 提煉筆記1-2-- 神經網路基礎

以下為在Coursera上吳恩達老師的DeepLearning.ai課程專案中,第一部分《神經網路和深度學習》第二週課程部分關鍵點的筆記。筆記並不包含全部小視訊課程的記錄,如需學習筆記中捨棄的內容請至Coursera 或者 網易雲課堂。同時在閱讀以下

Coursera深度學習課程 DeepLearning.ai 提煉筆記1-4-- 深層神經網路

以下為在Coursera上吳恩達老師的DeepLearning.ai課程專案中,第一部分《神經網路和深度學習》第四周課程“深層神經網路”部分關鍵點的筆記。筆記並不包含全部小視訊課程的記錄,如需學習筆記中捨棄的內容請至 Coursera 或者 網易雲課

Coursera深度學習課程 DeepLearning.ai 提煉筆記4-2-- 深度卷積模型

以下為在Coursera上吳恩達老師的 DeepLearning.ai 課程專案中,第四部分《卷積神經網路》第二週課程“深度卷積模型”關鍵點的筆記。本次筆記幾乎涵蓋了所有視訊課程的內容。在閱讀以下筆記的同時,強烈建議學習吳恩達老師的視訊課程,視訊請至

Coursera深度學習課程 DeepLearning.ai 提煉筆記1-2-- 神經網路基礎

以下為在Coursera上吳恩達老師的DeepLearning.ai課程專案中,第一部分《神經網路和深度學習》第二週課程部分關鍵點的筆記。筆記並不包含全部小視訊課程的記錄,如需學習筆記中捨棄的內容請至Coursera 或者 網易雲課堂。同時在閱讀以下筆記之前,

Coursera深度學習課程 deeplearning.ai (5-3) 序列模型注意力機制--程式設計作業(二):觸發字檢測

Part 2: 觸發字檢測 關鍵詞語音喚醒 觸發字檢測 歡迎來到這個專業課程的最終程式設計任務! 在本週的視訊中,你瞭解瞭如何將深度學習應用於語音識別。在本作業中,您將構建一個語音資料集並實現觸發字檢測演算法(有時也稱為關鍵字檢測或喚醒檢測)。觸發字

Coursera深度學習課程 deeplearning.ai (4-1) 卷積神經網路--程式設計作業

Part 1:卷積神經網路 本週課程將利用numpy實現卷積層(CONV) 和 池化層(POOL), 包含前向傳播和可選的反向傳播。 變數說明 上標[l][l] 表示神經網路的第幾層 上標(i)(i) 表示第幾個樣本 上標[i][i] 表示第幾個mi

Coursera深度學習課程 DeepLearning.ai 程式設計作業——Regularization2-1.2

如果資料集沒有很大,同時在訓練集上又擬合得很好,但是在測試集的效果卻不是很好,這時候就要使用正則化來使得其擬合能力不會那麼強。 import numpy as np import sklearn import matplotlib.pyplot as plt

Coursera深度學習課程 deeplearning.ai (4-1) 卷積神經網路--課程筆記

本課主要講解了卷積神經網路的基礎知識,包括卷積層基礎(卷積核、Padding、Stride),卷積神經網路的基礎:卷積層、池化層、全連線層。 主要知識點 卷積核: 過濾器,各元素相乘再相加 nxn * fxf -> (n-f+1)x(n-f+1)

Coursera深度學習課程 deeplearning.ai (4-4) 人臉識別神經風格轉換--課程筆記

Part 1:人臉識別 4.1 什麼是人臉識別? 人臉驗證: 輸入圖片,驗證是不是 A 人臉識別: 有一個庫,輸入圖片,驗證是不是庫裡的一員 人臉識別難度更大,要求準確率更高,因為1%的人臉驗證錯誤在人臉識別中會被放大很多倍。 4.2 O

Coursera深度學習課程 deeplearning.ai (5-1) 迴圈序列模型--程式設計作業(一):構建迴圈神經網路

Part 1: 構建神經網路 歡迎來到本週的第一個作業,這個作業我們將利用numpy實現你的第一個迴圈神經網路。 迴圈神經網路(Recurrent Neural Networks: RNN) 因為有”記憶”,所以在自然語言處理(Natural Languag

Coursera深度學習課程 deeplearning.ai (5-1) 迴圈序列模型--課程筆記

1.1 為什麼選擇序列模型 序列模型的應用 語音識別:將輸入的語音訊號直接輸出相應的語音文字資訊。無論是語音訊號還是文字資訊均是序列資料。 音樂生成:生成音樂樂譜。只有輸出的音樂樂譜是序列資料,輸入可以是空或者一個整數。 情感分類:將輸入的評論句子轉換

Coursera深度學習課程 deeplearning.ai (5-3) 序列模型注意力機制--課程筆記

3.1 基礎模型 sequence to sequence sequence to sequence:兩個序列模型組成,前半部分叫做編碼,後半部分叫做解碼。用於機器翻譯。 image to sequence sequence to sequenc

Coursera深度學習課程 deeplearning.ai (5-2) 自然語言處理與詞嵌入--程式設計作業(一):詞向量運算

Part 1: 詞向量運算 歡迎來到本週第一個作業。 由於詞嵌入的訓練計算量龐大切耗費時間長,絕大部分機器學習人員都會匯入一個預訓練的詞嵌入模型。 你將學到: 載入預訓練單詞向量,使用餘弦測量相似度 使用詞嵌入解決類別問題,比如 “Man is to

Coursera深度學習課程 deeplearning.ai (4-2) 深度卷積網路:例項探究--課程筆記

本課主要講解了一些典型的卷積神經網路的思路,包括經典神經網路的leNet/AlexNet/VGG, 以及殘差網路ResNet和Google的Inception網路,順便講解了1x1卷積核的應用,便於我們進行學習和借鑑。 2.1 為什麼要進行例項探究 神經

Coursera深度學習課程 deeplearning.ai (2-1) 深度學習實踐--程式設計作業

初始化 一個好的初始化可以做到: 梯度下降的快速收斂 收斂到的對訓練集只有較少錯誤的值 載入資料 import numpy as np import matplotlib.pyplot as plt import sklearn impo

Coursera深度學習課程 deeplearning.ai (4-4) 人臉識別神經風格轉換--程式設計作業

Part 1:Happy House 的人臉識別 本週的第一個作業我們將完成一個人臉識別系統。 人臉識別問題可以分為兩類: 人臉驗證: 輸入圖片,驗證是不是A 1:1 識別 舉例:人臉解鎖手機,人臉刷卡 人臉識別: 有一個庫,輸入圖片,驗證是不是庫裡的

Coursera深度學習課程 deeplearning.ai (5-2) 自然語言處理與詞嵌入--程式設計作業(二):Emojify表情包

Part 2: Emojify 歡迎來到本週的第二個作業,你將利用詞向量構建一個表情包。 你有沒有想過讓你的簡訊更具表現力? emojifier APP將幫助你做到這一點。 所以不是寫下”Congratulations on the promotion! L