1. 程式人生 > >吳恩達Coursera深度學習課程 DeepLearning.ai 提煉筆記(5-1)-- 迴圈神經網路

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

Ng最後一課釋出了,撒花!以下為吳恩達老師 DeepLearning.ai 課程專案中,第五部分《序列模型》第一週課程“迴圈神經網路”關鍵點的筆記。

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

序列模型 — 迴圈神經網路

1. 序列模型的應用

  • 語音識別:將輸入的語音訊號直接輸出相應的語音文字資訊。無論是語音訊號還是文字資訊均是序列資料。
  • 音樂生成:生成音樂樂譜。只有輸出的音樂樂譜是序列資料,輸入可以是空或者一個整數。
  • 情感分類:將輸入的評論句子轉換為相應的等級或評分。輸入是一個序列,輸出則是一個單獨的類別。
  • DNA序列分析:找到輸入的DNA序列的蛋白質表達的子序列。
  • 機器翻譯:兩種不同語言之間的想換轉換。輸入和輸出均為序列資料。
  • 視訊行為識別:識別輸入的視訊幀序列中的人物行為。
  • 命名實體識別:從輸入的句子中識別實體的名字。
還在路上,稍等...

2. 數學符號

  • 輸入x:如“Harry Potter and Herminone Granger invented a new spell.”(以序列作為一個輸入),x<t>表示輸入x中的第t個符號。
  • 輸出y:如“1 1 0 1 1 0 0 0 0”(人名定位),同樣,用y<t>表示輸出y中的第t個符號。
  • Tx用來表示輸入x的長度;
  • Ty用來表示輸出y的長度;
  • x(i)<t>表示第i個輸入樣本的第t個符號,其餘同理。
  • 利用單詞字典編碼來表示每一個輸入的符號:如one-hot編碼等,實現輸入x和輸出y之間的對映關係。

3. 迴圈神經網路模型

傳統標準的神經網路:

對於學習X和Y的對映,我們可以很直接的想到一種方法就是使用傳統的標準神經網路。也許我們可以將輸入的序列X以某種方式進行字典編碼以後,如one-hot編碼,輸入到一個多層的深度神經網路中,最後得到對應的輸出Y。如下圖所示:

還在路上,稍等...

但是,結果表明這種方法並不好,主要是存在下面兩個問題:

  • 輸入和輸出資料在不同的例子中可以有不同的長度;
  • 這種樸素的神經網路結果並不能共享從文字不同位置所學習到的特徵。(如卷積神經網路中學到的特徵的快速地推廣到圖片其他位置)

迴圈神經網路:

迴圈神經網路作為一種新型的網路結構,在處理序列資料問題上則不存在上面的兩個缺點。在每一個時間步中,迴圈神經網路會傳遞一個啟用值到下一個時間步中,用於下一時間步的計算。如下圖所示:

還在路上,稍等...

這裡需要注意在零時刻,我們需要編造一個啟用值,通常輸入一個零向量,有的研究人員會使用隨機的方法對該初始啟用向量進行初始化。同時,上圖中右邊的迴圈神經網路的繪製結構與左邊是等價的。

迴圈神經網路是從左到右掃描資料的,同時共享每個時間步的引數。

  • Wax管理從輸入x<t>到隱藏層的連線,每個時間步都使用相同的Wax,同下;
  • Waa管理啟用值a<t>到隱藏層的連線;
  • Wya管理隱藏層到啟用值y<t>的連線。

上述迴圈神經網路結構的缺點:每個預測輸出y<t>僅使用了前面的輸入資訊,而沒有使用後面的資訊。Bidirectional RNN(雙向迴圈神經網路)可以解決這種存在的缺點。

迴圈神經網路的前向傳播:

下圖是迴圈神經網路結構圖:

還在路上,稍等...
  • 構造初始啟用向量:a<0>=0
  • a<1>=g(Waaa<0>+Waxx<1>+ba);通常選擇tanh作為啟用函式,有時也會使用Relu作為啟用函式;(使用tanh函式梯度消失的問題會用其他方式解決)
  • y^<1>=g(Wyaa<1>+by);如果是二分類問題,使用sigmoid作為啟用函式,如果是多分類問題,可以使用softmax啟用函式;
  • 注:其中Wax中,前面的a表示要得到一個a型別的量,x表示引數W要乘以一個x型別的量,其餘WaaWya同理;
    a<t>=g(Waaa<t1>+Waxx<t>+ba)y^<t>=g(Wyaa<t>+by)

上式是RNN的一般前向傳播公式,我們還可以對上式進行簡化:

a<t>=g(Wa[a<t1>,x<t>]+ba)y^<t>=g(Wya<t>+by)

其中: