迴圈神經網路應用舉例

2021-08-09 02:36:07 字數 3071 閱讀 6068

現在,我們介紹一下基於rnn語言模型。我們首先把詞依次輸入到迴圈神經網路中,每輸入乙個詞,迴圈神經網路就輸出截止到目前為止,下乙個最可能的詞。例如,當我們依次輸入:

我 昨天 上學 遲到 了

神經網路的輸出如下圖所示:

其中,s和e是兩個特殊的詞,分別表示乙個序列的開始和結束。

我們知道,神經網路的輸入和輸出都是向量,為了讓語言模型能夠被神經網路處理,我們必須把詞表達為向量的形式,這樣神經網路才能處理它。

神經網路的輸入是詞,我們可以用下面的步驟對輸入進行向量化:

建立乙個包含所有詞的詞典,每個詞在詞典裡面有乙個唯一的編號。

任意乙個詞都可以用乙個n維的one-hot向量來表示。其中,n是詞典中包含的詞的個數。假設乙個詞在詞典中的編號是i,v是表示這個詞的向量,vj

是向量的第j個元素,則:

vj={

1j=i

0j≠i

(76)

上面這個公式的含義,可以用下面的圖來直觀的表示:

使用這種向量化方法,我們就得到了乙個高維、稀疏的向量(稀疏是指絕大部分元素的值都是0)。處理這樣的向量會導致我們的神經網路有很多的引數,帶來龐大的計算量。因此,往往會需要使用一些降維方法,將高維的稀疏向量轉變為低維的稠密向量。不過這個話題我們就不再這篇文章中討論了。

語言模型要求的輸出是下乙個最可能的詞,我們可以讓迴圈神經網路計算計算詞典中每個詞是下乙個詞的概率,這樣,概率最大的詞就是下乙個最可能的詞。因此,神經網路的輸出向量也是乙個n維向量,向量中的每個元素對應著詞典中相應的詞是下乙個詞的概率。如下圖所示:

前面提到,語言模型是對下乙個詞出現的概率進行建模。那麼,怎樣讓神經網路輸出概率呢?方法就是用softmax層作為神經網路的輸出層。

我們先來看一下softmax函式的定義: g

(zi)

=ezi

∑kez

k 這個公式看起來可能很暈,我們舉乙個例子。softmax層如下圖所示:

從上圖我們可以看到,softmax layer的輸入是乙個向量,輸出也是乙個向量,兩個向量的維度是一樣的(在這個例子裡面是4)。輸入向量x=[1 2 3 4]經過softmax層之後,經過上面的softmax函式計算,轉變為輸出向量y=[0.03 0.09 0.24 0.64]。計算過程為: y

1y2y

3y4=

ex1∑

kexk

=e1e

1+e2

+e3+

e4=0.03=e

2e1+

e2+e

3+e4

=0.09=e

3e1+

e2+e

3+e4

=0.24=e

4e1+

e2+e

3+e4

=0.64

(77)

(78)

(79)

(80)

(81)

(82)

(83)

(84)

(85)

我們來看看輸出向量y的特徵:

每一項為取值為0-1之間的正數;

所有項的總和是1。

我們不難發現,這些特徵和概率的特徵是一樣的,因此我們可以把它們看做是概率。對於語言模型來說,我們可以認為模型**下乙個詞是詞典中第乙個詞的概率是0.03,是詞典中第二個詞的概率是0.09,以此類推。

可以使用監督學習的方法對語言模型進行訓練,首先,需要準備訓練資料集。接下來,我們介紹怎樣把語料

我 昨天 上學 遲到 了

轉換成語言模型的訓練資料集。

首先,我們獲取輸入-標籤對:

輸入標籤s我

我昨天昨天上學

上學遲到遲到了

了e然後,使用前面介紹過的向量化方法,對輸入x和標籤y進行向量化。這裡面有意思的是,對標籤y進行向量化,其結果也是乙個one-hot向量。例如,我們對標籤『我』進行向量化,得到的向量中,只有第2019個元素的值是1,其他位置的元素的值都是0。它的含義就是下乙個詞是『我』的概率是1,是其它詞的概率都是0。

最後,我們使用交叉熵誤差函式作為優化目標,對模型進行優化。

在實際工程中,我們可以使用大量的語料來對模型進行訓練,獲取訓練資料和訓練的方法都是相同的。

一般來說,當神經網路的輸出層是softmax層時,對應的誤差函式e通常選擇交叉熵誤差函式,其定義如下: l

(y,o

)=−1

n∑n∈

nynl

ogon

在上式中,n是訓練樣本的個數,向量yn

是樣本的標記,向量on

是網路的輸出。標記yn

是乙個one-hot向量,例如y1

=[1,

0,0,

0],如果網路的輸出o=

[0.03

,0.09

,0.24

,0.64

] ,那麼,交叉熵誤差是(假設只有乙個訓練樣本,即n=1): l

=−1n

∑n∈n

ynlo

gon=

−y1l

ogo1

=−(1

∗log

0.03+0

∗log

0.09+0

∗log

0.24+0

∗log

0.64)=

3.51

(86)

(87)

(88)

(89)

我們當然可以選擇其他函式作為我們的誤差函式,比如最小平方誤差函式(mse)。不過對概率進行建模時,選擇交叉熵誤差函式更make sense。

迴圈神經網路

原文 迴圈神經網路也可以畫成下面這個樣子 對於語言模型來說,很多時候光看前面的詞是不夠的,比如下面這句話 我的手機壞了,我打算 一部新手機。可以想象,如果我們只看橫線前面的詞,手機壞了,那麼我是打算修一修?換一部新的?還是大哭一場?這些都是無法確定的。但如果我們也看到了橫線後面的詞是 一部新手機 那...

迴圈神經網路

原文 迴圈神經網路也可以畫成下面這個樣子 對於語言模型來說,很多時候光看前面的詞是不夠的,比如下面這句話 我的手機壞了,我打算 一部新手機。可以想象,如果我們只看橫線前面的詞,手機壞了,那麼我是打算修一修?換一部新的?還是大哭一場?這些都是無法確定的。但如果我們也看到了橫線後面的詞是 一部新手機 那...

迴圈神經網路

特點 上一階段 時間步 的輸出作為輸入進入當前時間步。迴圈神經網路由迴圈神經原組成,迴圈神經元一般有兩個輸入,乙個是前階段的資訊,乙個是當前階段的資訊。同時產生乙個輸出,可以作為下一階段的輸入。迴圈神經網路採用多種模型。左上 每個時間步有乙個輸入,同時產生乙個輸出 右上 一串輸入,最後產生乙個輸出。...