本課重點(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)公式來表示:
其中泊业,是某一時(shí)刻輸入的向量颅眶,是該時(shí)刻之前的隱藏態(tài),是參數(shù)W的函數(shù)详民,是更新后的隱藏態(tài)延欠。依次循環(huán)。如果想要在每一個(gè)時(shí)間步驟得到一個(gè)輸出沈跨,那么可以把更新后的隱藏態(tài)作為輸入由捎,經(jīng)過全連接網(wǎng)絡(luò),得到?jīng)Q策饿凛。注意:在每一個(gè)時(shí)步都是相同的狞玛。
下面是一個(gè)最簡(jiǎn)單的例子邻奠,"Vanilla RNN":
舊狀態(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)公式:
在語言模型的訓(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)用
- 使用莎士比亞的文集對(duì)語言模型進(jìn)行訓(xùn)練,然后生成新的文本永票。結(jié)果可以生成莎翁風(fēng)格的文章卵贱,雖然可能有些地方有錯(cuò)誤;
- 使用拓?fù)鋵W(xué)教材侣集,可以自動(dòng)生成一些定理键俱、公式甚至可以畫圖,雖然都沒有意義世分,但可以學(xué)會(huì)這些結(jié)構(gòu)编振。
- 使用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è)組成描述文本的單詞,如圖所示刹泄。
測(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):
現(xiàn)在就可以根據(jù)圖像的內(nèi)容生成一個(gè)詞匯表(有很多詞匯)中所有單詞的一個(gè)softmax得分概率分布逞敷,取樣之后作為下一個(gè)時(shí)步的輸入狂秦。最后一步會(huì)采樣到結(jié)束符號(hào),這樣文本就生成完成推捐,正如我們?cè)谟?xùn)練的時(shí)候每次都是期望以結(jié)束符作為結(jié)束裂问。
這些訓(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è)輸出。如下圖所示:
這樣模型會(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ì)算:
反向傳播梯度流從到需要乘.
但是在整個(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)重矩陣 乘 和 拼接成的向量再經(jīng)過一個(gè) tanh() 函數(shù)就得到了隱藏態(tài) 瓦糕。而LSTM中的權(quán)重矩陣比普通RNN中權(quán)重矩陣大得多底洗,相乘的結(jié)果是得到4個(gè)與隱藏態(tài) h 大小相同的向量,然后分別通過不同的非線性函數(shù)就得到了單元狀態(tài) 的四個(gè)門:
- 是輸入門(Input gate)咕娄,表示有多少內(nèi)容被寫到單元狀態(tài)亥揖;
- 是遺忘門(Forget gate),表示對(duì)之前的單元狀態(tài)的遺忘程度圣勒;
- 是輸出門(Output gate)费变,表示單元狀態(tài)輸出多少給隱藏態(tài);
- 是門值門(Gate gate )灾而,控制寫入到單元狀態(tài)的信息胡控。
從的計(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肠缔。這樣可以看成是對(duì)[-1 1]的按時(shí)步計(jì)數(shù)夏跷。然后通過tanh()將這個(gè)計(jì)數(shù)壓縮到[0 1]范圍,然后 o 來控制將多少單元狀態(tài)的信息輸出給隱藏態(tài) 明未。
LSTM梯度流
灰色的線表示LSTM前向傳播槽华,完全按照公式來的,圓圈加點(diǎn)運(yùn)算符表示兩個(gè)向量逐元素相乘趟妥,不是矩陣的乘法猫态。這樣從到的反向傳播過程,只會(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é)
- RNN是一種輸入輸出都很靈活的網(wǎng)絡(luò)結(jié)構(gòu)柳譬;
- Vanilla RNNs 很簡(jiǎn)單,但是效果不好续镇;比較普遍的是使用LSTM和GRU美澳,能有效的改善梯度流;
- RNN反向傳播梯度爆炸可以給梯度設(shè)置閾值摸航,而梯度銳減可以使用復(fù)雜的網(wǎng)絡(luò)制跟,比如LSTM;
- RNN的應(yīng)用:圖像標(biāo)注酱虎、視覺問答雨膨,都是將CNN與RNN結(jié)合起來;
- 理解語言模型與注意力模型读串;
- LSTM和GRU的代碼實(shí)現(xiàn):點(diǎn)擊這里
高效的圖像標(biāo)注代碼:點(diǎn)擊這里