主要內容
上節學習了語言模型和循環神經網絡(RNN)。這一節主要討論RNN存在的問題及其改進方法,并介紹更多復雜的RNN變體。
梯度問題梯度消失梯度爆炸梯度剪裁LSTMGRURNN變體雙向RNN多層RNN梯度補充梯度向量化梯度推廣:雅可比矩陣鏈式法則重要等式下節預告閱讀更多
梯度問題
梯度消失
梯度消失
根據鏈式法則:
梯度可以分解成若干中間梯度的乘積。現在的問題是,如果,,這三項數值量級都很小,那么反向傳播越遠,則梯度信號越弱!這就是梯度消失問題!
形式化表述:
由于:
所以:
考慮第i步損失,對之前的某步j的隱層狀態求梯度。表示如下:
考慮矩陣的L2范數:
這里的關鍵是矩陣。Pascanu等人證明,如果的最大特征值小于1,經過多次自乘后,梯度會表現出指數級縮小。由于使用sigmoid非線性激活函數,上界恰好是1,所以會出現梯度消失。
如果梯度隨距離明顯減弱,則無法判斷t步和t+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"之間的依賴關系。但如果梯度過小,則模型無法學習這種依賴關系,進而在測試時也無法預測長距離的依賴關系。
再來看一個例子:
The writer of the books __
現在有兩個選項:(is) (are)。正確的應該是is。語義上,"is"和"writer"的距離更近;但順序上,"are"和"books"的距離更近。由于梯度消失的問題,RNN語言模型更善于學習順序距離近的關系,這可能導致學習錯誤,從而導致預測錯誤。
梯度爆炸
同梯度消失相對的是梯度爆炸,這是由于矩陣最大特征值>1。如果梯度過大,則會導致SGD更新過大:這不利于參數調整(損失較大)。
在極端情況下,如果步長過大,還會導致訓練中出現Inf或NaN。
梯度剪裁
梯度爆炸的解決辦法是,如果梯度范數超過某個閾值,則進行縮小,然后再SGD更新。相當于,方向不變,調小步子。
梯度剪裁示意
LSTM
RNN的主要問題是無法學會保存很多時間步前的信息。
1997年Hochreiter和Schmidhuber提出Long Short-Term Memory(LSTM),這也是一種RNN,用以解決梯度消失的問題。
與RNN只有一種狀態相比,LSTM在第t步,共有兩種狀態:hidden state 和 cell state ?
兩者都是n維向量
cell用于存儲長距離信息,亦稱為記憶單元
LSTM可以擦除、寫入和讀取 cell信息
信息的擦/寫/讀由相應的門進行控制
gate也是n維向量
每一步t,gate各個元素可以是open(1), closed(0),或二者之間。如果門打開,則表示信息通過;如果門關閉,則表示信息不能通過
gate是動態的,其值根據當前語境計算
現根據t步輸入,計算hidden state 和 cell state ?:
遺忘門:決定保留或忘記之前cell state的哪些內容
輸入門:決定當前cell的哪些內容寫入cell
輸出門:決定當前cell的哪些內容輸出到hidden state
新cell內容:要寫入cell的新內容
cell state:擦掉(忘記)上個cell state的部分內容,寫入(輸入)新cell內容
hidden state:讀取(輸出)cell的某些內容
具體如下圖所示:
LSTM cell
LSTM結構讓RNN更容易保存很多步以前的信息
LSTM并不保證不出現梯度消失/梯度爆炸
LSTM實際上是非常成功的
2013-2015年,LSTM取得了一流的效果
手寫識別、語音識別、機器翻譯、句法分析、看圖說話
LSTM由于效果好,成為主流方法
2019年,在某些領域,其他方法(如Transformer)成為了主流方法
WMT 2016,總結報告出現RNN 44次
WMT 2018,總結報告出現 RNN 9次,Transformer 63次。
GRU
2014年Cho 等人提出GRU(Gated Recurrent Units),在保留LSTM優點的同時,去除其不必要的繁雜。在每一步t,只有輸入和hidden state ,沒有cell state:
update gate:決定更新hidden state的哪些部分內容,相當于LSTM中的遺忘門和輸入門。
reset gate:決定前一hidden state哪些部分用于計算新hidden state的內容
新hidden state內容:reset gate選擇前一hidden state的有用信息,并輸入新的hidden state
hidden state:綜合了前一hidden state和當前hidden state的內容,并在兩者之間尋找平衡點
和LSTM一樣,GRU也更容易保存長期信息。
除此之外,研究人員提出了很多門控RNN,但LSTM和GRU使用最為廣泛。
LSTM和GRU的最大區別是,后者計算速度更快,參數更少。但并沒有嚴格證據表明孰優孰劣。所以在實踐中,可以先使用LSTM,然后再試試GRU。
RNN變體
梯度爆炸/消失不僅僅是RNN存在的問題。由于鏈式法則和非線性激活函數,所有神經網絡(包括前向和卷積神經網絡),尤其是深度神經網絡,都會出現梯度消失/爆炸問題。這導致低層網絡訓練非常緩慢。那么解決辦法就是在神經網絡之間添加直接連接,使梯度傳播更順暢。
例如:
殘差連接,亦稱ResNet。它直接將輸入信息原封不動地加在其他隱層上。
殘差網絡構件
稠密連接,亦稱DenseNet,把所有層都連接起來。效果更好。
稠密連接:每一層以之前所有層feature-maps為輸入
高速連接,亦稱HighwayNet,類似于殘差連接,但identity連接和transformation層由動態門控制
結論:雖然梯度消失/爆炸是個普遍存在的問題,但由于相同矩陣連續相乘導致RNN尤其不穩定。
雙向RNN
在情緒分類任務中,假如輸入是某個影評,我們希望了解是好評還是差評。一般可以使用簡單RNN進行情緒分類。RNN可以編碼句子。RNN的隱層狀態就是句子表示。
下圖藍色方框的隱藏狀態可以看作詞"terribly"的語境表示。
情緒分析任務
但是這些語境表示僅僅考慮了詞的左側語境。很明顯,"terribly"右側的"exciting"修改了"terribly"的詞義,將整個句子的負面情緒扭轉為正面情緒。右側語境同樣重要!這導致了雙向RNN的出現。
雙向RNN由兩個RNN組成:正向RNN和反向RNN。反向RNN和正向RNN一樣,只不過它從右到左開始編碼。在隱層狀態,則將兩個RNN輸出進行拼接。
雙向RNN
在第t步:
正向RNN:
反向RNN:
隱層狀態拼接:
通常正向RNN和反向RNN權重不同。
下面是雙向RNN簡化圖。
雙向RNN簡化圖
注意:只有當輸入序列完整時,才適用雙向RNN。例如語言模型就不能使用雙向RNN,因為在語言模型中,只能使用左側語境。
最近很火的BERT(BidirectionalEncoder Representations from Transformers)就使用了雙向信息。后面還會談到BERT。
多層RNN
雖然RNN展開后在一個維度已經很深了,我們還可以在另外一個維度增加深度,這就是多層RNN。
多層RNN可以實現更加復雜的表示。低層RNN計算低層特征;高層RNN計算高層特征。
多層RNN
在實踐中,高性能RNN通常都是多層RNN(但一般達不到前向網絡或卷積網絡的深度)。
例如,在2017年的論文中,Britz 等人發現,在神經機器翻譯中,encoder RNN 最好使用2-4層,decoder RNN 最好使用4層。要訓練更深的RNN,則需要跨層連接或稠密連接。
基于Transformer的神經網絡(如BERT)則高達24層。
總結:
LSTM效果很好,GRU速度很快
梯度剪裁可以避免NaN
如果有完整信息,盡量使用雙向RNN
如果有計算資源,盡量使用多層RNN,層數過多時,則需要跨層/稠密連接。
梯度補充
以下作為CS224N-2019-3的補充。梯度計算是神經網絡訓練的核心。逐個推導神經網絡各個參數的梯度冗長復雜,因此有必要使用矩陣/向量形式進行計算。
梯度向量化
給定1個輸出和n個輸入的函數:其梯度就是每個輸入的偏導的向量:
梯度推廣:雅可比矩陣
給定m個輸出和n個輸入的函數:其偏導數就是mxn矩陣,即雅可比梯度矩陣。:
其中單個元素就是普通的標量梯度:雅可比矩陣非常有用。
鏈式法則
一元函數:導數相乘
多元函數:雅可比矩陣相乘
重要等式
矩陣乘以列向量,對列向量求梯度(,?)
行向量乘以矩陣,對行向量求梯度(,?)
對向量本身求梯度
(,?)使用鏈式法則時,該項會消掉,因為矩陣或向量乘以單位矩陣,還是原矩陣或向量。
對向量各個元素施加同一函數后,對向量求梯度
(,?)
矩陣乘以列向量,對矩陣求梯度(,,?)
行向量乘以矩陣,對矩陣求梯度(,,?)
交叉熵損失,對logits求梯度
(,,?)
這些等式可用于快速計算很多神經網絡的梯度。
-
神經網絡
+關注
關注
42文章
4771瀏覽量
100739 -
梯度
+關注
關注
0文章
30瀏覽量
10318 -
rnn
+關注
關注
0文章
89瀏覽量
6888
原文標題:梯度消失和神奇RNN(CS224N-2019-7)
文章出處:【微信號:gh_b11486d178ef,微信公眾號:語言和智能】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論