深度學習(四)——RNN, LSTM, 神經元啟用函式進階
詞向量
word2vec/doc2vec的缺點(續)
2.雖然我們一般使用word2vec/doc2vec來比較文字相似度,但是從原理來說,word2vec/doc2vec提供的是關聯性(relatedness),而不是相似性(similarity)。這會帶來以下問題:不但近義詞的詞向量相似,反義詞的詞向量也相似。因為它們和其他詞的關係(也就是語境)是類似的。
3.由於一個詞只有一個向量來表示,因此,無法處理一詞多義的情況。
然而關聯性並非都是壞事,有的時候也會起到意想不到的效果。比如在客服對話的案例中,客戶可能會提供自己的收貨地址,顯然每個客戶的地址都是不同的,但是有意思的是,這些地址的詞向量是非常相似的。
總之,只利用無標註資料訓練得到的Word Embedding在匹配度計算的實用效果上和主題模型技術相差不大,它們本質上都是基於共現資訊的訓練。
參考:
Word2Vec如何解決多義詞的問題?
All is Embedding
向量化是機器學習處理非數值資料的必經之路。因此除了詞向量之外,還有其他的Embedding。比如Network Embedding。
NE(Network Embedding)論文小覽
除了自然語言處理,你還可以用Word2Vec做什麼?
參考
word2vec前世今生
文字深度表示模型——word2vec&doc2vec詞向量模型
如何用word2vec計算兩個句子之間的相似度?
NLP之Wrod2Vec三部曲
RNN
RNN的基本結構
RNN是Recurrent Neural Network和Recursive Neural Network的簡稱。前者主要用於處理和時序相關的輸入,而後者目前已經沒落。本文只討論前者。
上圖是RNN的結構圖。其中,展開箭頭左邊是RNN的靜態結構圖。不同於之前的神經網路表示,這裡的圓形不是單個神經元,而是一層神經元。權值也不是單個權值,而是權值向量。
從靜態結構圖可以看出RNN實際上和3層MLP的結構,是基本類似的。差別在於RNN的隱藏層多了一個指向自己的環狀結構。
上圖的展開箭頭右邊是RNN的時序展開結構圖。從縱向來看,它只是一個3層的淺層神經網路,然而從橫向來看,它卻是一個深層的神經網路。可見神經網路深淺與否,不僅和模型本身的層數有關,也與神經元之間的連線方式密切相關。
雖然理論上,我們可以給每一時刻賦予不同的
RNN的誤差反向傳播演算法,被稱作Backpropagation Through Time。其主要公式如下:
從上式可以看出,三個誤差梯度實際上都是時域的積分。
正因為RNN的狀態和過去、現在都有關係,因此,RNN也被看作是一種擁有“記憶性”的神經網路。
RNN的訓練困難
理論上,RNN可以支援無限長的時間序列,然而實際情況卻沒這麼簡單。
Yoshua Bengio在論文《On the difficulty of training recurrent neural networks》(http://proceedings.mlr.press/v28/pascanu13.pdf)中,給出瞭如下公式:
並指出當
這裡顯然不考慮
因此有實用價值的,只剩下
上述內容只是一般性的討論,實際訓練還是有很多trick的。
比如,針對
還可使用正交初始化技術,在訓練之初就將
參考
遞迴神經網路(RNN)簡介
迴圈神經網路(RNN, Recurrent Neural Networks)介紹
迴圈神經網路
Backpropagation Through Time演算法
Tomas Mikolov詳解RNN與機器智慧的實現
為什麼RNN需要做正交初始化?
RNN的梯度消失/爆炸與正交初始化
看大牛如何覆盤遞迴神經網路!
為何迴圈神經網路在眾多機器學習方法中脫穎而出?
深度理解RNN:時間序列資料的首選神經網路!
“魔性”的迴圈神經網路
手把手教你寫一個RNN
完全圖解RNN、RNN變體、Seq2Seq、Attention機制
LSTM
本篇筆記主要摘自:
理解LSTM網路
LSTM結構圖
為了解決原始RNN只有短時記憶的問題,人們又提出了一個RNN的變種——LSTM(Long Short-Term Memory)。其結構圖如下所示:
和RNN的時序展開圖類似,這裡的每個方框表示某個時刻從輸入層到隱層的對映。
我們首先回顧一下之前的模型在這裡的處理。
MLP的該對映關係為:
RNN在上式基礎上添加了歷史狀態
LSTM不僅添加了歷史狀態
步驟詳解
神經網路的設計方式和其他演算法不同,我們不需要指定具體的引數,而只需要給出一個功能的實現機制,然後藉助誤差的反向傳播演算法,訓練得到相應的引數。這一點在LSTM上體現的尤為明顯。
LSTM主要包括以下4個步驟(也可稱為4個功能或門):
決定丟棄資訊
這一部分也被稱為忘記門。
確定更新的資訊
這一部分也被稱為輸入門。
更新細胞狀態
輸出資訊
顯然,在這裡不同的引數會對上述4個功能進行任意組合,從而最終達到長時記憶的目的。
注意:在一般的神經網路中,啟用函式可以隨意選擇,無論是傳統的sigmoid,還是新的tanh、ReLU,都不影響模型的大致效果。(差異主要體現在訓練的收斂速度上,最終結果也可能會有細微影響。)
但是,LSTM模型的上述函式不可隨意替換,切記。
LSTM的變體
上圖中的LSTM變體被稱為peephole connection。其實就是將細胞狀態加入各門的輸入中。可以全部新增,也可以部分新增。
上圖中的LSTM變體被稱為coupled 忘記和輸入門。它將忘記和輸入門連在了一起。
上圖是一個改動較大的變體Gated Recurrent Unit(GRU)。它將忘記門和輸入門合成了一個單一的 更新門。同樣還混合了細胞狀態和隱藏狀態,和其他一些改動。最終的模型比標準的 LSTM 模型要簡單,也是非常流行的變體。
參考
深入淺出LSTM神經網路
迴圈神經網路——scan實現LSTM
LSTM簡介以及數學推導(FULL BPTT)
如何解決LSTM迴圈神經網路中的超長序列問題
從任務到視覺化,如何理解LSTM網路中的神經元
LSTM、GRU與神經圖靈機:詳解深度學習最熱門的迴圈神經網路
LSTM入門必讀:從基礎知識到工作方式詳解
LSTM入門詳解
神經元啟用函式進階
在《深度學習(一、二)》中,我們探討了ReLU相對於sigmoid函式的改進,以及一些保證深度神經網路能夠訓練的措施。然而即便如此,深度神經網路的訓練仍然是一件非常困難的事情,還需要更多的技巧和方法。
啟用函式的作用
神經網路中啟用函式的主要作用是提供網路的非線性建模能力,如不特別說明,啟用函式一般而言是非線性函式。
假設一個神經網路中僅包含線性卷積和全連線運算,那麼該網路僅能夠表達線性對映,即便增加網路的深度也依舊還是線性對映,難以有效建模實際環境中非線性分佈的資料。
加入非線性啟用函式之後,深度神經網路才具備了分層的非線性對映學習能力。因此,啟用函式是深度神經網路中不可或缺的部分。
注意:其實也有采用線性啟用函式的神經網路,亦被稱為linear neurons。但是這些神經網路,基本只有學術價值而無實際意義。
ReLU的缺點
深度神經網路的訓練問題,最早是2006年Hinton使用分層無監督預訓練的方法解決的,然而該方法使用起來很不方便。
而深度網路的直接監督式訓練的最終突破,最主要的原因是採用了新型啟用函式ReLU。
但是ReLU並不完美。它在x<0時硬飽和,而當x>0時,導數為1。所以,ReLU能夠在x>0時保持梯度不衰減,從而緩解梯度消失問題。但隨著訓練的推進,部分輸入會落入硬飽和區,導致對應權重無法更新。這種現象被稱為神經元死亡。
ReLU還經常被“詬病”的另一個問題是輸出具有偏移現象,即輸出均值恆大於零。偏移現象和神經元死亡會共同影響網路的收斂性。實驗表明,如果不採用Batch Normalization,即使用MSRA初始化30層以上的ReLU網路,最終也難以收斂。