深度学习(四)——RNN, LSTM, 神经元激活函数进阶
https://antkillerfarm.github.io/
詞向量
word2vec/doc2vec的缺點(續)
2.雖然我們一般使用word2vec/doc2vec來比較文本相似度,但是從原理來說,word2vec/doc2vec提供的是關聯性(relatedness),而不是相似性(similarity)。這會帶來以下問題:不但近義詞的詞向量相似,反義詞的詞向量也相似。因為它們和其他詞的關系(也就是語境)是類似的。
3.由于一個詞只有一個向量來表示,因此,無法處理一詞多義的情況。
然而關聯性并非都是壞事,有的時候也會起到意想不到的效果。比如在客服對話的案例中,客戶可能會提供自己的收貨地址,顯然每個客戶的地址都是不同的,但是有意思的是,這些地址的詞向量是非常相似的。
總之,只利用無標注數據訓練得到的Word Embedding在匹配度計算的實用效果上和主題模型技術相差不大,它們本質上都是基于共現信息的訓練。
參考:
https://www.zhihu.com/question/22266868
Word2Vec如何解決多義詞的問題?
All is Embedding
向量化是機器學習處理非數值數據的必經之路。因此除了詞向量之外,還有其他的Embedding。比如Network Embedding。
https://mp.weixin.qq.com/s/wcFlZPbB5dl6C87kdfjmKw
NE(Network Embedding)論文小覽
https://mp.weixin.qq.com/s/zTNX_LeVMeHhJG7kPewn2g
除了自然語言處理,你還可以用Word2Vec做什么?
參考
http://www.cnblogs.com/iloveai/p/word2vec.html
word2vec前世今生
http://www.cnblogs.com/maybe2030/p/5427148.html
文本深度表示模型——word2vec&doc2vec詞向量模型
https://www.zhihu.com/question/29978268
如何用word2vec計算兩個句子之間的相似度?
https://mp.weixin.qq.com/s/kGi-Hf7CX6OKcCMe7IC7zA
NLP之Wrod2Vec三部曲
RNN
RNN的基本結構
RNN是Recurrent Neural Network和Recursive Neural Network的簡稱。前者主要用于處理和時序相關的輸入,而后者目前已經沒落。本文只討論前者。
上圖是RNN的結構圖。其中,展開箭頭左邊是RNN的靜態結構圖。不同于之前的神經網絡表示,這里的圓形不是單個神經元,而是一層神經元。權值也不是單個權值,而是權值向量。
從靜態結構圖可以看出RNN實際上和3層MLP的結構,是基本類似的。差別在于RNN的隱藏層多了一個指向自己的環狀結構。
上圖的展開箭頭右邊是RNN的時序展開結構圖。從縱向來看,它只是一個3層的淺層神經網絡,然而從橫向來看,它卻是一個深層的神經網絡。可見神經網絡深淺與否,不僅和模型本身的層數有關,也與神經元之間的連接方式密切相關。
雖然理論上,我們可以給每一時刻賦予不同的U,V,W,然而出于簡化計算和稀疏度的考量,RNN所有時刻的U,V,W都是相同的。
RNN的誤差反向傳播算法,被稱作Backpropagation Through Time。其主要公式如下:
?U=?E?U=∑t?et?U?V=?E?V=∑t?et?V?W=?E?W=∑t?et?W
從上式可以看出,三個誤差梯度實際上都是時域的積分。
正因為RNN的狀態和過去、現在都有關系,因此,RNN也被看作是一種擁有“記憶性”的神經網絡。
RNN的訓練困難
理論上,RNN可以支持無限長的時間序列,然而實際情況卻沒這么簡單。
Yoshua Bengio在論文《On the difficulty of training recurrent neural networks》(http://proceedings.mlr.press/v28/pascanu13.pdf)中,給出了如下公式:
||∏k<i≤t?hi?hi?1||≤ηt?k
并指出當η<1時,RNN會Gradient Vanish,而當η>1時,RNN會Gradient Explode。
這里顯然不考慮η>1的情況,因為Gradient Explode,直接會導致訓練無法收斂,從而沒有實用價值。
因此有實用價值的,只剩下η<1了,但是Gradient Vanish又注定了RNN所謂的“記憶性”維持不了多久,一般也就5~7層左右。
上述內容只是一般性的討論,實際訓練還是有很多trick的。
比如,針對η>1的情況,可以采用Gradient Clipping技術,通過設置梯度的上限,來避免Gradient Explode。
還可使用正交初始化技術,在訓練之初就將η調整到1附近。
參考
http://blog.csdn.net/aws3217150/article/details/50768453
遞歸神經網絡(RNN)簡介
http://blog.csdn.net/heyongluoyao8/article/details/48636251
循環神經網絡(RNN, Recurrent Neural Networks)介紹
http://mp.weixin.qq.com/s?__biz=MzIzODExMDE5MA==&mid=2694182661&idx=1&sn=ddfb3f301f5021571992824b21ddcafe
循環神經網絡
http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/
Backpropagation Through Time算法
https://baijia.baidu.com/s?old_id=560025
Tomas Mikolov詳解RNN與機器智能的實現
https://sanwen8.cn/p/3f8sRTh.html
為什么RNN需要做正交初始化?
http://blog.csdn.net/shenxiaolu1984/article/details/71508892
RNN的梯度消失/爆炸與正交初始化
https://mp.weixin.qq.com/s/vHQ1WbADHAISXCGxOqnP2A
看大牛如何復盤遞歸神經網絡!
https://mp.weixin.qq.com/s/0V9DeG39is_BxAYX0Yomww
為何循環神經網絡在眾多機器學習方法中脫穎而出?
https://mp.weixin.qq.com/s/-Am9Z4_SsOc-fZA_54Qg3A
深度理解RNN:時間序列數據的首選神經網絡!
https://mp.weixin.qq.com/s/ztIrt4_xIPrmCwS1fCn_dA
“魔性”的循環神經網絡
https://mp.weixin.qq.com/s/tIXJNkT9gIjGYZz7dekiNw
手把手教你寫一個RNN
https://mp.weixin.qq.com/s/BqVicouktsZu8xLVR-XnFg
完全圖解RNN、RNN變體、Seq2Seq、Attention機制
LSTM
本篇筆記主要摘自:
http://www.jianshu.com/p/9dc9f41f0b29
理解LSTM網絡
LSTM結構圖
為了解決原始RNN只有短時記憶的問題,人們又提出了一個RNN的變種——LSTM(Long Short-Term Memory)。其結構圖如下所示:
和RNN的時序展開圖類似,這里的每個方框表示某個時刻從輸入層到隱層的映射。
我們首先回顧一下之前的模型在這里的處理。
MLP的該映射關系為:
h=σ(W?x+b)
RNN在上式基礎上添加了歷史狀態ht?1:
ht=σ(W?[ht?1,xt]+b)
LSTM不僅添加了歷史狀態ht?1,還添加了所謂的細胞狀態Ct?1,即上圖中圖像上部的水平橫線。
步驟詳解
神經網絡的設計方式和其他算法不同,我們不需要指定具體的參數,而只需要給出一個功能的實現機制,然后借助誤差的反向傳播算法,訓練得到相應的參數。這一點在LSTM上體現的尤為明顯。
LSTM主要包括以下4個步驟(也可稱為4個功能或門):
決定丟棄信息
這一部分也被稱為忘記門。
確定更新的信息
這一部分也被稱為輸入門。
更新細胞狀態
輸出信息
顯然,在這里不同的參數會對上述4個功能進行任意組合,從而最終達到長時記憶的目的。
注意:在一般的神經網絡中,激活函數可以隨意選擇,無論是傳統的sigmoid,還是新的tanh、ReLU,都不影響模型的大致效果。(差異主要體現在訓練的收斂速度上,最終結果也可能會有細微影響。)
但是,LSTM模型的上述函數不可隨意替換,切記。
LSTM的變體
上圖中的LSTM變體被稱為peephole connection。其實就是將細胞狀態加入各門的輸入中。可以全部添加,也可以部分添加。
上圖中的LSTM變體被稱為coupled 忘記和輸入門。它將忘記和輸入門連在了一起。
上圖是一個改動較大的變體Gated Recurrent Unit(GRU)。它將忘記門和輸入門合成了一個單一的 更新門。同樣還混合了細胞狀態和隱藏狀態,和其他一些改動。最終的模型比標準的 LSTM 模型要簡單,也是非常流行的變體。
參考
http://www.csdn.net/article/2015-06-05/2824880
深入淺出LSTM神經網絡
https://zhuanlan.zhihu.com/p/25821063
循環神經網絡——scan實現LSTM
http://blog.csdn.net/a635661820/article/details/45390671
LSTM簡介以及數學推導(FULL BPTT)
https://mp.weixin.qq.com/s/x3y9WTuVFYQb60eJvw02HQ
如何解決LSTM循環神經網絡中的超長序列問題
https://mp.weixin.qq.com/s/IhCfoabRrtjvQBIQMaPpNQ
從任務到可視化,如何理解LSTM網絡中的神經元
https://mp.weixin.qq.com/s/GGpaFZ0crP_NQ564d79hFw
LSTM、GRU與神經圖靈機:詳解深度學習最熱門的循環神經網絡
https://mp.weixin.qq.com/s/0bBTVjkfAK2EzQiaFcUjBA
LSTM入門必讀:從基礎知識到工作方式詳解
https://mp.weixin.qq.com/s/jcS4IX7LKCt1E2FVzLWzDw
LSTM入門詳解
神經元激活函數進階
在《深度學習(一、二)》中,我們探討了ReLU相對于sigmoid函數的改進,以及一些保證深度神經網絡能夠訓練的措施。然而即便如此,深度神經網絡的訓練仍然是一件非常困難的事情,還需要更多的技巧和方法。
激活函數的作用
神經網絡中激活函數的主要作用是提供網絡的非線性建模能力,如不特別說明,激活函數一般而言是非線性函數。
假設一個神經網絡中僅包含線性卷積和全連接運算,那么該網絡僅能夠表達線性映射,即便增加網絡的深度也依舊還是線性映射,難以有效建模實際環境中非線性分布的數據。
加入非線性激活函數之后,深度神經網絡才具備了分層的非線性映射學習能力。因此,激活函數是深度神經網絡中不可或缺的部分。
注意:其實也有采用線性激活函數的神經網絡,亦被稱為linear neurons。但是這些神經網絡,基本只有學術價值而無實際意義。
ReLU的缺點
深度神經網絡的訓練問題,最早是2006年Hinton使用分層無監督預訓練的方法解決的,然而該方法使用起來很不方便。
而深度網絡的直接監督式訓練的最終突破,最主要的原因是采用了新型激活函數ReLU。
但是ReLU并不完美。它在x<0時硬飽和,而當x>0時,導數為1。所以,ReLU能夠在x>0時保持梯度不衰減,從而緩解梯度消失問題。但隨著訓練的推進,部分輸入會落入硬飽和區,導致對應權重無法更新。這種現象被稱為神經元死亡。
ReLU還經常被“詬病”的另一個問題是輸出具有偏移現象,即輸出均值恒大于零。偏移現象和神經元死亡會共同影響網絡的收斂性。實驗表明,如果不采用Batch Normalization,即使用MSRA初始化30層以上的ReLU網絡,最終也難以收斂。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的深度学习(四)——RNN, LSTM, 神经元激活函数进阶的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习(三)——Autoencoder
- 下一篇: 深度学习(五)——DRN, Bi-dir