上一章我們?cè)敿?xì)介紹了小樣本做文本分類中的膠囊網(wǎng)絡(luò),那么這一章我們就來(lái)看看RNN(循環(huán)神經(jīng)網(wǎng)絡(luò))。大神們準(zhǔn)備好了嗎,我們要發(fā)車了~
首先就是我們?yōu)槭裁葱枰猂NN?
舉個(gè)簡(jiǎn)單的例子,最近娛樂(lè)圈頂流明星吳亦凡又出新瓜,大家都吃了咩?(反正小編吃的很飽哈)那么就以我 吃 瓜為例,三個(gè)單詞標(biāo)注詞性為 我/nn 吃/v 瓜/nn。
那么這個(gè)任務(wù)的輸入就是:
我 吃 瓜 (已經(jīng)分詞好的句子)
這個(gè)任務(wù)的輸出是:
我/nn 吃/v 瓜/nn(詞性標(biāo)注好的句子)
很明顯,一個(gè)句子中,前一個(gè)單詞其實(shí)對(duì)于當(dāng)前單詞的詞性預(yù)測(cè)是有很大影響的,比如預(yù)測(cè)“瓜”的時(shí)候,由于前面的吃是一個(gè)動(dòng)詞,那么很顯然“瓜”作為名詞的概率就會(huì)遠(yuǎn)大于動(dòng)詞的概率,因?yàn)閯?dòng)詞后面接名詞很常見(jiàn),而動(dòng)詞后面接動(dòng)詞很少見(jiàn)。
所以為了更好的處理序列的信息,解決一些這樣類似的問(wèn)題,我們的RNN就誕生了。
rnn的結(jié)構(gòu)和原理
看完初步的概念我們來(lái)深入一點(diǎn)看看RNN的結(jié)構(gòu)和原理。rnn的結(jié)構(gòu)和原理
剛開(kāi)始看到這幅圖的同學(xué)會(huì)不會(huì)有一點(diǎn)懵懵?沒(méi)關(guān)系,我們來(lái)帶著解釋一遍~
首先通過(guò)這副圖,就能明白R(shí)NN的意義就是每個(gè)輸出的狀態(tài)都只由前一時(shí)刻的狀態(tài)和當(dāng)前時(shí)刻的輸入來(lái)決定。從等式左邊的一個(gè)環(huán)繞箭頭就能明白參數(shù)是共享的。
一個(gè)序列的每個(gè)詞就是每個(gè)時(shí)間步,每個(gè)詞都會(huì)對(duì)應(yīng)得到一個(gè)hidden_state,并將這個(gè)隱藏層狀態(tài)輸入下一個(gè)時(shí)間步。
最終會(huì)得到output和hidden,output是每一步運(yùn)算的輸出,因此output=(seqence_len, batch_size, hidden_size)。hidden_state是每一步的輸出,當(dāng)然有參數(shù)來(lái)控制可以取最后一步的輸出,所以RNN中一般output=hidden。
lstm的結(jié)構(gòu)和原理
聊完一圈RNN之后,我們來(lái)看看它的變種兄弟-LSTM吧!
別慌,我說(shuō)的不是變種成僵尸的那種東東,Lstm為長(zhǎng)短期記憶,是在RNN的基礎(chǔ)上引入了細(xì)胞狀態(tài),根據(jù)細(xì)胞狀態(tài)可決定哪些狀態(tài)應(yīng)該保留下來(lái),哪些狀態(tài)應(yīng)該被遺忘,可以在一定程度上解決梯度消失問(wèn)題。
那么為了能夠?qū)W習(xí)序列關(guān)系的長(zhǎng)期依賴,Lstm的輸出和rnn一樣都包含output和hidden,除此之外還有一個(gè)cell_state,這個(gè)就是學(xué)習(xí)序列信息lstm與rnn的差異。
在lstm里面理解的就是用“門”結(jié)構(gòu),來(lái)選擇信息通過(guò),關(guān)鍵是用了$sigmoid(\cdot)$函數(shù)來(lái)區(qū)分趨于0的和趨于1的特征數(shù)據(jù)。
遺忘門:通過(guò)$f_t=\sigma(W_f \cdot[h_{t-1},x_t] + b_f)$ 來(lái)判斷隱藏層信息的取舍。
輸入門:
通過(guò)$\tanh(\cdot)$,來(lái)將隱藏層狀態(tài)映射到(-1,1)最后來(lái)更新$C_{t-1}$ 到$C_t $
輸出門:
會(huì)發(fā)現(xiàn)$f_t、i_t、o_t$的構(gòu)成是一致的。但是通過(guò)不同的權(quán)重來(lái)學(xué)習(xí)。因此優(yōu)化lstm是將遺忘門和輸入門合并成了一個(gè)更新門,這就是GRU:
可以理解為主要分為兩部分,第一部分:
$z_t$表示更新向量,$r_t$表示重置向量,于是在接下來(lái)就能夠考慮$r_t$與$h_{t-1}$的相關(guān)性來(lái)去對(duì)部分?jǐn)?shù)據(jù)進(jìn)行重置,也就相當(dāng)于舍棄。實(shí)現(xiàn)遺忘門的效果。
第二部分:
很好理解,就可以通過(guò)篩選得到的有效的隱藏層信息$\tilde{h}t$和更新向量來(lái)獲取最終的輸出結(jié)果$(1-z_t) * h{t-1}$表示對(duì)當(dāng)前一時(shí)刻隱藏層狀態(tài)選擇性“遺忘”。$z_t * \tilde{h}_t$就表示對(duì)當(dāng)前序列信息的“記憶”。
sequence-to-sequence的結(jié)構(gòu)和原理
也叫做Encoder-Decoder結(jié)構(gòu),在encoder和decoder中也都是用序列模型,就是將數(shù)據(jù)先encode成一個(gè)上下文向量context vector,這個(gè)context vector可以是1)最后一個(gè)隱藏層狀態(tài),2)可以是完整的隱藏層輸出,3)也可以是對(duì)隱藏層輸出做激活或者線性變換之后的輸出。
之后在decoder中,將context vector作為前一時(shí)刻初始化的狀態(tài)輸入從而將語(yǔ)義按監(jiān)督信息的需要解碼。或者將context vector作為decoder每一個(gè)時(shí)間步的輸入。因此會(huì)發(fā)現(xiàn)seq2seq并不限制輸入和輸出的序列長(zhǎng)度,這就表示應(yīng)用范圍可以很廣。
Attention
會(huì)發(fā)現(xiàn)context vector并不能夠包含長(zhǎng)句的所有信息,或者說(shuō)會(huì)造成信息的丟失,因此attention機(jī)制就是能夠向decoder的每一個(gè)時(shí)間步輸入不同的文本信息,提升語(yǔ)義的理解能力。
因?yàn)閘stm會(huì)得到完整的包含每一個(gè)時(shí)間步的輸出得到的ouput和hidden,因此$h_i$和$C_j$的相關(guān)性就能夠表示在decode第$j$步序列時(shí)最關(guān)心的文本是那一步的 $h_i $,用 $\alpha_{ij}$來(lái)表示。
每一個(gè)encoder的hidden單元和每一個(gè)decoder的hidden單元做點(diǎn)乘,得到每?jī)蓚€(gè)單元之間的相關(guān)性,在lstm/rnn之后用attention就是計(jì)算hidden和ouput的每個(gè)單元之間的相關(guān)性,然后做一步$softmax$得到encoder的hidden或者說(shuō)是lstm的hidden每個(gè)單元的attention weights。因此:Attention 無(wú)非就是這三個(gè)公式:
從常規(guī)的(Q,K,V)的角度來(lái)理解,可以如圖所示:
在Attention中$Q$和$K$分別是hidden和output,同樣的$V$也是ouput,在self-attention中Q=K=V,并且$\sqrt{d_k}$有些情況下是不會(huì)加在attention過(guò)程中的。
編輯:jq
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
6715瀏覽量
88311 -
Gru
+關(guān)注
關(guān)注
0文章
12瀏覽量
7470
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論