1. 程式人生 > >循環神經網絡

循環神經網絡

-a 加權 工程 也看 frame -o 原理 訓練 -s

原文:https://zybuluo.com/hanbingtao/note/541458

循環神經網絡也可以畫成下面這個樣子:

技術分享

雙向循環神經網絡

對於語言模型來說,很多時候光看前面的詞是不夠的,比如下面這句話:

我的手機壞了,我打算____一部新手機。

可以想象,如果我們只看橫線前面的詞,手機壞了,那麽我是打算修一修?換一部新的?還是大哭一場?這些都是無法確定的。但如果我們也看到了橫線後面的詞是『一部新手機』,那麽,橫線上的詞填『買』的概率就大得多了。

在上一小節中的基本循環神經網絡是無法對此進行建模的,因此,我們需要雙向循環神經網絡,如下圖所示:

技術分享

深度循環神經網絡

前面我們介紹的循環神經網絡只有一個隱藏層,我們當然也可以堆疊兩個以上的隱藏層,這樣就得到了深度循環神經網絡。如下圖所示:

技術分享

循環神經網絡的訓練

循環神經網絡的訓練算法:BPTT

BPTT算法是針對循環層的訓練算法,它的基本原理和BP算法是一樣的,也包含同樣的三個步驟:

  1. 前向計算每個神經元的輸出值;
  2. 反向計算每個神經元的誤差項值,它是誤差函數E對神經元j的加權輸入的偏導數;
  3. 計算每個權重的梯度。

最後再用隨機梯度下降算法更新權重。

RNN的應用舉例——基於RNN的語言模型

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

我 昨天 上學 遲到 了

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

技術分享

可以用下面的圖來直觀的表示:

技術分享

使用這種向量化方法,我們就得到了一個高維、稀疏的向量(稀疏是指絕大部分元素的值都是0)。

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

向量化

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

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

  1. 建立一個包含所有詞的詞典,每個詞在詞典裏面有一個唯一的編號。
  2. 任意一個詞都可以用一個N維的one-hot向量來表示。

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

技術分享

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

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

。。。

循環神經網絡