一文了解迴圈神經網路

2022-09-20 18:02:43
摘要:迴圈神經網路(RNN)可是在語音識別、自然語言處理等其他領域中引起了變革!

本文分享自華為雲社群《【MindSpore易點通】深度學習系列-迴圈神經網路上篇》,作者:Skytier

迴圈神經網路(RNN)可是在語音識別、自然語言處理等其他領域中引起了變革!

1 應用場景

迴圈神經網路(RNN)其實就是序列模型,我們先來看看其應用場景。

在語音識別時,給定了一個輸入音訊片段X ,並要求輸出對應的文字記錄Y 。這裡的輸入和輸出資料都是序列模型,輸入X是一個按時播放的音訊片段,輸出Y是一系列文字。

音樂生成問題也是一樣,輸出資料Y是序列,而輸入資料X可以是空集,也可以是個單一的整數(代表音符)。

而系列模型在DNA序列分析中也十分有用,DNA可以用A、C、G、T四個字母來表示。所以給定一段DNA序列,你能夠標記出哪部分是匹配某種蛋白質的嗎?

以上所有類似問題都可以被稱作使用標籤資料(X,Y)作為訓練集的監督學習,輸入資料X或者輸出資料Y是序列,即使兩者都是序列也有資料長度不同的問題。

2 模型構建

比如建立一個序列模型,它的輸入語句是這樣的:「Sam Li and Tom date on Tuesday.」。然後模型是可以自動識別句中人名位置的命名實體識別模型,可以用來查詢不同型別的文字中的人名、公司名、時間、地點、國家名和貨幣名等等。

假定輸入資料x,序列模型的輸出y,使得輸入的每個單詞都對應一個輸出值,同時y還需要表明輸入的單詞是否是人名的一部分。

首先輸入語句是7個單片語成的時序序列,所以最終會有7個特徵集x:x<1>,x<2>,...,x<7>,同時可以索引其序列中的位置。Tx表示輸出序列的長度,這裡Tx=7。

同理,輸出資料也是一樣,分別對應y<1>,y<2>,...,y<7>,Ty表示輸出序列的長度。

那麼問題來了,首先我們需要準備一個比較大的詞典庫,可能該庫裡的第一個單詞是a,and出現在第367個位置上,Sam是在7459這個位置,Tom則在8674。

那麼我們就可以在這個詞典庫的基礎上遍歷訓練集。

那麼也就是說,Sam由x<1>表示,其是一個第7459行是1,其餘值都是0的向量;Li由x<2>表示,其是一個第2420行是1,其餘值都是0的向量。

通常我們稱這種x指代句子裡的任意詞為one-hot向量,只有一個值是1,其餘值都是0,所以整句話中我們會有7個one-hot向量,用序列模型在X和Y目標輸出之間學習建立一個對映關係。

PS:如果遇到了一個在你詞表中的單詞,可以建立一個Unknow Word的偽造單詞,用<UNK>作為標記。

3 模型解釋

通常情況下,我們會首先選取標準的神經網路,輸入7個one-hot向量,經過一些隱藏層,最終會輸出7個值為0或1的項,表明每個輸入單詞是否是人名的一部分。

但最後我們總會遇到這樣的問題:

1.輸入和輸出資料的長度並不完全一致,即使採用填充(pad)或零填充(zero pad)使每個輸入語句都達到最大長度,但最後的表示式會很奇怪。

2.簡單的神經網路並不會共用從文字的不同位置上學到的特徵。因為我們希望,如果首次學習的時候我們已經知道了Tom是人名,那麼當Tom出現在其他位置時,其並不能夠自動識別,因此也不能夠減少模型中引數的數量。

那麼迴圈神經網路為啥會比普通的神經網路更加出眾呢?

另外迴圈神經網路是從左向右掃描資料,同時每個時間步的引數也是共用的,用Wax來表示從x<1>到隱藏層的連線的一系列引數,每個時間步使用的都是相同的Wax引數,而啟用值是由引數Waa決定的,輸出結果由Way決定。

先輸入零向量a<0>,接著進行前向傳播過程,計算啟用值a<1>,然後再計算y<1>。

更普遍來說,在t時刻:

為了更加簡化一點,定義Wa:

,假設a是100維的,x是10,000維的,那麼Waa是(100,100)維的矩陣,Wax是(100,10000)維,Wa為(100,10100)。

同樣,假定

,Wy表明它是計算y型別的量的權重矩陣,而Wa和ba則表示這些引數是用來計算啟用值的。

RNN前向傳播示意圖:

 

點選關注,第一時間瞭解華為雲新鮮技術~