愛看/v電影/nn。
有人就會說,這個任務可以交給普通的卷積神經網路來做,就是乙個簡單的分類任務。不否認這種方法是可以的,但是在乙個句子中,單詞的前後關聯性對詞性**是由很大影響的。比如說**電影的時候,由於前面乙個詞是動詞,那麼電影這個詞作為名詞的概率會大於作為動詞的概率,因為動詞後面接名詞的情況很常見,動詞後面接動詞的情況很少見。
為了解決類似的問題,並且讓神經網路能更好處理序列資訊,讓神經網路也具有一定的記憶能力,rnn就這樣誕生了。
首先來看乙個比較簡單的迴圈神經網路:
圖源:【知乎】一文搞懂rnn(迴圈神經網路)基礎篇
上圖的元素有輸入層x,權重矩陣u,隱藏層s,權重矩陣w,權重矩陣v,輸出層o。他們之間的關係如下:
上面公式中的函式g和函式f都是這一層的啟用函式。對照上面的結構圖以及關係式,接下來我們來理解一下這兩行公式的含義:
第一行公式很好理解,就是張量相乘,然後經過啟用函式,t時刻的s和v相乘得到t時刻的o輸出。
第二行理解起來可能就有些困難,但是其實分成兩部分來看也並不困難。
第一部分:xt∗
ux_*u
xt∗
u是t時刻的輸入x
tx_t
xt和權重矩陣u的相乘,相當於t時刻s的一部分取決於t時刻的輸入xtx_
xt。
第二部分:也就是rnn的核心部分,w∗s
t−1w*s_
w∗st−1
表示權重矩陣w與t-1時刻的隱藏層s相乘。也就是說權重矩陣w是隱藏層s上一次的值作為這一次的輸入的權重。通過這一步就可以將隱藏層s在t-1時刻的記錄下的狀態作為輸入,從而影響t時刻的隱藏層s。s
ts_t
st的值不僅僅取決於x
tx_t
xt,還取決於st−
1s_st−1。
比如t時刻輸入x
xx的shape為7∗5
7*57∗
5,權重矩陣u
uu的shape為5∗10
5*10
5∗10
,通過矩陣乘法可以知道xt∗
ux_*u
xt∗
u的shape為7∗10
7*10
7∗10
,那麼權重矩陣w
ww的shape應該為7∗7
7*77∗
7,這樣t-1時刻的st−
1s_st−1與w
ww進行矩陣相乘的shape也是7∗10
7*10
7∗10
,這樣就可以和xt∗
ux_*u
xt∗
u相加了。
我們給出上面抽象圖具體的展開圖:
從上圖就可以很清楚的了解到,t-1時刻的隱藏層s到底是如何影響t時刻的隱藏層s的。
我們將rnn圖按照時間線展開,迴圈神經網路可以展開成下面這個樣子:
這樣就很清楚了,乙個網路在t時刻接收到輸入x
tx_t
xt之後,隱藏層的值為s
ts_t
st,輸出層是o
to_t
ot。其中,rnn的關鍵是,s
ts_t
st的值不僅僅取決於x
tx_t
xt,還取決於st−
1s_st−1
,也就是可以用上面提到的計算公式來表示迴圈神經網路的計算方法:
RNN迴圈神經網路
評測乙個句子出現的可能性 文字自動生成 rnn迴圈處理相同的任務,就是 句子接下來的單詞是什麼。rnn迴圈記錄前面所有文字的資訊 也叫做記憶 作為 當前詞的乙個輸入 1.語言模型和文字生成 語言模型中,輸入是經過編碼的詞向量序列,輸出是一系列 的詞 2.機器翻譯 機器翻譯必須等待所有輸入結束後才能輸...
迴圈神經網路 RNN
from torchnlp.word to vector import glove vectors glove vectors hello torch.nn.utils.clip grad norm p,10 10就是最大梯度的模閾值,即保留原來梯度的方向,但梯度大小縮放至10對與梯度瀰散現象,考慮...
RNN迴圈神經網路
神經網路基礎 神經網路可以當做是擬合任意函式的黑盒子,給定特定的輸入x,就能夠的得到希望的輸出y。神經網路結構如下圖 將神經網路模型訓練好之後,輸入層輸入乙個x,通過網路之後就能夠在輸出層輸出特定的y.有了這麼強大的模型,為什麼會出現rnn 迴圈神經網 它們單獨的乙個個的輸入,前乙個輸入和後乙個輸入...