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

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

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

RNN存在的問題及其改進方法,并介紹更多復雜的RNN變體

電子工程師 ? 來源:lq ? 2019-05-05 16:05 ? 次閱讀

主要內(nèi)容

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

梯度問題梯度消失梯度爆炸梯度剪裁LSTMGRURNN變體雙向RNN多層RNN梯度補充梯度向量化梯度推廣:雅可比矩陣鏈式法則重要等式下節(jié)預告閱讀更多

梯度問題

梯度消失

梯度消失

根據(jù)鏈式法則:

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

形式化表述:

由于:

所以:

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

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

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

如果梯度隨距離明顯減弱,則無法判斷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語言模型需要學習第7步"tickets"和末尾"tickets"之間的依賴關(guān)系。但如果梯度過小,則模型無法學習這種依賴關(guān)系,進而在測試時也無法預測長距離的依賴關(guān)系。

再來看一個例子:

The writer of the books __

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

梯度爆炸

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

在極端情況下,如果步長過大,還會導致訓練中出現(xiàn)Inf或NaN。

梯度剪裁

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

梯度剪裁示意

LSTM

RNN的主要問題是無法學會保存很多時間步前的信息

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

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

兩者都是n維向量

cell用于存儲長距離信息,亦稱為記憶單元

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

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

gate也是n維向量

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

gate是動態(tài)的,其值根據(jù)當前語境計算

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

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

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

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

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

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

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

具體如下圖所示:

LSTM cell

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

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

LSTM實際上是非常成功的

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

手寫識別、語音識別、機器翻譯、句法分析、看圖說話

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

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

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

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

GRU

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

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

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

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

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

和LSTM一樣,GRU也更容易保存長期信息。

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

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

RNN變體

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

例如:

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

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

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

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

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

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

雙向RNN

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

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

情緒分析任務(wù)

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

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

雙向RNN

在第t步:

正向RNN:

反向RNN:

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

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

下面是雙向RNN簡化圖。

雙向RNN簡化圖

注意:只有當輸入序列完整時,才適用雙向RNN。例如語言模型就不能使用雙向RNN,因為在語言模型中,只能使用左側(cè)語境。

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

多層RNN

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

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

多層RNN

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

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

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

總結(jié):

LSTM效果很好,GRU速度很快

梯度剪裁可以避免NaN

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

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

梯度補充

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

梯度向量化

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

梯度推廣:雅可比矩陣

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

其中單個元素就是普通的標量梯度:雅可比矩陣非常有用。

鏈式法則

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

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

重要等式

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

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

對向量本身求梯度

(,?)使用鏈式法則時,該項會消掉,因為矩陣或向量乘以單位矩陣,還是原矩陣或向量。

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

(,?)

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

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

交叉熵損失,對logits求梯度

(,,?)

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

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

    關(guān)注

    42

    文章

    4726

    瀏覽量

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

    關(guān)注

    0

    文章

    30

    瀏覽量

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

    關(guān)注

    0

    文章

    76

    瀏覽量

    6865

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    FPGA也能做RNN

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

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

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

    利用RNN進行文章生成

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

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

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

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

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

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

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

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

    強大的Bert模型家族,都是站在RNN的肩上,不斷演化、變強的。 這篇文章,闡述了RNN的方方面面,包括模型結(jié)構(gòu),優(yōu)缺點,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)缺點以及RNN模型的幾種應(yīng)用

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

    Vitis AI RNN用戶指南

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

    精選 25 個 RNN 問題

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

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

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

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

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

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

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

    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 ?448次閱讀

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

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