0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RNN存在的問(wèn)題及其改進(jìn)方法,并介紹更多復(fù)雜的RNN變體

電子工程師 ? 來(lái)源:lq ? 2019-05-05 16:05 ? 次閱讀

主要內(nèi)容

上節(jié)學(xué)習(xí)了語(yǔ)言模型和循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)。這一節(jié)主要討論RNN存在的問(wèn)題及其改進(jìn)方法,并介紹更多復(fù)雜的RNN變體。

梯度問(wèn)題梯度消失梯度爆炸梯度剪裁LSTMGRURNN變體雙向RNN多層RNN梯度補(bǔ)充梯度向量化梯度推廣:雅可比矩陣鏈?zhǔn)椒▌t重要等式下節(jié)預(yù)告閱讀更多

梯度問(wèn)題

梯度消失

梯度消失

根據(jù)鏈?zhǔn)椒▌t:

梯度可以分解成若干中間梯度的乘積。現(xiàn)在的問(wèn)題是,如果,,這三項(xiàng)數(shù)值量級(jí)都很小,那么反向傳播越遠(yuǎn),則梯度信號(hào)越弱!這就是梯度消失問(wèn)題!

形式化表述:

由于:

所以:

考慮第i步損失,對(duì)之前的某步j(luò)的隱層狀態(tài)求梯度。表示如下:

考慮矩陣的L2范數(shù):

這里的關(guān)鍵是矩陣。Pascanu等人證明,如果的最大特征值小于1,經(jīng)過(guò)多次自乘后,梯度會(huì)表現(xiàn)出指數(shù)級(jí)縮小。由于使用sigmoid非線性激活函數(shù),上界恰好是1,所以會(huì)出現(xiàn)梯度消失。

如果梯度隨距離明顯減弱,則無(wú)法判斷t步和t+n步數(shù)據(jù)之間的依賴關(guān)系。

舉例:

When she tried to print her tickets, she found that the printer was out of toner. She went to the stationery store to buy more toner. It was very overpriced. After installing the toner into the printer, she finally printed her__

RNN語(yǔ)言模型需要學(xué)習(xí)第7步"tickets"和末尾"tickets"之間的依賴關(guān)系。但如果梯度過(guò)小,則模型無(wú)法學(xué)習(xí)這種依賴關(guān)系,進(jìn)而在測(cè)試時(shí)也無(wú)法預(yù)測(cè)長(zhǎng)距離的依賴關(guān)系。

再來(lái)看一個(gè)例子:

The writer of the books __

現(xiàn)在有兩個(gè)選項(xiàng):(is) (are)。正確的應(yīng)該是is。語(yǔ)義上,"is"和"writer"的距離更近;但順序上,"are"和"books"的距離更近。由于梯度消失的問(wèn)題,RNN語(yǔ)言模型更善于學(xué)習(xí)順序距離近的關(guān)系,這可能導(dǎo)致學(xué)習(xí)錯(cuò)誤,從而導(dǎo)致預(yù)測(cè)錯(cuò)誤。

梯度爆炸

同梯度消失相對(duì)的是梯度爆炸,這是由于矩陣最大特征值>1。如果梯度過(guò)大,則會(huì)導(dǎo)致SGD更新過(guò)大:這不利于參數(shù)調(diào)整(損失較大)。

在極端情況下,如果步長(zhǎng)過(guò)大,還會(huì)導(dǎo)致訓(xùn)練中出現(xiàn)Inf或NaN。

梯度剪裁

梯度爆炸的解決辦法是,如果梯度范數(shù)超過(guò)某個(gè)閾值,則進(jìn)行縮小,然后再SGD更新。相當(dāng)于,方向不變,調(diào)小步子。

梯度剪裁示意

LSTM

RNN的主要問(wèn)題是無(wú)法學(xué)會(huì)保存很多時(shí)間步前的信息。

1997年Hochreiter和Schmidhuber提出Long Short-Term Memory(LSTM),這也是一種RNN,用以解決梯度消失的問(wèn)題。

與RNN只有一種狀態(tài)相比,LSTM在第t步,共有兩種狀態(tài):hidden state 和 cell state ?

兩者都是n維向量

cell用于存儲(chǔ)長(zhǎng)距離信息,亦稱為記憶單元

LSTM可以擦除、寫入和讀取 cell信息

信息的擦/寫/讀由相應(yīng)的門進(jìn)行控制

gate也是n維向量

每一步t,gate各個(gè)元素可以是open(1), closed(0),或二者之間。如果門打開(kāi),則表示信息通過(guò);如果門關(guān)閉,則表示信息不能通過(guò)

gate是動(dòng)態(tài)的,其值根據(jù)當(dāng)前語(yǔ)境計(jì)算

現(xiàn)根據(jù)t步輸入,計(jì)算hidden state 和 cell state ?

遺忘門:決定保留或忘記之前cell state的哪些內(nèi)容

輸入門:決定當(dāng)前cell的哪些內(nèi)容寫入cell

輸出門:決定當(dāng)前cell的哪些內(nèi)容輸出到hidden state

新cell內(nèi)容:要寫入cell的新內(nèi)容

cell state:擦掉(忘記)上個(gè)cell state的部分內(nèi)容,寫入(輸入)新cell內(nèi)容

hidden state:讀取(輸出)cell的某些內(nèi)容

具體如下圖所示:

LSTM cell

LSTM結(jié)構(gòu)讓RNN更容易保存很多步以前的信息

LSTM并不保證不出現(xiàn)梯度消失/梯度爆炸

LSTM實(shí)際上是非常成功的

2013-2015年,LSTM取得了一流的效果

手寫識(shí)別、語(yǔ)音識(shí)別、機(jī)器翻譯、句法分析、看圖說(shuō)話

LSTM由于效果好,成為主流方法

2019年,在某些領(lǐng)域,其他方法(如Transformer)成為了主流方法

WMT 2016,總結(jié)報(bào)告出現(xiàn)RNN 44次

WMT 2018,總結(jié)報(bào)告出現(xiàn) RNN 9次,Transformer 63次。

GRU

2014年Cho 等人提出GRU(Gated Recurrent Units),在保留LSTM優(yōu)點(diǎn)的同時(shí),去除其不必要的繁雜。在每一步t,只有輸入和hidden state ,沒(méi)有cell state:

update gate:決定更新hidden state的哪些部分內(nèi)容,相當(dāng)于LSTM中的遺忘門和輸入門。

reset gate:決定前一hidden state哪些部分用于計(jì)算新hidden state的內(nèi)容

新hidden state內(nèi)容:reset gate選擇前一hidden state的有用信息,并輸入新的hidden state

hidden state:綜合了前一hidden state和當(dāng)前hidden state的內(nèi)容,并在兩者之間尋找平衡點(diǎn)

和LSTM一樣,GRU也更容易保存長(zhǎng)期信息。

除此之外,研究人員提出了很多門控RNN,但LSTM和GRU使用最為廣泛。

LSTM和GRU的最大區(qū)別是,后者計(jì)算速度更快,參數(shù)更少。但并沒(méi)有嚴(yán)格證據(jù)表明孰優(yōu)孰劣。所以在實(shí)踐中,可以先使用LSTM,然后再試試GRU。

RNN變體

梯度爆炸/消失不僅僅是RNN存在的問(wèn)題。由于鏈?zhǔn)椒▌t和非線性激活函數(shù),所有神經(jīng)網(wǎng)絡(luò)(包括前向和卷積神經(jīng)網(wǎng)絡(luò)),尤其是深度神經(jīng)網(wǎng)絡(luò),都會(huì)出現(xiàn)梯度消失/爆炸問(wèn)題。這導(dǎo)致低層網(wǎng)絡(luò)訓(xùn)練非常緩慢。那么解決辦法就是在神經(jīng)網(wǎng)絡(luò)之間添加直接連接,使梯度傳播更順暢。

例如:

殘差連接,亦稱ResNet。它直接將輸入信息原封不動(dòng)地加在其他隱層上。

殘差網(wǎng)絡(luò)構(gòu)件

稠密連接,亦稱DenseNet,把所有層都連接起來(lái)。效果更好。

稠密連接:每一層以之前所有層feature-maps為輸入

高速連接,亦稱HighwayNet,類似于殘差連接,但identity連接和transformation層由動(dòng)態(tài)門控制

結(jié)論:雖然梯度消失/爆炸是個(gè)普遍存在的問(wèn)題,但由于相同矩陣連續(xù)相乘導(dǎo)致RNN尤其不穩(wěn)定。

雙向RNN

在情緒分類任務(wù)中,假如輸入是某個(gè)影評(píng),我們希望了解是好評(píng)還是差評(píng)。一般可以使用簡(jiǎn)單RNN進(jìn)行情緒分類。RNN可以編碼句子。RNN的隱層狀態(tài)就是句子表示。

下圖藍(lán)色方框的隱藏狀態(tài)可以看作詞"terribly"的語(yǔ)境表示。

情緒分析任務(wù)

但是這些語(yǔ)境表示僅僅考慮了詞的左側(cè)語(yǔ)境。很明顯,"terribly"右側(cè)的"exciting"修改了"terribly"的詞義,將整個(gè)句子的負(fù)面情緒扭轉(zhuǎn)為正面情緒。右側(cè)語(yǔ)境同樣重要!這導(dǎo)致了雙向RNN的出現(xiàn)。

雙向RNN由兩個(gè)RNN組成:正向RNN和反向RNN。反向RNN和正向RNN一樣,只不過(guò)它從右到左開(kāi)始編碼。在隱層狀態(tài),則將兩個(gè)RNN輸出進(jìn)行拼接。

雙向RNN

在第t步:

正向RNN:

反向RNN:

隱層狀態(tài)拼接:

通常正向RNN和反向RNN權(quán)重不同。

下面是雙向RNN簡(jiǎn)化圖。

雙向RNN簡(jiǎn)化圖

注意:只有當(dāng)輸入序列完整時(shí),才適用雙向RNN。例如語(yǔ)言模型就不能使用雙向RNN,因?yàn)樵谡Z(yǔ)言模型中,只能使用左側(cè)語(yǔ)境。

最近很火的BERT(BidirectionalEncoder Representations from Transformers)就使用了雙向信息。后面還會(huì)談到BERT。

多層RNN

雖然RNN展開(kāi)后在一個(gè)維度已經(jīng)很深了,我們還可以在另外一個(gè)維度增加深度,這就是多層RNN。

多層RNN可以實(shí)現(xiàn)更加復(fù)雜的表示。低層RNN計(jì)算低層特征;高層RNN計(jì)算高層特征。

多層RNN

在實(shí)踐中,高性能RNN通常都是多層RNN(但一般達(dá)不到前向網(wǎng)絡(luò)或卷積網(wǎng)絡(luò)的深度)。

例如,在2017年的論文中,Britz 等人發(fā)現(xiàn),在神經(jīng)機(jī)器翻譯中,encoder RNN 最好使用2-4層,decoder RNN 最好使用4層。要訓(xùn)練更深的RNN,則需要跨層連接或稠密連接。

基于Transformer的神經(jīng)網(wǎng)絡(luò)(如BERT)則高達(dá)24層。

總結(jié):

LSTM效果很好,GRU速度很快

梯度剪裁可以避免NaN

如果有完整信息,盡量使用雙向RNN

如果有計(jì)算資源,盡量使用多層RNN,層數(shù)過(guò)多時(shí),則需要跨層/稠密連接。

梯度補(bǔ)充

以下作為CS224N-2019-3的補(bǔ)充。梯度計(jì)算是神經(jīng)網(wǎng)絡(luò)訓(xùn)練的核心。逐個(gè)推導(dǎo)神經(jīng)網(wǎng)絡(luò)各個(gè)參數(shù)的梯度冗長(zhǎng)復(fù)雜,因此有必要使用矩陣/向量形式進(jìn)行計(jì)算。

梯度向量化

給定1個(gè)輸出和n個(gè)輸入的函數(shù):其梯度就是每個(gè)輸入的偏導(dǎo)的向量:

梯度推廣:雅可比矩陣

給定m個(gè)輸出和n個(gè)輸入的函數(shù):其偏導(dǎo)數(shù)就是mxn矩陣,即雅可比梯度矩陣。:

其中單個(gè)元素就是普通的標(biāo)量梯度:雅可比矩陣非常有用。

鏈?zhǔn)椒▌t

一元函數(shù):導(dǎo)數(shù)相乘

多元函數(shù):雅可比矩陣相乘

重要等式

矩陣乘以列向量,對(duì)列向量求梯度(?)

行向量乘以矩陣,對(duì)行向量求梯度(,?)

對(duì)向量本身求梯度

(,?)使用鏈?zhǔn)椒▌t時(shí),該項(xiàng)會(huì)消掉,因?yàn)榫仃嚮蛳蛄砍艘詥挝痪仃?,還是原矩陣或向量。

對(duì)向量各個(gè)元素施加同一函數(shù)后,對(duì)向量求梯度

(?)

矩陣乘以列向量,對(duì)矩陣求梯度(,?)

行向量乘以矩陣,對(duì)矩陣求梯度(,,?)

交叉熵?fù)p失,對(duì)logits求梯度

(,,?)

這些等式可用于快速計(jì)算很多神經(jīng)網(wǎng)絡(luò)的梯度。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4734

    瀏覽量

    100420
  • 梯度
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    10302
  • rnn
    rnn
    +關(guān)注

    關(guān)注

    0

    文章

    76

    瀏覽量

    6868

原文標(biāo)題:梯度消失和神奇RNN(CS224N-2019-7)

文章出處:【微信號(hào):gh_b11486d178ef,微信公眾號(hào):語(yǔ)言和智能】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPGA也能做RNN

    的重要事件。標(biāo)準(zhǔn)的RNN可以保留和使用最近的過(guò)去信息,但是不能學(xué)習(xí)長(zhǎng)期的依賴關(guān)系。并且由于存在梯度消失和爆炸的問(wèn)題,傳統(tǒng)的RNN無(wú)法訓(xùn)練較長(zhǎng)的序列。為了解決上述問(wèn)題,LSTM添加了記憶控制單元來(lái)決定何時(shí)
    發(fā)表于 07-31 10:11

    RNN算法的三個(gè)關(guān)鍵步驟

    DL之RNNRNN算法相關(guān)論文、相關(guān)思路、關(guān)鍵步驟、配圖集合+TF代碼定義
    發(fā)表于 12-28 14:20

    利用RNN進(jìn)行文章生成

    利用RNN進(jìn)行文章生成
    發(fā)表于 05-24 08:35

    遞歸神經(jīng)網(wǎng)絡(luò)(RNN

    RNN的代碼,了解RNN內(nèi)部發(fā)生的情況。以下代碼包含RNN類:除了上述代碼中的單詞RNN之外,其他一切聽(tīng)起來(lái)與在前面章節(jié)中使用的非常類似,
    發(fā)表于 07-20 09:27

    放棄 RNN 和 LSTM 吧,它們真的不好用

    2014 年 RNN/LSTM 起死回生。自此,RNN/LSTM 及其變種逐漸被廣大用戶接受和認(rèn)可。起初,LSTM 和 RNN 只是一種解決序列學(xué)習(xí)和序列翻譯問(wèn)題的
    的頭像 發(fā)表于 04-25 09:43 ?2.1w次閱讀

    循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)和(LSTM)初學(xué)者指南

    最近,有一篇入門文章引發(fā)了不少關(guān)注。文章中詳細(xì)介紹了循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN),及其變體長(zhǎng)短期記憶(LSTM)背后的原理。
    發(fā)表于 02-05 13:43 ?885次閱讀

    神經(jīng)網(wǎng)絡(luò)中最經(jīng)典的RNN模型介紹

    強(qiáng)大的Bert模型家族,都是站在RNN的肩上,不斷演化、變強(qiáng)的。 這篇文章,闡述了RNN的方方面面,包括模型結(jié)構(gòu),優(yōu)缺點(diǎn),RNN模型的幾種應(yīng)用,RNN常使用的激活函數(shù),
    的頭像 發(fā)表于 05-10 10:22 ?1.2w次閱讀
    神經(jīng)網(wǎng)絡(luò)中最經(jīng)典的<b class='flag-5'>RNN</b>模型<b class='flag-5'>介紹</b>

    深度分析RNN的模型結(jié)構(gòu),優(yōu)缺點(diǎn)以及RNN模型的幾種應(yīng)用

    強(qiáng)大的Bert模型家族,都是站在RNN的肩上,不斷演化、變強(qiáng)的。 這篇文章,闡述了RNN的方方面面,包括模型結(jié)構(gòu),優(yōu)缺點(diǎn),RNN模型的幾種應(yīng)用,RNN常使用的激活函數(shù),
    的頭像 發(fā)表于 05-13 10:47 ?2.4w次閱讀
    深度分析<b class='flag-5'>RNN</b>的模型結(jié)構(gòu),優(yōu)缺點(diǎn)以及<b class='flag-5'>RNN</b>模型的幾種應(yīng)用

    Vitis AI RNN用戶指南

    核、工具、庫(kù)、模型和示例設(shè)計(jì)組成。它們?cè)谠O(shè)計(jì)時(shí)充分考慮了高效率和易用性,可在 Xilinx FPGA 和自適應(yīng)計(jì)算加速平臺(tái) (ACAP) 上釋放 AI 加速的全部潛力。RNN 工具通過(guò)抽象底層 FPGA 和 ACAP 的復(fù)雜性,使開(kāi)發(fā)
    發(fā)表于 09-13 17:32 ?0次下載
    Vitis AI <b class='flag-5'>RNN</b>用戶指南

    精選 25 個(gè) RNN 問(wèn)題

    ,非常適合RNN。與其他神經(jīng)網(wǎng)絡(luò)不同,RNN具有內(nèi)部存儲(chǔ)器,允許它們保留來(lái)自先前輸入的信息,根據(jù)整個(gè)序列的上下文做出預(yù)測(cè)或決策。在本文中,我們將探討RNN的架構(gòu)、它
    的頭像 發(fā)表于 12-15 08:28 ?591次閱讀
    精選 25 個(gè) <b class='flag-5'>RNN</b> 問(wèn)題

    什么是RNN(循環(huán)神經(jīng)網(wǎng)絡(luò))?RNN的基本原理和優(yōu)缺點(diǎn)

    RNN(Recurrent Neural Network,循環(huán)神經(jīng)網(wǎng)絡(luò))是一種專門用于處理序列數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),它能夠在序列的演進(jìn)方向上進(jìn)行遞歸,通過(guò)所有節(jié)點(diǎn)(循環(huán)單元)的鏈?zhǔn)竭B接來(lái)捕捉序列中
    的頭像 發(fā)表于 07-04 11:48 ?2547次閱讀

    rnn神經(jīng)網(wǎng)絡(luò)基本原理

    序列預(yù)測(cè)等領(lǐng)域有著廣泛的應(yīng)用。本文將詳細(xì)介紹RNN的基本原理、結(jié)構(gòu)、優(yōu)化方法和應(yīng)用場(chǎng)景。 RNN的基本原理 1.1 循環(huán)結(jié)構(gòu) RNN的核心思
    的頭像 發(fā)表于 07-04 15:02 ?596次閱讀

    rnn神經(jīng)網(wǎng)絡(luò)模型原理

    的應(yīng)用。本文將介紹RNN的原理、結(jié)構(gòu)、優(yōu)化方法以及實(shí)際應(yīng)用。 RNN的基本原理 1.1 循環(huán)結(jié)構(gòu) RNN的核心特點(diǎn)是具有循環(huán)結(jié)構(gòu),即網(wǎng)絡(luò)中的
    的頭像 發(fā)表于 07-04 15:40 ?464次閱讀

    rnn是什么神經(jīng)網(wǎng)絡(luò)

    RNN(Recurrent Neural Network,循環(huán)神經(jīng)網(wǎng)絡(luò))是一種具有循環(huán)連接的神經(jīng)網(wǎng)絡(luò),它能夠處理序列數(shù)據(jù),并且具有記憶能力。與傳統(tǒng)的前饋神經(jīng)網(wǎng)絡(luò)(Feedforward Neural
    的頭像 發(fā)表于 07-05 09:49 ?530次閱讀

    CNN與RNN的關(guān)系?

    在深度學(xué)習(xí)的廣闊領(lǐng)域中,卷積神經(jīng)網(wǎng)絡(luò)(CNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)是兩種極為重要且各具特色的神經(jīng)網(wǎng)絡(luò)模型。它們各自在圖像處理、自然語(yǔ)言處理等領(lǐng)域展現(xiàn)出卓越的性能。本文將從概念、原理、應(yīng)用場(chǎng)景及代碼示例等方面詳細(xì)探討CNN與RNN的關(guān)系,旨在深入理解這兩種網(wǎng)絡(luò)模型
    的頭像 發(fā)表于 07-08 16:56 ?537次閱讀