RNN原理

這是我參與8月更文挑戰的第10天,活動詳情查看: 8月更文挑戰html

如今考慮這樣一個問題,給一句話,如何判斷這句話的情感是積極的(Positive)仍是消極的(Negative)markdown

例以下圖中的一句話"I hate this boring movie",咱們看一眼就知道這句話確定是消極的,可是如何構建一個網絡模型去識別呢? 網絡

有一種naive的方法,假設咱們把這句話變成一個維度是 ( 5 , 100 ) (5, 100) 的tensor,5表示這句話裏有5個詞,100表示每一個詞的維度是100。而後對於將每一個詞 x i x_i 做爲輸入,分別帶入5個Linear Layer,假設獲得的輸出 y i y_i ,把這五個輸出合在一塊兒就是 y y ,它的維度是 ( 5 , 2 ) (5, 2) 。最後再接一個Linear Layer,輸出 p p ,它的維度是 ( 1 ) (1) ,這個值表示給出句子是 x x 的狀況下,這個句子的情感是Positive的機率,即 P ( p o s x ) P(pos|x) ,就變成了一個二分類的問題app

這只是一個naive的作法,這樣作會存在不少問題。首先若是輸入是一個很長的句子,那麼這個句子裏的單詞就會不少,再加上每一個單詞對應還須要一段長度的詞向量,整個參數量就會很是大;其次,這種作法沒有考慮到上下文的信息,例如"我不喜歡你"這句話,若是你只分析"喜歡",你會覺得這是一個積極的句子,但其實沒有考慮到上文中的"不"字。再好比,一我的說:我喜歡旅遊,其中最喜歡的地方是雲南,之後有機會必定要去__。這裏填空,是個正常人都知道填"雲南"。咱們是根據上下文內容推斷出來的,這就意味着,一句話不能單獨一個單詞一個單詞來分析,因此咱們但願能有一個consistent tensor來存儲語境信息,而且在訓練的時候可以將這個語境信息利用起來函數

對於第一個問題,如何解決參數量過大,咱們能夠參考CNN,卷積神經網絡中的每一個kernel都利用的權重共享的思想,應用到咱們這裏就是,每一個單詞通過的Linear Layer,其 w w b b ,都是相同的,而再也不是上面那張圖的 w 1 w_1 , w 2 w_2 ,... b 1 b_1 , b 2 b_2 ,...,具體見下圖post

對於第二個問題,如何將語境信息也貫穿在整個網絡訓練的過程當中?學習

看下圖的網絡結構,每一層的輸出,都會做爲下一層的一部分輸入。例如將"I"的詞向量 x 1 x_1 h 0 h_0 做爲輸入,輸出獲得 h 1 h_1 ,就,而後將"hate"這個詞的詞向量 x 2 x_2 h 1 h_1 做爲輸入,輸出獲得 h 2 h_2 ,如此循環下去。所以這種網絡被稱爲循環神經網絡(RNN)this

下圖是一個典型的RNN網絡結構。右邊能夠理解爲左邊按照時間進行展開spa

假設 x t 1 , x t x_{t-1},x_{t} 表示輸入"我"和"是", x t + 1 x_{t+1} 表示輸入"中國",連起來輸入就是"我是中國",那麼 O t 1 , O t O_{t-1},O_{t} 就應該對應"是"和"中國",預測下一個詞最有多是什麼?就是預測 O t + 1 O_{t+1} 最有多是什麼,應該是"人"的機率比較大code

所以,咱們能夠作這樣的定義:

X t : 表示 t 時刻的輸入, O t : 表示 t 時刻的輸出, S t : 表示 t 時刻的記憶 X_t:表示t時刻的輸入,O_t:表示t時刻的輸出,S_t:表示t時刻的記憶

由於咱們當前時刻的輸出是由記憶當前時刻的輸入共同決定的。就像你如今大四,你的知識是由大四學到的知識(當前輸入)和大三以及大三之前學到的知識(記憶)的結合。RNN在這點上也相似,神經網絡最擅長作的就是經過一系列參數把不少內容整合到一塊兒,而後學習這個參數,所以就定義了RNN的基礎:

S t = f ( U x t + W S t 1 ) S_t=f(U*x_t + W*S_{t-1})

這裏的 f ( ) f() 函數表示激活函數,對於CNN來講,激活函數通常選取的都是 R e L U ReLU ,可是RNN通常選用 t a n h tanh

假設你大四快畢業了,要參加考研,請問你參加考研是先記住學過的內容而後去考研,仍是直接帶幾本書參加考研呢?答案很顯然。RNN的作法也就是預測的時候帶着當前時刻的記憶 S t S_t 去預測。假如你要預測"我是中國"的下一個詞,運用SoftMax在合適不過了,但預測不能直接用一個矩陣去預測,要轉爲一個向量,因此最終的公式表示爲:

O t = Softmax ( V S t ) O_t = \text{Softmax}(V*S_t)

RNN的結構細節:

  1. 能夠把 S t S_t 看成隱狀態,捕捉了以前時間點上的信息。就像你去考研同樣,考的時候記住了你能記住的全部信息
  2. 惋惜的是 S t S_t 並不能捕捉以前全部時間點的信息,或者說在網絡傳播的過程當中會"忘掉"一部分。就像你考研也記不住全部的英語單詞同樣
  3. 和卷積神經網絡同樣,RNN中的每一個節點都共享了一組參數 ( U , V , W ) (U, V, W) ,這樣就能極大下降計算量
相關文章
相關標籤/搜索