Lecture 10 循環(huán)神經(jīng)網(wǎng)絡(luò)

本課重點(diǎn):

  • RNN的概念與多種形式

  • 語言模型

  • 圖像標(biāo)注愿险、視覺問答颇蜡、注意力模型

  • RNN梯度流

1 RNN的概念與多種形式

1.1 形式

普通的神經(jīng)網(wǎng)絡(luò)會(huì)有一個(gè)固定的輸入(比如一張圖片、一個(gè)向量)辆亏,經(jīng)過一系列隱藏層得到一個(gè)固定的輸出(比如一個(gè)分類或多個(gè)分類的評(píng)分)风秤。但是使用循環(huán)神經(jīng)網(wǎng)絡(luò)( Recurrent Neural Networks)會(huì)靈活的多,可以實(shí)現(xiàn)輸入和輸出的不同類型:

  • 1對(duì)1:普通神經(jīng)網(wǎng)絡(luò)扮叨,輸入輸出都是固定的缤弦。
  • 1對(duì)多:輸入固定尺寸,比如一幅圖片甫匹;輸出是可變長(zhǎng)度的序列甸鸟,比如一段文字描述。描述不同兵迅,單詞數(shù)可能就會(huì)不同抢韭,因此輸出值的長(zhǎng)度需要是一個(gè)變量。(圖片描述)
  • 多對(duì)1:輸入的尺寸是變化的恍箭,輸出是固定的刻恭。比如在情感分類任務(wù)中,想得到一段文字的情感屬性扯夭,那么輸入的一段文字就是可變的鳍贾,情感是積極還是消極就相對(duì)固定;再比如可以輸入時(shí)間不等的視頻交洗,然后判斷視頻中的活動(dòng)就是固定的骑科。
  • 多對(duì)多:輸入輸出的尺寸都是可變的,比如機(jī)器翻譯构拳,英文翻譯成中文咆爽。輸入輸出的句子長(zhǎng)度都是可變的梁棠,并且兩者不相等。
  • 多對(duì)多(一一對(duì)應(yīng)):輸入是可變序列斗埂,輸出是針對(duì)輸入的每個(gè)元素做出判斷符糊。比如輸入是幀數(shù)可變的視頻,現(xiàn)在對(duì)每一幀進(jìn)行決策呛凶,輸出也是可變的男娄。(幀級(jí)別視頻分類)

即使是輸入輸出尺寸都是固定的情形也可以使用循環(huán)神經(jīng)網(wǎng)絡(luò)。比如一張寫滿數(shù)字的固定尺寸的圖片漾稀,想要獲取上面的數(shù)字模闲,不是經(jīng)過一次前向傳播獲取結(jié)果,需要經(jīng)過一系列的觀察县好,觀察圖片的不同部分围橡,然后做出決策;再比如生成一張固定尺寸的圖片缕贡,上面寫滿了數(shù)字翁授,也需要經(jīng)過一系列的步驟,一次只能生成一部分晾咪。

1.2 概念

如下圖所示收擦,RNN都有一個(gè)這樣的小循環(huán)核心單元,輸入x給RNN谍倦,RNN有內(nèi)部隱藏態(tài)塞赂,這個(gè)內(nèi)部隱藏態(tài)會(huì)在每次讀取新的輸入時(shí)進(jìn)行更新。然后昼蛀,當(dāng)模型下一次讀取輸入時(shí)祥楣,內(nèi)部隱藏態(tài)會(huì)將結(jié)果反饋給模型绒窑。

通常,我們想讓RNN在每一個(gè)時(shí)間步都給出輸出,于是就有了下面的模式——
讀取輸入 -> 更新隱藏態(tài) -> 得到輸出恤溶。

由于輸入是一系列x向量异赫,在每一個(gè)時(shí)刻綠色的RNN部分可以使用循環(huán)公式來表示:

h_t=f_W(h_{t-1}, x_t)

其中泊业,x_t是某一時(shí)刻輸入的向量颅眶,h_{t-1}是該時(shí)刻之前的隱藏態(tài),f_W是參數(shù)W的函數(shù)详民,h_t是更新后的隱藏態(tài)延欠。依次循環(huán)。如果想要在每一個(gè)時(shí)間步驟得到一個(gè)輸出沈跨,那么可以把更新后的隱藏態(tài)h_t作為輸入由捎,經(jīng)過全連接網(wǎng)絡(luò),得到?jīng)Q策饿凛。注意:f_W在每一個(gè)時(shí)步都是相同的狞玛。

下面是一個(gè)最簡(jiǎn)單的例子邻奠,"Vanilla RNN":
h_t=tanh(W_{hh}h_{t-1}, W_{xh}x_t) y_t=W_{hy}h_t

舊狀態(tài)和輸入x都是與權(quán)重矩陣相乘再求和經(jīng)過非線性函數(shù)tanh(),輸出也是新狀態(tài)與權(quán)重矩陣相乘为居。每個(gè)隱藏態(tài)都只有一個(gè)單一的h向量。

1.3 計(jì)算圖

多對(duì)多(一一對(duì)應(yīng))

如果看公式不好理解RNN杀狡,可以畫出多步計(jì)算圖來描述蒙畴。比如下面是一個(gè)多對(duì)多的計(jì)算圖:

我們有一個(gè)初始狀態(tài) h0,現(xiàn)在在 t=1 時(shí)刻有輸入 x1呜象,將 h0膳凝、x1 帶入?yún)?shù)函數(shù) f 得到 h1更新隱藏態(tài)作為下一個(gè)時(shí)刻的狀態(tài),這樣以此類推得到 xt 時(shí)刻的隱藏態(tài) ht恭陡。計(jì)算 ht 的每一步都是使用的相同的參數(shù) W蹬音,參數(shù)函數(shù) f 也是完全相同的。這樣在反向傳播計(jì)算梯度時(shí)休玩,需要將每一個(gè)時(shí)刻的梯度累加起來得到最終 W 的梯度著淆。除了更新隱藏態(tài),如果每一個(gè)時(shí)刻都想得到一個(gè)輸出拴疤,可以直接將 ht 經(jīng)過某些網(wǎng)絡(luò)得到 yt永部,如果對(duì)于輸入 x 的每一個(gè)時(shí)刻都對(duì)應(yīng)一個(gè)真實(shí)標(biāo)簽的話,在計(jì)算出 yt 的同時(shí)可以得到每一步的損失 Lt呐矾,最終的損失也是所有的 Lt 加起來苔埋。(計(jì)算損失相對(duì)于 W 的梯度時(shí),不要忘記將所有梯度相加蜒犯。)

多對(duì)一

類似于情感分析任務(wù)组橄,根據(jù)最后一個(gè)隱藏態(tài)得到輸出。因?yàn)樽詈笠粋€(gè)隱藏態(tài)包含了之前所有的情況罚随。

一對(duì)多

一對(duì)多的情形會(huì)接受固定長(zhǎng)度的輸入項(xiàng)玉工,輸出不定長(zhǎng)的輸出項(xiàng),這個(gè)固定長(zhǎng)度的輸入項(xiàng)會(huì)用來初始化初始隱藏態(tài)毫炉,然后RNN會(huì)對(duì)輸出的單元逐個(gè)處理瓮栗,最終會(huì)得到不定長(zhǎng)的輸出序列,輸出的每個(gè)元素都得以展現(xiàn)瞄勾。

多對(duì)多

輸入輸出都是不定長(zhǎng)序列的情形费奸,比如機(jī)器翻譯,可以看作是多對(duì)一與一對(duì)多的組合进陡。首先輸入一個(gè)不定長(zhǎng)的x愿阐,將這個(gè)序列編碼成一個(gè)單獨(dú)的向量,然后作為輸入趾疚,輸入到一對(duì)多的模型中缨历,得到輸出序列以蕴,可能是用另一種語言表述的相同意思的句子。然后對(duì)這個(gè)不定長(zhǎng)的輸出辛孵,每一個(gè)時(shí)步都會(huì)做出預(yù)測(cè)丛肮,比如接下來使用什么詞。想象一下整個(gè)訓(xùn)練過程和計(jì)算圖的展開魄缚,對(duì)輸出序列的損失求和宝与,然后像之前一樣反向傳播。

2 語言模型

語言模型(Language Model)問題中冶匹,我們想要讀取一些語句习劫,從而讓神經(jīng)網(wǎng)絡(luò)在一定程度上學(xué)會(huì)生成自然語言,這在字符水平上是可行的嚼隘,我們讓模型逐個(gè)生成字符诽里。同樣,也可以在單詞層面上飞蛹,讓模型逐個(gè)生成單詞谤狡。

舉個(gè)字符層面上的例子,比如網(wǎng)絡(luò)會(huì)讀取一串字符序列卧檐,然后模型需要預(yù)測(cè)這個(gè)字符流的下一個(gè)字符是什么豌汇。我們有一個(gè)很小的字符表 [h, e, l, o] 包含所有字母,以及有一個(gè)訓(xùn)練序列 "hello"泄隔,使用循環(huán)公式:
h_t=tanh(W_{hh}h_{t-1}, W_{xh}x_t)

在語言模型的訓(xùn)練階段拒贱,我們將訓(xùn)練序列作為輸入項(xiàng),每一個(gè)時(shí)步的輸入都是一個(gè)字符佛嬉,首先需要做的是在神經(jīng)網(wǎng)絡(luò)中表示這個(gè)單詞逻澳。由于這里只使用了四個(gè)字符,所以用長(zhǎng)為4的向量來表示每個(gè)字符暖呕,只有字符對(duì)應(yīng)的位置是1斜做,其他位置為0。比如 ‘h’ 可以用向量 [1 0 0 0] 表示湾揽,‘l’ 使用 [0 0 1 0] 表示∪勘疲現(xiàn)在在第一個(gè)時(shí)步中,網(wǎng)絡(luò)會(huì)接收輸入 ‘h’, 進(jìn)入第一個(gè)RNN單元库物,然后得到輸出 y1霸旗,作為對(duì)接下來的字符的一個(gè)預(yù)測(cè),也就是網(wǎng)絡(luò)認(rèn)為的接下來應(yīng)該輸入的字符戚揭。由于第一個(gè)輸入的是 ‘h’诱告,所以接下來輸入的應(yīng)該是 ‘e’,但是模型只是在做預(yù)測(cè)民晒,如下圖所示精居,模型可能認(rèn)為接下來要輸入的是 ‘o’锄禽,因?yàn)轭A(yù)測(cè)的字符向量第四個(gè)值最大。在這種錯(cuò)誤預(yù)測(cè)下靴姿,可以使用softmax函數(shù)來度量我們對(duì)預(yù)測(cè)結(jié)果的不滿意程度沃但。在下一個(gè)時(shí)步,我們會(huì)輸入 ‘e’佛吓,利用這個(gè)輸入和之前的隱藏態(tài)計(jì)算出新的隱藏態(tài)绽慈,然后利用新的隱藏態(tài)對(duì)接下來的字符進(jìn)行預(yù)測(cè),我們希望下一個(gè)字符是 ‘l’辈毯,但這里模型不這么認(rèn)為,然后就有了損失搜贤。這樣經(jīng)過不斷的訓(xùn)練谆沃,模型就會(huì)學(xué)會(huì)如何根據(jù)當(dāng)前的輸入預(yù)測(cè)接下來的輸入。

在語言模型測(cè)試階段仪芒,我們想用訓(xùn)練好的模型測(cè)試樣本或者生成新的文本(類似于訓(xùn)練時(shí)使用的文本)唁影。方法是輸入文本的前綴來測(cè)試模型,下面的例子中前綴是 ‘h’掂名,現(xiàn)在在RNN的第一步輸入 ‘h’据沈,它會(huì)產(chǎn)生基于詞庫所有字母得分的一個(gè)softmax概率分布,然后使用這個(gè)概率分布預(yù)測(cè)接下來的輸出饺蔑,如果我們足夠幸運(yùn)得到了字符 ‘e’锌介,然后把這個(gè)得到的 ‘e’ 重新寫成 01 向量的形式反饋給模型,作為下一個(gè)時(shí)步的輸入猾警,以此類推孔祸。

截?cái)喾聪騻鞑ィ═runcated Backpropagation )

在前行傳播中需要遍歷整個(gè)序列來計(jì)算損失,在反向傳播中也需要遍歷整個(gè)序列來計(jì)算梯度发皿。如果是像訓(xùn)練維基百科中所有文本這樣的例子崔慧,那么時(shí)間花費(fèi)以及內(nèi)存占用都是巨大的,如下圖所示穴墅。

實(shí)際應(yīng)用中惶室,通常使用沿時(shí)間的截?cái)喾聪騻鞑?/strong>(Truncated Backpropagation ),這樣輸入的序列可以接近無窮玄货。前向傳播時(shí)不再使用整個(gè)序列計(jì)算損失皇钞,而是使用序列的一個(gè)塊,比如100個(gè)時(shí)步松捉,計(jì)算出損失值鹅士,然后反向傳播計(jì)算梯度。然后通過第二批數(shù)據(jù)惩坑,此時(shí)使用第一批數(shù)據(jù)更新的隱藏態(tài)掉盅,計(jì)算損失也拜,然后反向傳播時(shí)只能使用第二批輸入序列。這樣一直循環(huán)下去趾痘,大大節(jié)省開銷慢哈。

這個(gè)過程的完整實(shí)現(xiàn)代碼:點(diǎn)擊這里

應(yīng)用
  1. 使用莎士比亞的文集對(duì)語言模型進(jìn)行訓(xùn)練,然后生成新的文本永票。結(jié)果可以生成莎翁風(fēng)格的文章卵贱,雖然可能有些地方有錯(cuò)誤;
  1. 使用拓?fù)鋵W(xué)教材侣集,可以自動(dòng)生成一些定理键俱、公式甚至可以畫圖,雖然都沒有意義世分,但可以學(xué)會(huì)這些結(jié)構(gòu)编振。
  1. 使用linux源碼進(jìn)行訓(xùn)練〕袈瘢可以生成C代碼踪央,有縮進(jìn)有變量聲明甚至?xí)懽⑨尩鹊龋雌饋矸浅O馛代碼瓢阴,只是錯(cuò)誤很多無法編譯畅蹂。
解釋

在RNN中有隱藏向量,每一步都會(huì)更新荣恐,我們?cè)谶@些隱藏向量中尋找可以解釋的單元液斜。比如在語義訓(xùn)練中觀察隱藏向量中的某一個(gè)元素值,元素值會(huì)隨著每一個(gè)時(shí)步進(jìn)行改變叠穆。大多數(shù)的元素值變化都是雜亂無章的旗唁,似乎在進(jìn)行一些低級(jí)的語言建模。但是有一些元素卻有特殊的表現(xiàn):(藍(lán)數(shù)值低痹束,紅數(shù)值高)

  • 比如某些元素遇到引號(hào)后检疫,元素值會(huì)變得很低,然后一直保持很低直到下一個(gè)引號(hào)處被激活祷嘶,元素值變大屎媳,然后保持到下一個(gè)引號(hào)再變低。所以有可能是檢測(cè)引號(hào)的神經(jīng)元论巍。
  • 還有某些神經(jīng)元在統(tǒng)計(jì)回車符前的字符數(shù)量烛谊,即字符有多少時(shí)會(huì)自動(dòng)換行。某一行開始處元素的值很低嘉汰,然后慢慢增大丹禀,達(dá)到一定值后自動(dòng)變成0,然后文本換行。
  • 在訓(xùn)練代碼的例子中双泪,有些神經(jīng)元似乎在判斷是否在if語句持搜,是否在注釋內(nèi),以及表示不同的縮進(jìn)層級(jí)焙矛。


以上的例子可以看到葫盼,雖然我們訓(xùn)練的是文本,但是最終RNN學(xué)到一些文本的結(jié)構(gòu)村斟。當(dāng)然這些已經(jīng)不是計(jì)算機(jī)視覺的內(nèi)容了贫导。

3 圖像標(biāo)注、視覺問答蟆盹、注意力模型

之前提過很多次圖像標(biāo)注(Image Captioning)孩灯,即訓(xùn)練一個(gè)模型,輸入一張圖片逾滥,然后得到對(duì)這張圖片的自然語言語義描述峰档。這里輸出的語義可能是不同長(zhǎng)度的序列,不同的描述單詞字符數(shù)不同匣距,所以天生適合RNN模型。

以李飛飛實(shí)驗(yàn)室的模型為例哎壳,圖像標(biāo)注模型訓(xùn)練階段一般都先通過卷積神經(jīng)網(wǎng)絡(luò)處理圖像生成圖像向量毅待,然后輸入到循環(huán)神經(jīng)網(wǎng)絡(luò)語言模型的第一個(gè)時(shí)步中,RNN第一個(gè)時(shí)步會(huì)輸入開始標(biāo)志归榕,要對(duì)語言模型的輸出做一個(gè)softmax分值判定得到損失尸红,之后語言模型在每一個(gè)時(shí)步生成一個(gè)組成描述文本的單詞,如圖所示刹泄。

圖1 圖像標(biāo)注訓(xùn)練階段

測(cè)試階段和之前字符級(jí)的語言模型很相似外里。我們把測(cè)試圖像輸入到卷積神經(jīng)網(wǎng)絡(luò),但是不是用來得到不同分類的softmax得分特石,而是得到模型最后一個(gè)用于分類的全連接層之前的一個(gè)圖像向量盅蝗,用來概述整張圖像的內(nèi)容。之后會(huì)給語言模型輸入一個(gè)開始標(biāo)志姆蘸,告訴模型開始生成以這個(gè)圖像為條件的文本墩莫。不同于以往的隱藏態(tài)公式,現(xiàn)在需要把圖像信息輸入到每個(gè)時(shí)步用于更新隱藏態(tài):
h = tanh(Wxh * x + Whh * h + Wih * v)現(xiàn)在就可以根據(jù)圖像的內(nèi)容生成一個(gè)詞匯表(有很多詞匯)中所有單詞的一個(gè)softmax得分概率分布逞敷,取樣之后作為下一個(gè)時(shí)步的輸入狂秦。最后一步會(huì)采樣到結(jié)束符號(hào),這樣文本就生成完成推捐,正如我們?cè)谟?xùn)練的時(shí)候每次都是期望以結(jié)束符作為結(jié)束裂问。

圖2 圖像描述測(cè)試階段

這些訓(xùn)練后的模型在測(cè)試時(shí)對(duì)和訓(xùn)練集類似的片會(huì)表現(xiàn)的很好,對(duì)和訓(xùn)練集差距大的圖片可能會(huì)有一些誤解,比如對(duì)一些沒見過的物體進(jìn)行誤判堪簿,以及分不清扔球還是接球等痊乾。

Image Captioning with Attention(注意力模型)

這個(gè)模型的RNN在生成單詞時(shí),會(huì)將注意力放在圖像不同的部分〈魉Γ現(xiàn)在的CNN在處理圖像的時(shí)候符喝,不再返回一個(gè)單獨(dú)的向量,而是得到圖像不同位置的特征向量甜孤,比如 L個(gè)位置协饲,每個(gè)位置的特征有D維,最終返回的處理后的圖片數(shù)據(jù)是一個(gè) LxD 的特征圖缴川。這樣在RNN的每一個(gè)時(shí)步茉稠,除了得到詞匯表的采樣,還會(huì)得到基于圖片位置的分布把夸,即RNN想要觀察圖像的哪個(gè)部分而线。這種位置分布,就是RNN模型應(yīng)該觀察圖像哪個(gè)位置的注意力恋日。

在第一個(gè)隱藏態(tài)會(huì)計(jì)算基于圖片位置的分布 a1膀篮,這個(gè)分布會(huì)返回到圖像特征圖 LxD,給得出一個(gè)單一的具有統(tǒng)計(jì)性質(zhì)的 D 維特征向量岂膳,即把注意力集中在圖像的一部分誓竿。這個(gè)特征向量會(huì)作為下一個(gè)時(shí)步的額外輸入,另一個(gè)輸入是單詞谈截。然后會(huì)得到兩個(gè)輸出筷屡,一個(gè)是基于詞匯的分布,一個(gè)是基于位置的分布簸喂。這個(gè)過程會(huì)一直持續(xù)下去毙死,每個(gè)步驟都有兩個(gè)輸入兩個(gè)輸出。如下圖所示:

上圖z的計(jì)算公式可以是:
z = \sum_{i=1}^L {p_iv_i}
p_i
就是基于位置的分布喻鳄,
v_i
就是L個(gè)特征向量中的一個(gè)扼倘,最后得到一個(gè)統(tǒng)計(jì)向量
z
。這種結(jié)合所有特征的分布稱為軟注意(Soft attention)除呵,與之對(duì)應(yīng)的是硬注意(Hard attention)唉锌,一次只產(chǎn)生一個(gè)單獨(dú)的特征向量,不是所有特征的組合竿奏。硬注意的反向傳播比較復(fù)雜袄简,因?yàn)檫x擇的過程不是一個(gè)可微的函數(shù)。

圖3 軟注意與硬注意

這樣模型會(huì)自己學(xué)習(xí)每一個(gè)時(shí)步應(yīng)該看向圖片的什么位置得到什么詞匯泛啸,最終生成的文本就會(huì)很帥绿语!

這個(gè)模型也可以用于其他任務(wù),比如視覺問答(Visual Question Answering)。這里的模型會(huì)有兩個(gè)輸入吕粹,一個(gè)是圖像种柑,一個(gè)是關(guān)于圖像的用自然語言描述的問題。然后模型從一些答案中選擇一個(gè)正確的匹耕。這是一個(gè)多對(duì)一模型聚请,我們需要將問題作為序列輸入,針對(duì)序列的每一個(gè)元素建立RNN稳其,可以將問題概括成一個(gè)向量驶赏。然后把圖像也概括成一個(gè)向量,現(xiàn)在將兩個(gè)向量結(jié)合通過RNN編程預(yù)測(cè)答案既鞠。結(jié)合方式可以是直接連接起來也可以是進(jìn)行復(fù)雜的運(yùn)算煤傍。

4 RNN梯度流

多層RNN(Multilayer RNNs)

之前的隱藏態(tài)只有一層,現(xiàn)在隱藏態(tài)有三層嘱蛋。一次運(yùn)行得到RNN第一個(gè)隱藏態(tài)的序列蚯姆,然后作為第二個(gè)隱藏態(tài)的輸入。

4.1 普通RNN梯度流

前向傳播計(jì)算h_t

\begin{align*}h_t & = tanh(W_{hh}h_{t-1}+W_{xh}x_t) \\& = tanh\bigl(\bigl(\begin{matrix}W_{hh}&W_{xh} \end{matrix}\bigr)\bigl(\begin{matrix}h_{t-1}\\x_{t} \end{matrix}\bigr)\bigr) \\& =tanh\bigl(W\bigl(\begin{matrix}h_{t-1}\\x_{t} \end{matrix}\bigr)\bigr)\end{align*}

反向傳播梯度流從h_th_{t-1}需要乘W_{hh}^T.

但是在整個(gè)RNN訓(xùn)練過程中洒敏,如下圖所示龄恋,從最后一個(gè)隱藏態(tài)傳到第一個(gè)隱藏態(tài),中間要乘很多次權(quán)重凶伙。如果權(quán)重的最大奇異值大于1郭毕,就會(huì)梯度爆炸;最大奇異值小于1镊靴,梯度就會(huì)慢慢趨近0铣卡。

對(duì)于梯度爆炸链韭,可以給梯度設(shè)置一個(gè)閾值偏竟,如果梯度的L2范式超過這個(gè)閾值就要減小梯度,代碼如下:

grad_num = np.sum(grad * grad)
if grad_num > threshold:
    grad *= (threshold / grad_num)

對(duì)于梯度急速縮小的情形敞峭,可以換一個(gè)復(fù)雜的RNN網(wǎng)絡(luò)踊谋。

4.2 LSTM(Long Short Term Memory )

LSTM(長(zhǎng)短期記憶)網(wǎng)絡(luò)就是用來解決梯度爆炸和梯度縮減的問題的,與其在輸出上限制梯度旋讹,LSTM的網(wǎng)絡(luò)結(jié)構(gòu)更加復(fù)雜殖蚕。

LSTM在每一個(gè)時(shí)步都會(huì)維持兩個(gè)隱藏態(tài):ht 和普通RNN中的一致,是RNN網(wǎng)絡(luò)的隱藏態(tài)沉迹;還有一個(gè)單元狀態(tài)向量 ct睦疫,是保留在LSTM內(nèi)部的隱藏態(tài),不會(huì)完全暴露到外部去鞭呕。計(jì)算公式可以看出蛤育,LSTM會(huì)使用輸入和之前的隱藏態(tài)來更新四個(gè)組成 ct 的門,然后使用 ct 來更新 ht.

與普通RNN不同的是,普通RNN直接將權(quán)重矩陣 Wx_th_{t-1}拼接成的向量再經(jīng)過一個(gè) tanh() 函數(shù)就得到了隱藏態(tài) h_t瓦糕。而LSTM中的權(quán)重矩陣比普通RNN中權(quán)重矩陣大得多底洗,相乘的結(jié)果是得到4個(gè)與隱藏態(tài) h 大小相同的向量,然后分別通過不同的非線性函數(shù)就得到了單元狀態(tài) c_t 的四個(gè)門:i, f, o, g

  • i是輸入門(Input gate)咕娄,表示有多少內(nèi)容被寫到單元狀態(tài)亥揖;
  • f是遺忘門(Forget gate),表示對(duì)之前的單元狀態(tài)的遺忘程度圣勒;
  • o是輸出門(Output gate)费变,表示單元狀態(tài)輸出多少給隱藏態(tài);
  • g是門值門(Gate gate )灾而,控制寫入到單元狀態(tài)的信息胡控。

c_t的計(jì)算公式來看,之所采用不同的非線性函數(shù)旁趟,可以這么理解:f 是對(duì)之前的單元狀態(tài)的遺忘昼激,如果是0全部遺忘,如果是1就全部保留锡搜,那個(gè)圓圈加點(diǎn)的符號(hào)表示逐元素相乘橙困;i 和 g 共同控制寫入到單元狀態(tài)向量的信息,i 在0-1之間耕餐,g 在-1到1之間凡傅,這樣每個(gè)時(shí)步,單元狀態(tài)向量的每個(gè)元素最大自增1或最小自減1肠缔。這樣c_t可以看成是對(duì)[-1 1]的按時(shí)步計(jì)數(shù)夏跷。然后c_t通過tanh()將這個(gè)計(jì)數(shù)壓縮到[0 1]范圍,然后 o 來控制將多少單元狀態(tài)的信息輸出給隱藏態(tài) h_t明未。

LSTM梯度流

灰色的線表示LSTM前向傳播槽华,完全按照公式來的,圓圈加點(diǎn)運(yùn)算符表示兩個(gè)向量逐元素相乘趟妥,不是矩陣的乘法猫态。這樣從c_tc_{t-1}的反向傳播過程,只會(huì)與 f 進(jìn)行逐元素相乘披摄,與乘W相比要簡(jiǎn)單很多亲雪。由于不同的時(shí)步 f 的值都不同,不像普通RNN每次都乘相同的W疚膊,這樣就一定程度避免梯度爆炸或銳減义辕。而且 f 的值也是在[0, 1]性質(zhì)非常好。

當(dāng)多個(gè)單元連起來的時(shí)候寓盗,就會(huì)為梯度在單元狀態(tài)間流動(dòng)提供了一條高速公路灌砖。這種形式與殘差網(wǎng)絡(luò)很像夺巩。

4.3 GRU(Gated Recurrent Unit)

門循環(huán)單元(GRU)也是應(yīng)用了這種逐元素相乘與加法結(jié)合的形式,這樣梯度也能高速流動(dòng)周崭。

總結(jié)

  1. RNN是一種輸入輸出都很靈活的網(wǎng)絡(luò)結(jié)構(gòu)柳譬;
  2. Vanilla RNNs 很簡(jiǎn)單,但是效果不好续镇;比較普遍的是使用LSTM和GRU美澳,能有效的改善梯度流;
  3. RNN反向傳播梯度爆炸可以給梯度設(shè)置閾值摸航,而梯度銳減可以使用復(fù)雜的網(wǎng)絡(luò)制跟,比如LSTM;
  4. RNN的應(yīng)用:圖像標(biāo)注酱虎、視覺問答雨膨,都是將CNN與RNN結(jié)合起來;
  5. 理解語言模型與注意力模型读串;
  6. LSTM和GRU的代碼實(shí)現(xiàn):點(diǎn)擊這里
    高效的圖像標(biāo)注代碼:點(diǎn)擊這里
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末聊记,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子恢暖,更是在濱河造成了極大的恐慌排监,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杰捂,死亡現(xiàn)場(chǎng)離奇詭異舆床,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嫁佳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門挨队,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蒿往,你說我怎么就攤上這事盛垦。” “怎么了熄浓?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵情臭,是天一觀的道長(zhǎng)省撑。 經(jīng)常有香客問我赌蔑,道長(zhǎng),這世上最難降的妖魔是什么竟秫? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任娃惯,我火速辦了婚禮,結(jié)果婚禮上肥败,老公的妹妹穿的比我還像新娘趾浅。我一直安慰自己愕提,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布皿哨。 她就那樣靜靜地躺著浅侨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪证膨。 梳的紋絲不亂的頭發(fā)上如输,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音央勒,去河邊找鬼不见。 笑死,一個(gè)胖子當(dāng)著我的面吹牛崔步,可吹牛的內(nèi)容都是我干的稳吮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼井濒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼灶似!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瑞你,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬榮一對(duì)情侶失蹤喻奥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后捏悬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撞蚕,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年过牙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了甥厦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寇钉,死狀恐怖刀疙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扫倡,我是刑警寧澤谦秧,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站撵溃,受9級(jí)特大地震影響疚鲤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缘挑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一集歇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧语淘,春花似錦诲宇、人聲如沸际歼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹅心。三九已至,卻和暖如春纺荧,著一層夾襖步出監(jiān)牢的瞬間巴帮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工虐秋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留榕茧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓客给,卻偏偏與公主長(zhǎng)得像用押,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子靶剑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容