1. 程式人生 > >Hulu機器學習問題與解答系列 | 第九彈:循環神經網絡

Hulu機器學習問題與解答系列 | 第九彈:循環神經網絡

AD 新的 價值 sep tts wiki 今天 捕獲 huang

大噶好,今天是有關RNN問題的解答。記得多多思考和轉發,公式供應充足的Hulu機器學習系列,怎麽能只自己知 (shou)道 (nue) 技術分享圖片 ~

今天的內容是

【循環神經網絡】

場景描述

循環神經網絡(Recurrent Neural Network)是一種主流的深度學習模型,最早在20世紀80年代被提出 ,目的是建模序列化的數據。我們知道,傳統的前饋神經網絡一般的輸入都是一個定長的向量,無法處理變長的序列信息,即使通過一些方法把序列處理成定長的向量,模型也很難捕捉序列中的長距離依賴關系。而RNN通過將神經元串行起來處理序列化的數據,比如文本的詞序列、音頻流和視頻流序列等。由於每個神經元能用它的內部變量保存之前輸入的序列信息,使得整個序列可以被濃縮成抽象的表示,並可以據此進行分類或生成新的序列。近年來,得益於計算能力的大幅提升和網絡設計的改進(LSTM、GRU、Attention機制等),RNN在很多領域取得了突破性的進展。比如機器翻譯、序列標註、圖像描述、視頻推薦、智能聊天機器人、自動作詞作曲等,給我們的日常生活帶來了不少便利和樂趣。

問題描述

  1. 什麽是循環神經網絡?如何用它產生文本表示?

  2. 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機器學習問題與解答系列 | 第九彈:循環神經網絡