Hulu機器學習問題與解答系列 | 第九彈:循環神經網路
「循環神經網路」
[場景描述]
循環神經網路(Recurrent Neural Network)是一種主流的深度學習模型,最早在20世紀80年代被提出 ,目的是建模序列化的數據。我們知道,傳統的前饋神經網路一般的輸入都是一個定長的向量,無法處理變長的序列信息,即使通過一些方法把序列處理成定長的向量,模型也很難捕捉序列中的長距離依賴關係。而RNN通過將神經元串列起來處理序列化的數據,比如文本的詞序列、音頻流和視頻流序列等。由於每個神經元能用它的內部變數保存之前輸入的序列信息,使得整個序列可以被濃縮成抽象的表示,並可以據此進行分類或生成新的序列。近年來,得益於計算能力的大幅提升和網路設計的改進(LSTM、GRU、Attention機制等),RNN在很多領域取得了突破性的進展。比如機器翻譯、序列標註、圖像描述、視頻推薦、智能聊天機器人、自動作詞作曲等,給我們的日常生活帶來了不少便利和樂趣。
[問題描述]
- 什麼是循環神經網路?如何用它產生文本表示?
- RNN為什麼會出現梯度的消失或爆炸?有什麼樣的改進方案?
[解答與分析]
1. 什麼是循環神經網路?如何用它產生文本表示?
傳統的前饋神經網路,包括卷積神經網路(Convolutional Neural Network, CNN)在內,一般都是接受一個定長的向量作為輸入。比如在做文本分類時,我們可以將一篇文章所對應的TF-IDF(Term Frequency-Inverse Document Frequency)向量作為前饋神經網路的輸入,其中TF-IDF向量的維度是辭彙表的大小。顯而易見,這樣的表示實際上丟失了輸入的文本序列中每個單詞的順序。在用卷積神經網路對文本進行建模時,我們可以輸入變長的字元串或者單詞串,然後通過滑動窗口+Pooling的方式將原先的輸入轉換成一個固定長度的向量表示;這樣做可以捕捉到原文本中的一些局部特徵,但是兩個單詞之間的長距離依賴關係還是很難被學習到。
RNN(Recurrent Neural Network,循環神經網路)的目的便是處理像文本這樣變長並且有序的輸入序列。它模擬了人閱讀一篇文章的順序,從前到後閱讀文章中的每一個單詞,並且將前面閱讀到的有用信息編碼到狀態變數中去,從而擁有了一定的記憶能力,可以更好地理解之後的文本。下圖展示了一個典型RNN的網路結構[1]:
其中f和g為激活函數,U為輸入層到隱含層的權重矩陣,W為隱含層從上一時刻到下一時刻狀態轉移的權重矩陣,在文本分類任務中(如上圖),f可以選取Tanh或者ReLU函數,g可以採用Softmax函數,更多關於激活函數的細節可以參見[2]。
2. RNN為什麼會出現梯度的消失或爆炸?有什麼樣的改進方案?
RNN模型的求解可以採用BPTT(Back Propagation Through Time)演算法實現 ,實際上是反向傳播(Back Propagation)演算法的簡單變種;如果將RNN按時間展開成T層的前饋神經網路來理解,就和普通的反向傳播演算法沒有什麼區別了。RNN的設計初衷之一就是能夠捕獲長距離輸入之間的依賴。從結構上來看,RNN也絕對能夠做到這一點。然而實踐發現,使用BPTT演算法學習的RNN並不能成功捕捉到長距離的依賴關係,這一現象可以用梯度消失來解釋。傳統的RNN梯度可以表示成連乘的形式:
其中
由於預測的誤差是沿著神經網路的每一層反向傳播的,因此當Jacobian矩陣的最大特徵值大於1時,隨著離輸出越來越遠,每層的梯度大小會呈指數增長,導致梯度爆炸(gradient explosion);反之,若Jacobian矩陣的最大特徵值小於1,梯度的大小會呈指數縮小,即產生了梯度消失(gradient vanishing)。對於普通的前饋網路來說,梯度消失導致無法通過加深網路層次來改善神經網路的預測效果,因為無論如何加深網路,只有靠近輸出的若干層才真正起到的學習的作用。對於RNN來說,這導致模型很難學習到輸入序列中的長距離依賴關係。
梯度爆炸的問題可以通過梯度裁剪(Gradient Clipping)來緩解,也就是當梯度的範式大於某個給定值時,對梯度進行等比收縮;而梯度消失問題相對比較棘手,需要對模型本身進行改進。 ResNet[3]是對前饋神經網路的改進,通過殘差學習的方式緩解了梯度消失的現象,從而使得我們能夠學習到更深層的網路表示;而對於RNN來說,LSTM(Long short-term memory)[4]及其變種GRU(Gated recurrent unit)[5]等模型通過加入門控機制(Gate),很大程度上改善了梯度消失所帶來的損失。關於ResNet和LSTM的細節會在其他章節介紹,敬請期待。
[參考文獻]
[1] Liu, Pengfei, Xipeng Qiu, and Xuanjing Huang. "Recurrent neural network for text classification with multi-task learning." arXiv preprint arXiv:1605.05101 (2016).
[2] https://en.wikipedia.org/wiki/Activation_function
[3] He, Kaiming, et al. "Deep residual learning for image recognition." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.
[4] Hochreiter, Sepp, and Jürgen Schmidhuber. "Long short-term memory." Neural computation 9.8 (1997): 1735-1780.
[5] Chung, Junyoung, et al. "Empirical evaluation of gated recurrent neural networks on sequence modeling." arXiv preprint arXiv:1412.3555 (2014).
下一題預告
【LSTM】
[場景描述]
俗話說,前事不忘,後事之師,各種帶有記憶功能的網路是近來深度學習研究和實踐的一個重要領域。由於RNN有著梯度彌散(vanishing gradient)和梯度爆炸(explosion gradient)等問題,難以學習長期的依賴,在遇到重要的信息時,又難以清空之前的記憶,因此在實際任務中的效果往往並不理想。LSTM是Long Short-Term Memory(長短期記憶網路)的簡稱。作為RNN的最知名和成功的擴展,LSTM可以對有價值的信息進行長期記憶,並在遇到新的重要信息時,及時遺忘過去的記憶,減小了RNN的學習難度。它在語音識別,語言建模,機器翻譯,圖像描述生成,命名實體識別等各類問題中,取得了巨大的成功。
[問題描述]
LSTM是如何實現長短期記憶功能的?它的各模塊分別使用了什麼激活函數,可以使用別的激活函數么?
歡迎留言提問或探討
關注「Hulu」微信公眾號,點擊菜單欄「機器學習」獲得更多系列文章
推薦閱讀:
※基於視覺的視頻分類入門
※聯動優勢受邀即將出席第二屆世界智能大會
※如何利用SOM網路進行圖像數據壓縮?
※96分的模型跑出69分的效果,誰該背鍋?
※MIT提出像素級聲源定位系統PixelPlayer:無監督地分離視頻中的目標聲源