【NLP】 深度学习NLP开篇-循环神经网络(RNN)
從這篇文章開始,有三AI-NLP專欄就要進入深度學習了。本文會介紹自然語言處理早期標志性的特征提取工具-循環神經網絡(RNN)。首先,會介紹RNN提出的由來;然后,詳細介紹RNN的模型結構,前向傳播和反向傳播的過程;最后,討論RNN的特點及其優劣勢。
作者&編輯 | 小Dream哥
完整的NLP深度學習介紹,應該從反向傳播(BP)開始,進而介紹深度神經網絡(DNN),卷積神經網絡(CNN)也是必不可少的內容。鑒于有三AI已經發布了大量的CV相關的文章,其中必有相關的介紹。所以,在NLP專欄就暫不介紹相關的內容了。如果有需要的同學,可以留言提出來。
1 引言:RNN
對于一些序列輸入的信息,例如語音、語言等,不同時刻之間的輸入存在相互的影響,需要一種模型能夠“記憶”歷史輸入的信息,進而對整個序列進行完整的特征提取和表征。
循環神經網絡(RNN)就是面對這樣的需求提出來的,它能夠“記憶”序列輸入的歷史信息,從而能夠較好的對整個序列進行語義建模。
目前,RNN及其變種在NLP領域有著廣泛的應用。語音識別、對話系統、機器翻譯、情感分析等等領域,在產業界,RNN及其變種都是最主要的特征提取工具。
關于RNN的特性,這里先不做太多理論上的說明,等介紹完其結構、前向傳播和反向傳播后我們再來討論。
基于篇幅的限制,本文會先介紹最基本的RNN模型結構和原理,LSTM會在下一篇文章中做詳細的介紹。
2 RNN的結構
如上圖所示,是RNN的結構圖。相較于CNN繁雜的卷積運算過程和復雜的網絡層次,RNN的模型結構看上去相當的簡潔。同樣的,RNN模型的結構也分為輸入層(Input Layer)、隱藏層(Hidden Layer)和輸出層(Output Layer)。圖中的箭頭表示數據的流動,需要注意的是在隱藏層,有一個回流的箭頭,這是這個箭頭的作用,使得RNN具有了“記憶”的能力。
這樣看,同學們可能還無法看清楚數據在RNN模型內到底是如何流動的。我們將RNN模型的單元按時間展開,如下圖所示:
圖片來自:https://www.nature.com/articles/nature14539
可以看到,不同時刻的數據x_t與上一時刻的狀態s_(t-1),從輸入層輸入,經過一系列運算(激活函數)之后,得到該時刻的狀態s_t,s_t再經過矩陣運算得到該時刻的輸出o_t,同時t時刻的狀態s_t會傳給下一時刻的輸入層。
通過這種方式,任意時刻的序列輸入都會包含前面所有時刻的狀態信息,就實現了“記憶”的目的,實際就是一種殘差的結構。
需要注意的是,這里所有的RNN結構單元是權重共享的,用大白話說,就是只有一個RNN單元。
下面我們來詳細看看數據的流動過程,也就是RNN的正向傳播與反向傳播過程。
3?RNN的正向傳播
RNN的正向傳播過程,就是通過輸入數據x_t,求該時刻的RNN單元狀態(Cell State)s_t以及輸出o_t的過程。
我們先來看s_t
U和W是權重參數,f是激活函數,激活函數有sigmoid、relu以及tanh等。
o_t的計算過程為:
V是權重參數,g是輸出函數,因為通常是預測類別,所以一般是softmax。
4 RNN的反向傳播
下面我們基于RNN的正向傳播過程來介紹下RNN的反向傳播過程。RNN的反向傳播與DNN的反向傳播的基本理論是一致的。差別在于,因為RNN是序列的輸入,因此其反向傳播是基于時間的,叫BPTT(Back PropagationThrough Time)。
與DNN一致,反向傳播的過程其實就是更新參數U,W,V的過程。知道反向傳播的同學應該知道,更新,W,V其實就是求梯度。
用L_t表示t時刻的模型損失,則輸入完一個序列后的總損失值為:
我們先來看參數V的更新,根據偏導公式,
損失函數通常為交叉熵,因此,
再來看看W和U的更新,像DNN的反向傳播一樣,我們引入一個中間變量,暫稱之誤差delta,t時刻的誤差delta_t:
我們的目標是要得到一個遞推公式,用delta_(t+1)來表示delta_t,注意這里激活函數用的是tanh函數。
最后時刻的誤差可以表示為:
這樣就可以通過delta_T一步一步得到所有時刻的誤差。
那么,怎么通過誤差得到W和U的梯度呢?
羅列了一大堆的公式,肯定有同學看花了眼。公式推導有不明白的地方,沒有關系,我們暫且先放下,后面再慢慢的思考,最重要的是理解反向傳播時,梯度更新的思想和技巧。下面我帶著大家總結一下這個過程,相信你能獲益匪淺。
1.正向傳播,求得所有時刻的x_t,o_t,s_t
2. 根據梯度公式,求V的梯度
3. 求得T時刻的誤差delta_T
4.根據誤差的遞推公式,求得所有時刻的誤差delta_1,delta_2,...,delta_T
5. 根據梯度公式,和上述誤差值求得W的梯度
6. 根據梯度公式,和上述誤差值求得U的梯度
7. 更新權重參數
總結
上文詳細講述了RNN的模型結構及其正向和反向傳播過程。
RNN雖然理論上可以很漂亮的解決序列數據的訓練,但是它也像DNN一樣有梯度消失的問題,當序列很長的時候問題尤其嚴重。雖然同選擇合適的激活函數等方法能夠一定程度的減輕該問題。但人們往往更青睞于使用RNN的變種。
因此,上面的RNN模型一般都沒有直接應用的領域。在語音識別,對話系統以及機器翻譯等NLP領域實際應用比較廣泛的是基于RNN模型的變種。
讀者們可以留言,或者加入我們的NLP群進行討論。感興趣的同學可以微信搜索jen104,備注"加入有三AI NLP群"。
下期預告:應用廣泛的LSTM
知識星球推薦
小Dream哥新開了一個知識星球,在那里更系統的介紹NLP的知識。你可以提出你的疑問,小Dream哥和多位大咖都可以為你解答,感興趣的同學就掃碼加入吧。
轉載文章請后臺聯系
侵權必究
往期精選
【NLP】自然語言處理專欄上線,帶你一步一步走進“人工智能技術皇冠上的明珠”。
【NLP】用于語音識別、分詞的隱馬爾科夫模型HMM
【NLP】用于序列標注問題的條件隨機場(Conditional Random Field, CRF)
【NLP】經典分類模型樸素貝葉斯解讀
【技術綜述】深度學習在自然語言處理中的應用發展史
【NLP】 NLP專欄欄主自述,說不出口的話就交給AI說吧
總結
以上是生活随笔為你收集整理的【NLP】 深度学习NLP开篇-循环神经网络(RNN)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【图像分类】分类专栏正式上线啦!初入CV
- 下一篇: 【NLP】有三AI NLP知识星球来了,