循环神经网络(Recurrent Neural Network, RNN)和递归神经网络(Recursive Neural Network, RNN),你搞清楚了吗?
一,循環神經網絡:
原文:https://zybuluo.com/hanbingtao/note/541458
語言模型
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是輸入層到隱藏層的權重矩陣(讀者可以回到第三篇文章零基礎入門深度學習(3) - 神經網絡和反向傳播算法,看看我們是怎樣用矩陣來表示全連接神經網絡的計算的);o也是一個向量,它表示輸出層的值;V是隱藏層到輸出層的權重矩陣。那么,現在我們來看看W是什么。循環神經網絡的隱藏層的值s不僅僅取決于當前這次的輸入x,還取決于上一次隱藏層的值s。權重矩陣 W就是隱藏層上一次的值作為這一次的輸入的權重。
如果我們把上面的圖展開,循環神經網絡也可以畫成下面這個樣子:
現在看上去就比較清楚了,這個網絡在t時刻接收到輸入之后,隱藏層的值是,輸出值是。關鍵一點是,的值不僅僅取決于,還取決于。我們可以用下面的公式來表示循環神經網絡的計算方法:
式1是輸出層的計算公式,輸出層是一個全連接層,也就是它的每個節點都和隱藏層的每個節點相連。V是輸出層的權重矩陣,g是激活函數。式2是隱藏層的計算公式,它是循環層。U是輸入x的權重矩陣,W是上一次的值作為這一次的輸入的權重矩陣,f是激活函數。
從上面的公式我們可以看出,循環層和全連接層的區別就是循環層多了一個權重矩陣 W。
如果反復把式2帶入到式1,我們將得到:
雙向循環神經網絡
對于語言模型來說,很多時候光看前面的詞是不夠的,比如下面這句話:
可以想象,如果我們只看橫線前面的詞,手機壞了,那么我是打算修一修?換一部新的?還是大哭一場?這些都是無法確定的。但如果我們也看到了橫線后面的詞是『一部新手機』,那么,橫線上的詞填『買』的概率就大得多了。
在上一小節中的基本循環神經網絡是無法對此進行建模的,因此,我們需要雙向循環神經網絡,如下圖所示:
深度循環神經網絡
前面我們介紹的循環神經網絡只有一個隱藏層,我們當然也可以堆疊兩個以上的隱藏層,這樣就得到了深度循環神經網絡。如下圖所示:
吧啦吧啦…詳情請看原文,太多了。
二,遞歸神經網絡:
原文:https://zybuluo.com/hanbingtao/note/626300
遞歸神經網絡是啥
因為神經網絡的輸入層單元個數是固定的,因此必須用循環或者遞歸的方式來處理長度可變的輸入。循環神經網絡實現了前者,通過將長度不定的輸入分割為等長度的小塊,然后再依次的輸入到網絡中,從而實現了神經網絡對變長輸入的處理。一個典型的例子是,當我們處理一句話的時候,我們可以把一句話看作是詞組成的序列,然后,每次向循環神經網絡輸入一個詞,如此循環直至整句話輸入完畢,循環神經網絡將產生對應的輸出。如此,我們就能處理任意長度的句子了。入下圖所示:
然而,有時候把句子看做是詞的序列是不夠的,比如下面這句話『兩個外語學院的學生』:
上圖顯示了這句話的兩個不同的語法解析樹。可以看出來這句話有歧義,不同的語法解析樹則對應了不同的意思。一個是『兩個外語學院的/學生』,也就是學生可能有許多,但他們來自于兩所外語學校;另一個是『兩個/外語學院的學生』,也就是只有兩個學生,他們是外語學院的。為了能夠讓模型區分出兩個不同的意思,我們的模型必須能夠按照樹結構去處理信息,而不是序列,這就是遞歸神經網絡的作用。當面對按照樹/圖結構處理信息更有效的任務時,遞歸神經網絡通常都會獲得不錯的結果。
吧啦吧啦…詳情請看原文,太多了。
歡迎掃碼關注我的微信公眾號
總結
以上是生活随笔為你收集整理的循环神经网络(Recurrent Neural Network, RNN)和递归神经网络(Recursive Neural Network, RNN),你搞清楚了吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php sqlsrv 类,PHP for
- 下一篇: matlab2017中工具箱,【2017