入門理解RNN 通俗篇

2021-08-29 20:18:17 字數 2675 閱讀 2437

rnn種類很多,也比較繞腦子。不過讀者不用擔心,本文將一如既往的對複雜的東西剝繭抽絲,幫助您理解rnns以及它的訓練演算法,並動手實現乙個迴圈神經網路。

rnn是在自然語言處理領域中最先被用起來的,比如,rnn可以為語言模型來建模。那麼,什麼是語言模型呢?

我們可以和電腦玩乙個遊戲,我們寫出乙個句子前面的一些詞,然後,讓電腦幫我們寫下接下來的乙個詞。比如下面這句:

我昨天上學遲到了,老師批評了____。
我們給電腦展示了這句話前面這些詞,然後,讓電腦寫下接下來的乙個詞。在這個例子中,接下來的這個詞最有可能是『我』,而不太可能是『小明』,甚至是『吃飯』。

語言模型就是這樣的東西:給定乙個一句話前面的部分,**接下來最有可能的乙個詞是什麼。

語言模型是對一種語言的特徵進行建模,它有很多很多用處。比如在語音轉文字(stt)的應用中,聲學模型輸出的結果,往往是若干個可能的候選詞,這時候就需要語言模型來從這些候選詞中選擇乙個最可能的。當然,它同樣也可以用在影象到文字的識別中(ocr)。

使用rnn之前,語言模型主要是採用n-gram。n可以是乙個自然數,比如2或者3。它的含義是,假設乙個詞出現的概率只與前面n個詞相關。我們以2-gram為例。首先,對前面的一句話進行切詞:

我 昨天 上學 遲到 了 ,老師 批評 了 ____。
如果用2-gram進行建模,那麼電腦在**的時候,只會看到前面的『了』,然後,電腦會在語料庫中,搜尋『了』後面最可能的乙個詞。不管最後電腦選的是不是『我』,我們都知道這個模型是不靠譜的,因為『了』前面說了那麼一大堆實際上是沒有用到的。如果是3-gram模型呢,會搜尋『批評了』後面最可能的詞,感覺上比2-gram靠譜了不少,但還是遠遠不夠的。因為這句話最關鍵的資訊『我』,遠在9個詞之前!

現在讀者可能會想,可以提公升繼續提公升n的值呀,比如4-gram、5-gram…….。實際上,這個想法是沒有實用性的。因為我們想處理任意長度的句子,n設為多少都不合適;另外,模型的大小和n的關係是指數級的,4-gram模型就會占用海量的儲存空間。

所以,該輪到rnn出場了,rnn理論上可以往前看(往後看)任意多個詞。單向

迴圈神經網路種類繁多,我們先從最簡單的基本迴圈神經網路開始吧。

基本迴圈神經網路

下圖是乙個簡單的迴圈神經網路如,它由輸入層、乙個隱藏層和乙個輸出層組成:

納尼?!相信第一次看到這個玩意的讀者內心和我一樣是崩潰的。因為迴圈神經網路實在是太難畫出來了,網上所有大神們都不得不用了這種抽象藝術手法。不過,靜下心來仔細看看的話,其實也是很好理解的。

如果把上面有w的那個帶箭頭的圈去掉,它就變成了最普通的全連線神經網路。x是乙個向量,它表示輸入層的值(這裡面沒有畫出來表示神經元節點的圓圈);s是乙個向量,它表示隱藏層的值(這裡隱藏層面畫了乙個節點,你也可以想象這一層其實是多個節點,節點數與向量s的維度相同);u是輸入層到隱藏層的權重矩陣;o也是乙個向量,它表示輸出層的值;v是隱藏層到輸出層的權重矩陣。那麼,現在我們來看看w是什麼。迴圈神經網路的隱藏層的值s不僅僅取決於當前這次的輸入x,還取決於上一次隱藏層的值s。權重矩陣 w就是隱藏層上一次的值作為這一次的輸入的權重。

如果我們把上面的圖展開,迴圈神經網路也可以畫成下面這個樣子:

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

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

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

迴圈神經網路的訓練演算法:bptt

bptt演算法是針對迴圈層的訓練演算法,它的基本原理和bp演算法是一樣的,也包含同樣的三個步驟:

1. 前向計算每個神經元的輸出值;

2. 反向計算每個神經元的誤差項值,它是誤差函式e對神經元j的加權輸入的偏導數;

3. 計算每個權重的梯度。

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

迴圈層如下圖所示:

前向計算

使用前面的式2對迴圈層進行前向計算:

逐步理解RNN

逐步理解rnn迴圈神經網路 先了解一下最基本的單層網路,它的結構如圖 輸入是x,經過變換wx b和啟用函式f得到輸出y。前面狀態輸出會影響後面狀態輸出的情況有下面幾種 為了建模序列問題,rnn引入了隱狀態h hidden state 的概念,h可以對序列形的資料提取特徵,接著再轉換為輸出。先從h1的...

BP演算法和RNN 雙向RNN的理解

我們在學習某種神經網路模型時,一定要把如下幾點理解透了,才算真正理解了這種神經網路。網路的架構 包含那些層,每層的輸入和輸出,有那些模型引數是待優化的 前向傳播演算法 損失函式的定義 後向傳播演算法 什麼情況下認為是發現了過擬合,怎麼進行優化。很多介紹深度學習的書籍,在介紹全連線神經網路時,對這幾個...

redis通俗理解

一,redis是什麼 redis是一種支援key value等多種資料結構的儲存系統。可用於快取,事件發布或訂閱,高速佇列等場景。該資料庫使用ansi c語言編寫,支援網路,提供字串,雜湊,列表,佇列,集合結構直接訪問,基於記憶體,可持久化。二,支援的語言 三,redis的應用場景有哪些四,redi...