吳恩達Coursera深度學習(5-1)遞迴神經網路 RNN
Class 5:序列模型 Sequence Models
Week 1:迴圈神經網路 RNN(Recurrent)
目錄
本課程將教你如何建立自然語言,音訊和其他序列資料的模型。 由於深入的學習,序列演算法的執行速度遠遠超過兩年前,這使得語音識別,音樂合成,聊天機器人,機器翻譯,自然語言理解等許多令人興奮的應用成為可能。
- 瞭解如何構建和訓練遞迴神經網路(RNN)以及常用模型,如GRU和LSTM。
- 能夠將序列模型應用於自然語言問題,包括文字合成。
- 能夠將序列模型應用於音訊應用,包括語音識別和音樂合成。
遞迴神經網路:這種模型已被證明在時態資料上表現得非常好。它有多種變體,包括LSTM,GRU和雙向RNN
1、序列模型的應用
- 語音識別:將輸入的語音訊號直接輸出相應的語音文字資訊。無論是語音訊號還是文字資訊均是序列資料。
- 音樂生成:生成音樂樂譜。只有輸出的音樂樂譜是序列資料,輸入可以是空或者一個整數。
- 情感分類:將輸入的評論句子轉換為相應的等級或評分。輸入是一個序列,輸出則是一個單獨的類別。
- DNA序列分析:找到輸入的DNA序列的蛋白質表達的子序列。
- 機器翻譯:兩種不同語言之間的想換轉換。輸入和輸出均為序列資料。
- 視訊行為識別:識別輸入的視訊幀序列中的人物行為。
- 命名實體識別:從輸入的句子中識別實體的名字。
2、數學符號
3、迴圈神經網路
傳統標準的神經網路
對於學習X和Y的對映,我們可以很直接的想到一種方法就是使用傳統的標準神經網路。也許我們可以將輸入的序列X以某種方式進行字典編碼以後,如one-hot編碼,輸入到一個多層的深度神經網路中,最後得到對應的輸出Y。如下圖所示:
但是,結果表明這種方法並不好,主要是存在下面兩個問題:
- 輸入和輸出資料在不同的例子中可以有不同的長度;
- 這種樸素的神經網路結果並不能共享從文字不同位置所學習到的特徵。(如卷積神經網路中學到的特徵的快速地推廣到圖片其他位置)
迴圈神經網路
迴圈神經網路作為一種新型的網路結構,在處理序列資料問題上則不存在上面的兩個缺點。在每一個時間步中,迴圈神經網路會傳遞一個啟用值到下一個時間步中,用於下一時間步的計算。如下圖所示:
這裡需要注意在零時刻,我們需要編造一個啟用值,通常輸入一個零向量,有的研究人員會使用隨機的方法對該初始啟用向量進行初始化。同時,上圖中右邊的迴圈神經網路的繪製結構與左邊是等價的。
迴圈神經網路是從左到右掃描資料的,同時共享每個時間步的引數。
上述迴圈神經網路結構的缺點:每個預測輸出y< t>僅使用了前面的輸入資訊,而沒有使用後面的資訊。Bidirectional RNN(雙向迴圈神經網路)可以解決這種存在的缺點。
迴圈神經網路的前向傳播
下圖是迴圈神經網路結構圖:
4、穿越時間的反向傳播
為了進行反向傳播計算,使用梯度下降等方法來更新RNN的引數,我們需要定義一個損失函式,如下:
上式表示將每個輸出的損失進行求和即為整體的損失函式。反向傳播演算法按照前向傳播相反的方向進行導數計算,來對引數進行更新。其中比較特別的是在RNN中,從右向左的反向傳播計算是通過時間來進行,如穿越時間的反向計算。
一般可以通過成熟的深度學習框架自動求導,例如PyTorch、Tensorflow等
5、不同型別的RNN
對於RNN,不同的問題需要不同的輸入輸出結構。
Many-to-Many (Tx=Ty)
這種情況下的輸入和輸出的長度相同,是上面例子的結構,如下圖所示:
many-to-one:
如在情感分類問題中,我們要對某個序列進行正負判別或者打星操作。在這種情況下,就是輸入是一個序列,但輸出只有一個值:
one-to-many
如在音樂生成的例子中,輸入一個音樂的型別或者空值,直接生成一段音樂序列或者音符序列。在這種情況下,就是輸入是一個值,但輸出是一個序列:
many-to-many (Tx != Ty)
我們上面介紹的一種RNN的結構是輸入和輸出序列的長度是相同的,但是像機器翻譯這種類似的應用來說,輸入和輸出都是序列,但長度卻不相同,這是另外一種多對多的結構:
6、語言模型和序列生成
語言模型是自然語言處理(NLP)中最基本和最重要的任務之一。使用RNN能夠很好地建立需要的不同語言風格的語言模型。
什麼是語言模型呢?舉個例子,在語音識別中,某句語音有兩種翻譯:
The apple and pair salad.
The apple and pear salad.
很明顯,第二句話更有可能是正確的翻譯。語言模型實際上會計算出這兩句話各自的出現概率。比如第一句話概率為,第二句話概率為。也就是說,利用語言模型得到各自語句的概率,選擇概率最大的語句作為正確的翻譯。概率計算的表示式為:
如何使用RNN構建語言模型?首先,我們需要一個足夠大的訓練集,訓練集由大量的單詞語句語料庫(corpus)構成。然後,對corpus的每句話進行切分詞(tokenize)。做法就跟第2節介紹的一樣,建立vocabulary,對每個單詞進行one-hot編碼。例如下面這句話:
The Egyptian Mau is a bread of cat.
One-hot編碼已經介紹過了,不再贅述。還需注意的是,每句話結束末尾,需要加上< EOS >作為語句結束符。另外,若語句中有詞彙表中沒有的單詞,用< UNK >表示。假設單詞“Mau”不在詞彙表中,則上面這句話可表示為:
The Egyptian < UNK > is a bread of cat. < EOS >
準備好訓練集並對語料庫進行切分詞等處理之後,接下來構建相應的RNN模型。
7、Sampling novel sequences
利用訓練好的RNN語言模型,可以進行新的序列取樣,從而隨機產生新的語句。與上一節介紹的一樣,相應的RNN模型如下所示:
8、RNN的梯度消失
RNN在NLP中具有很大的應用價值,但是其存在一個很大的缺陷,那就是梯度消失的問題。例如下面的例句中:
The cat, which already ate ………..,was full;
The cats, which already ate ………..,were full.
在這兩個句子中,cat對應著was,cats對應著were,(中間存在很多很長省略的單詞),句子中存在長期依賴(long-term dependencies),前面的單詞對後面的單詞有很重要的影響。但是我們目前所見到的基本的RNN模型,是不擅長捕獲這種長期依賴關係的。
如下圖所示,和基本的深度神經網路結構類似,輸出y得到的梯度很難通過反向傳播再傳播回去,也就是很難對前面幾層的權重產生影響,所以RNN也有同樣的問題,也就是很難讓網路記住前面的單詞是單數或者複數,進而對後面的輸出產生影響。
對於梯度消失問題,在RNN的結構中是我們首要關心的問題,也更難解決;雖然梯度爆炸在RNN中也會出現,但對於梯度爆炸問題,因為引數會指數級的梯度,會讓我們的網路引數變得很大,得到很多的Nan或者數值溢位,所以梯度爆炸是很容易發現的,我們的解決方法就是用梯度修剪,也就是觀察梯度向量,如果其大於某個閾值,則對其進行縮放,保證它不會太大。
9、GRU單元
門控迴圈單元(Gated Recurrent Unit, GRU)改變了RNN的隱藏層,使其能夠更好地捕捉深層次連線,並改善了梯度消失的問題。
RNN單元 ,RNN的隱藏層單元結構如下圖所示:
為了解決梯度消失問題,對上述單元進行修改,添加了記憶單元,構建GRU,如下圖所示:
簡化的GRU單元
我們以時間步從左到右進行計算的時候,在GRU單元中,存在一個新的變數稱為c,(代表cell),作為“記憶細胞”,其提供了長期的記憶能力。
上面介紹的是簡化的GRU模型,完整的GRU添加了另外一個gate,即,表示式如下:
注意,以上表達式中的∗表示元素相乘,而非矩陣相乘。
10、LSTM(long short term memory)
LSTM是另一種更強大的解決梯度消失問題的方法。它對應的RNN隱藏層單元結構如下圖所示:
GRU可以看成是簡化的LSTM,兩種方法都具有各自的優勢。
11、雙向RNN(Bidirectional)
對於下圖的單向RNN的例子中,無論我們的RNN單元是基本的RNN單元,還是GRU,或者LSTM單元,對於例子中第三個單詞”Teddy”很難判斷是否是人名,僅僅使用前面的兩個單詞是不夠的,需要後面的資訊來進行判斷,但是單向RNN就無法實現獲取未來的資訊。
雙向RNN結構如下圖所示:
BRNN能夠同時對序列進行雙向處理,效能大大提高。但是計算量較大,且在處理實時語音時,需要等到完整的一句話結束時才能進行分析。
在NLP問題中,常用的就是使用雙向RNN的LSTM。
12、Deep RNNs
Deep RNNs由多層RNN組成,其結構如下圖所示:
我們知道DNN層數可達100多,而Deep RNNs一般沒有那麼多層,3層RNNs已經較複雜了。
另外一種Deep RNNs結構是每個輸出層上還有一些垂直單元,如下圖所示:
相關推薦
吳恩達Coursera深度學習(5-1)遞迴神經網路 RNN
Class 5:序列模型 Sequence Models Week 1:迴圈神經網路 RNN(Recurrent) 目錄 本課程將教你如何建立自然語言,音訊和其他序列資料的模型。 由於深入的學習,序列演算法的執行速度遠遠超過兩年前,這
吳恩達Coursera深度學習(4-1)程式設計練習
Class 4:卷積神經網路 Week 1:卷積神經網路基礎 目錄 1、CNN: Step by Step (1)卷積層 (2)池化層 import numpy as np import matplotlib.py
吳恩達Coursera深度學習(4-3)目標檢測
Class 4:卷積神經網路 Week 3:目標檢測 1. 目標定位和特徵點檢測 圖片檢測問題: 分類問題:判斷圖中是否為汽車; 目標定位:判斷是否為汽車,並確定具體位置; 目標檢測:檢測不同物體並定位。 目標分類和定位: 對於目
吳恩達Coursera深度學習(2-3)超引數除錯和Batch Norm
Class 2:改善深層神經網路:超引數除錯、正則化以及優化 Week 3:超引數除錯和Batch Norm 目錄 1、超引數除錯處理 2、為超引數選擇合適的範圍 Scale均勻隨機 在超引數
吳恩達Coursera深度學習(4-2)深度卷積模型
Class 4:卷積神經網路 Week 2:深度卷積模型 1. 經典的卷積網路 介紹幾種經典的卷積神經網路結構,分別是LeNet、AlexNet、VGGNet。 LeNet-5: LeNet-5主要是針對灰度設計的,所以其輸入較小,為32×
吳恩達DeepLearning.ai筆記(5-1)-- 迴圈序列模型
吳恩達DeepLearning.ai筆記(5-1)– 迴圈序列模型 1.一些序列資料例子 2.數學符號 x<1>x<1>輸入序列X第一個單詞,TixTxi輸入序列X的單詞個數,X(i)<t>X(i)&l
吳恩達Coursera深度學習課程 DeepLearning.ai 提煉筆記(5-1)-- 迴圈神經網路
Ng最後一課釋出了,撒花!以下為吳恩達老師 DeepLearning.ai 課程專案中,第五部分《序列模型》第一週課程“迴圈神經網路”關鍵點的筆記。 同時我在知乎上開設了關於機器學習深度學習的專欄收錄下面的筆記,以方便大家在移動端的學習。歡迎關
吳恩達Coursera深度學習課程 DeepLearning.ai 提煉筆記(5-3)-- 序列模型和注意力機制
完結撒花!以下為吳恩達老師 DeepLearning.ai 課程專案中,第五部分《序列模型》第三週課程“序列模型和注意力機制”關鍵點的筆記。 同時我在知乎上開設了關於機器學習深度學習的專欄收錄下面的筆記,以方便大家在移動端的學習。歡迎關注我的知
吳恩達Coursera深度學習課程 deeplearning.ai (5-3) 序列模型和注意力機制--程式設計作業(二):觸發字檢測
Part 2: 觸發字檢測 關鍵詞語音喚醒 觸發字檢測 歡迎來到這個專業課程的最終程式設計任務! 在本週的視訊中,你瞭解瞭如何將深度學習應用於語音識別。在本作業中,您將構建一個語音資料集並實現觸發字檢測演算法(有時也稱為關鍵字檢測或喚醒檢測)。觸發字
吳恩達Coursera深度學習課程 DeepLearning.ai 程式設計作業——Regularization(2-1.2)
如果資料集沒有很大,同時在訓練集上又擬合得很好,但是在測試集的效果卻不是很好,這時候就要使用正則化來使得其擬合能力不會那麼強。 import numpy as np import sklearn import matplotlib.pyplot as plt
吳恩達Coursera深度學習課程 DeepLearning.ai 提煉筆記(1-2)-- 神經網路基礎
以下為在Coursera上吳恩達老師的DeepLearning.ai課程專案中,第一部分《神經網路和深度學習》第二週課程部分關鍵點的筆記。筆記並不包含全部小視訊課程的記錄,如需學習筆記中捨棄的內容請至Coursera 或者 網易雲課堂。同時在閱讀以下
吳恩達Coursera深度學習課程 deeplearning.ai (5-1) 迴圈序列模型--程式設計作業(一):構建迴圈神經網路
Part 1: 構建神經網路 歡迎來到本週的第一個作業,這個作業我們將利用numpy實現你的第一個迴圈神經網路。 迴圈神經網路(Recurrent Neural Networks: RNN) 因為有”記憶”,所以在自然語言處理(Natural Languag
吳恩達Coursera深度學習課程筆記(1-1)神經網路和深度學習-深度學習概論
這系列文章是我在學習吳恩達教授深度學習課程時為了加深自己理解,同時方便後來對內容進行回顧而做的筆記,其中難免有錯誤的理解和不太好的表述方式,歡迎各位大佬指正並提供建議。1、什麼是神經網路 在簡單的從房屋面積預測價格時,神經網路可以理解為將輸入的房屋
吳恩達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 提煉筆記(1-3)-- 淺層神經網路
以下為在Coursera上吳恩達老師的DeepLearning.ai課程專案中,第一部分《神經網路和深度學習》第三週課程“淺層神經網路”部分關鍵點的筆記。筆記並不包含全部小視訊課程的記錄,如需學習筆記中捨棄的內容請至Coursera 或者 網易雲課堂
吳恩達Coursera深度學習課程 deeplearning.ai (5-2) 自然語言處理與詞嵌入--程式設計作業(二):Emojify表情包
Part 2: Emojify 歡迎來到本週的第二個作業,你將利用詞向量構建一個表情包。 你有沒有想過讓你的簡訊更具表現力? emojifier APP將幫助你做到這一點。 所以不是寫下”Congratulations on the promotion! L
吳恩達Coursera深度學習課程 DeepLearning.ai 提煉筆記(1-4)-- 深層神經網路
以下為在Coursera上吳恩達老師的DeepLearning.ai課程專案中,第一部分《神經網路和深度學習》第四周課程“深層神經網路”部分關鍵點的筆記。筆記並不包含全部小視訊課程的記錄,如需學習筆記中捨棄的內容請至 Coursera 或者 網易雲課
吳恩達Coursera深度學習課程 DeepLearning.ai 程式設計作業——Optimization Methods(2-2)
Optimization Methods Until now, you’ve always used Gradient Descent to update the parameters and minimize the cost. In this noteboo