1. 程式人生 > >吳恩達deeplearning.ai五項課程完整筆記了解一下?

吳恩達deeplearning.ai五項課程完整筆記了解一下?

640?wx_fmt=png

來源:機器之心

本文共3744字,建議閱讀8分鐘。
通過本文為大家解讀如何構建自然語言、音訊和其他序列資料的模型。

自吳恩達釋出 deeplearning.ai 課程以來,很多學習者陸續完成了所有專項課程並精心製作了課程筆記。上個月,deep learning.ai 第五課釋出,該系列課程最終結課。Mahmoud Badry 在 GitHub 上開源了五項課程的完整筆記,介紹了包括序列模型在內的詳細知識點。我們簡要介紹了該專案,並重點描述了第五項課程式列模型。

專案地址:https://github.com/mbadry1/DeepLearning.ai-Summary

上週吳恩達在推特上展示了一份由 TessFerrandez 完成的深度學習專項課程資訊圖,這套資訊圖優美地記錄了深度學習課程的知識與亮點。這一份資訊圖的詳細介紹請檢視:

Deeplearning.ai 課程開課以來,一直受到大家的關注,也有眾多讀者積極的參與到學習中。Mahmoud Badry 完成的筆記主要分為五部分,分別對應神經網路與深度學習基礎、提升 DNN 效能的技巧與方法等、結構化機器學習專案、卷積神經網路和序列模型五門課程。值得注意的是,該專案完成的筆記十分詳細,基本上五門課程的知識點全都覆蓋到了。例如第一項課程以每週不同主題為序記錄了從神經網路簡介到 Goodfellow 採訪等基本知識點。

由於前四課很多知識點都已經介紹過,因此本文我們著重介紹第五課的筆記概要,讀者可自行查閱 GitHub 閱讀完整的筆記。

第五課序列模型簡介

本課程將講授如何構建自然語言、音訊和其他序列資料的模型。在深度學習的幫助下,序列演算法比兩年前效果更好,用於大量有趣的應用,如語音識別、音樂合成、聊天機器人、機器翻譯、自然語言理解等。學完本課,你將:

  • 瞭解如何構建和訓練迴圈神經網路(RNN)及其常用變體,如 GRU 和 LSTM。

  • 使用序列模型處理自然語言問題,如文字合成。

  • 將序列模型應用到音訊應用中,如語音識別和音樂合成。

  • 這是 Deep Learning Specialization 課程的第五課,也是最後一課。

適用人群:

  • 學完第一、二、四課的學習者。同樣推薦大家學習第三課。

  • 已經對神經網路(包括 CNN)具備深厚理解,並想學習如何開發迴圈神經網路的人。

該課程介紹迴圈神經網路(RNN)、自然語言處理和詞嵌入還有序列模型和注意力機制等,以下將簡要介紹 Mahmoud Badry 所完成的序列模型筆記。

序列模型:

序列模型(如 RNN 和 LSTM)極大地改變了序列學習,序列模型可通過注意力機制獲得增強。序列模型在語音識別、音樂生成、情感分類、DNA 序列分析、機器翻譯、視訊活動識別、命名實體識別等方面得到應用。

迴圈神經網路模型(RNN)

迴圈神經網路出現於 20 世紀 80 年代,最近由於網路設計的推進和圖形處理單元上計算能力的提升,迴圈神經網路變得越來越流行。這種網路尤其是對序列資料非常有用,因為每個神經元或者單元能用它的內部儲存來儲存之前輸入的相關資訊。在語言的案例中,「I had washed my house」這句話的意思與「I had my house washed」大不相同。這就能讓網路獲取對該表達更深的理解。

RNN 有很多應用,在自然語言處理(NLP)領域表現良好。下圖是一個用於解決命名實體識別任務的 RNN 網路。

640?wx_fmt=png

用於解決命名實體識別任務的 RNN 網路。

640?wx_fmt=png

簡化版 RNN 表示法。

沿時間的反向傳播(BPTT)

640?wx_fmt=png

RNN 架構中的反向傳播,w_a、b_a、w_y、b_y 被序列中的所有元素共享。

這裡使用交叉熵損失函式:

640?wx_fmt=png

其中第一個公式是序列中一個元素的損失函式,整個序列的損失是每個元素的損失之和。

640?wx_fmt=png

在上圖中沿時間反向傳播中,啟用值 a 從一個序列元素向另一個元素傳播。

RNN 的型別

640?wx_fmt=png

RNN 的不同型別。

RNN 的梯度消失

梯度消失指的是隨著網路深度增加,引數的梯度範數指數式減小的現象。梯度很小,意味著引數的變化很緩慢,從而使得學習過程停滯。迴圈神經網路在語言建模等序列問題上有非常強大的力量,但同時它也存在很嚴重的梯度消失問題。因此像 LSTM 和 GRU 等基於門控的 RNN 有非常大的潛力,它們使用門控機制保留或遺忘前面時間步的資訊,並形成記憶以提供給當前的計算過程。

門控迴圈單元(GRU)

GRU 旨在解決標準 RNN 中出現的梯度消失問題。GRU 背後的原理與 LSTM 非常相似,即用門控機制控制輸入、記憶等資訊而在當前時間步做出預測,表示式如下:

640?wx_fmt=png

GRU 有兩個有兩個門,即一個重置門(reset gate)和一個更新門(update gate)。從直觀上來說,重置門決定了如何將新的輸入資訊與前面的記憶相結合,更新門定義了前面記憶儲存到當前時間步的量。如果我們將重置門設定為 1,更新門設定為 0,那麼我們將再次獲得標準 RNN 模型。使用門控機制學習長期依賴關係的基本思想和 LSTM 一致,但還是有一些關鍵區別:

  • GRU 有兩個門(重置門與更新門),而 LSTM 有三個門(輸入門、遺忘門和輸出門)。

  • GRU 並不會控制並保留內部記憶(c_t),且沒有 LSTM 中的輸出門。

  • LSTM 中的輸入與遺忘門對應於 GRU 的更新門,重置門直接作用於前面的隱藏狀態。

  • 在計算輸出時並不應用二階非線性。

為了解決標準 RNN 的梯度消失問題,GRU 使用了更新門(update gate)與重置門(reset gate)。基本上,這兩個門控向量決定了哪些資訊最終能作為門控迴圈單元的輸出。這兩個門控機制的特殊之處在於,它們能夠儲存長期序列中的資訊,且不會隨時間而清除或因為與預測不相關而移除。

640?wx_fmt=png

帶有門控迴圈單元的迴圈神經網路

以下展示了單個門控迴圈單元的具體結構。

640?wx_fmt=png

門控迴圈單元

LSTM

使用傳統的通過時間的反向傳播(BPTT)或實時迴圈學習(RTTL/Real Time Recurrent Learning),在時間中反向流動的誤差訊號往往會爆炸(explode)或消失(vanish)。但 LSTM 可以通過遺忘和保留記憶的機制減少這些問題。

LSTM 單元一般會輸出兩種狀態到下一個單元,即單元狀態和隱藏狀態。記憶塊負責記憶各個隱藏狀態或前面時間步的事件,這種記憶方式一般是通過三種門控機制實現,即輸入門、遺忘門和輸出門。

以下是 LSTM 單元的詳細結構,其中 Z 為輸入部分,Z_i、Z_o 和 Z_f 分別為控制三個門的值,即它們會通過啟用函式 f 對輸入資訊進行篩選。一般啟用函式可以選擇為 Sigmoid 函式,因為它的輸出值為 0 到 1,即表示這三個門被開啟的程度。

640?wx_fmt=png

圖片來源於李弘毅機器學習講義。

若我們輸入 Z,那麼該輸入向量通過啟用函式得到的 g(Z) 和輸入門 f(Z_i ) 的乘積 g(Z) f(Z_i ) 就表示輸入資料經篩選後所保留的資訊。Z_f 控制的遺忘門將控制以前記憶的資訊到底需要保留多少,保留的記憶可以用方程 c*f(z_f)表示。以前保留的資訊加上當前輸入有意義的資訊將會保留至下一個 LSTM 單元,即我們可以用 c' = g(Z)f(Z_i) + cf(z_f) 表示更新的記憶,更新的記憶 c' 也表示前面與當前所保留的全部有用資訊。我們再取這一更新記憶的啟用值 h(c') 作為可能的輸出,一般可以選擇 tanh 啟用函式。最後剩下的就是由 Z_o 所控制的輸出門,它決定當前記憶所啟用的輸出到底哪些是有用的。因此最終 LSTM 的輸出就可以表示為 a = h(c')f(Z_o)。

雙向 RNN(BRNN)

雙向 RNN 和深度 RNN 是構建強大序列模型的有效方法。下圖是一個命名實體識別任務的 RNN 模型:

640?wx_fmt=png

BRNN 架構

640?wx_fmt=png

BRNN 的缺點是在處理之前需要整個序列。

深度 RNN

深度 RNN 可幫助構建強大的序列模型。

640?wx_fmt=png

3 層深度 RNN 圖示。

RNN 的反向傳播

在現代深度學習框架中,你只需實現前向傳播,框架會執行反向傳播,因此大部分機器學習工程師不需要擔心反向傳播。但是,如果你是微積分專家,想了解 RNN 中反向傳播的細節,可參考該 notebook:https://www.coursera.org/learn/nlp-sequence-models/notebook/X20PE/building-a-recurrent-neural-network-step-by-step。

自然語言處理與詞表徵

詞表徵在自然語言處理中是必不可少的部分,從早期的 One-Hot 編碼到現在流行的詞嵌入,研究者一直在尋找高效的詞表徵方法。Mahmoud Badry 在筆記中詳細記錄了詞嵌入方法,包括用於命名實體識別、人臉識別和翻譯系統的詞嵌入等,下圖展示了用於人臉識別的詞嵌入結構:

640?wx_fmt=png

在這種詞嵌入方法中,我們可以將不同的人臉編碼壓縮為一個向量,進而根據該向量比較是不是同一張臉。

詞嵌入有非常多的優秀屬性,例如給定一張詞嵌入表。該筆記用案例來解釋詞嵌入的語義相近關係,如下圖所示,男性變化到女性與國王變化到女王的反向在嵌入空間內是相同的,這意味著詞嵌入捕捉到了詞與詞之間的語義相關性。

640?wx_fmt=png

一般來說,Word2Vec 方法由兩部分組成。首先是將高維 one-hot 形式表示的單詞對映成低維向量。例如將 10,000 列的矩陣轉換為 300 列的矩陣,這一過程被稱為詞嵌入。第二個目標是在保留單詞上下文的同時,從一定程度上保留其意義。Word2Vec 實現這兩個目標的方法有 skip-gram 和 CBOW 等,skip-gram 會輸入一個詞,然後嘗試估計其它詞出現在該詞附近的概率。還有一種與此相反的被稱為連續詞袋模型(Continuous Bag Of Words,CBOW),它將一些上下文詞語作為輸入,並通過評估概率找出最適合(概率最大)該上下文的詞。

對於連續詞袋模型而言,Mikolov 等人運用目標詞前面和後面的 n 個詞來同時預測這個詞。他們稱這個模型為連續的詞袋(CBOW),因為它用連續空間來表示詞,而且這些詞的先後順序並不重要。CBOW 可以看作一個具有先知的語言模型,而 skip-gram 模型則完全改變將語言模型的目標:它不像 CBOW 一樣從周圍的詞預測中間的詞;恰恰相反,它用中心語去預測周圍的詞。

Mahmoud Badry 還展示了另一種學習詞嵌入的方法 GloVe,該方法雖然不像語言模型那樣使用廣泛,但它精簡的結構非常容易理解:

640?wx_fmt=png

序列模型與注意力機制

最後一部分作者著重介紹了注意力機制,包括編碼器解碼器架構的缺陷和引入注意力機制的解決方案。下圖展示了使用語境向量 C 或注意力權重編碼資訊的過程。

640?wx_fmt=png

其實當我們翻譯一個句子時,會尤其關注於正在翻譯的單詞。神經網路可以通過注意力來實現同樣的行為,即關注所收到資訊子集的一部分。

我們通常是使用基於上下文的注意力生成注意力分佈。參與的 RNN 會生成一個描述它想關注內容的查詢。每一個條目和這個查詢做點乘來產生一個分數,這個分數描述這個條目與查詢匹配程度。這些分數被輸入一個 softmax 來生成注意力分佈。

640?wx_fmt=jpeg