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

語言: CN / TW / HK

摘要:循環神經網絡(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前向傳播示意圖:

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