深入淺出 Deep Learning(三):RNN (LSTM)
2018/02/03
前言:
為了解講 RNN(LSTM),我又重新閱讀相關的參考文獻,意外解決了思考之前 ResNet 結構的疑惑。
-----
Fig. Shortcut(圖片來源:Pixabay)。
-----
Summary:
Recurrent Neural Networks(RNN)與改進的 Long Short-Term Memory(LSTM)[1]-[9] 專門用來處理時間相關的資料 [2]。RNN 本身可以視為「極深」的網路。在 LSTM 上用到的線性結構 [8],後續使圖像處理為主的 CNN [10]-[18],也可以擴增到「極深」。
可以說,這個線性結構,是目前深度學習的「核心」之一。
-----
Outline
一、RNN
二、LSTM
三、Highway Networks
四、ResNet、DenseNet and GoogLeNet
-----
一、RNN
圖1.1a 是一個 RNN 的部分。由中間我們可以看到運算單元除了接受本次輸入外,還接受上個運算單元的輸出。另外除了一般的輸出外,資料也會傳到下個運算單元作為輸入。
由於它容易造成梯度消失或梯度爆炸,所以後來改進了構造,如圖1.1b 的 LSTM [8]。
RNN 與 LSTM 的構造,本文稍後會仔細解釋。
它們主要用於處理時間相關的資料 [2]。
-----
Fig. 1.1a. RNN, [8].
-----
Fig. 1.1b. LSTM, [8].
-----
LSTM 擅長於任何和時間有關的資訊,包括文字、語音、音訊、視訊,以及機器人學(robotics)。
「由於機器人學基本上只是探討代理個體(agent)根據一連串感測而得的資訊所作出的判斷和動作,這類資料本身就帶有序列性(sequential),即不同時間內所採取的動作,也和之後的感測與判斷有關。」[2]
-----
Fig. 1.1c. RNN(LSTM)的應用 [2]。
-----
圖1.2a 左是一個簡單的前向網路。x 跟 o 分別是輸入層跟輸出層,z 是中間層(或稱為隱藏層)。W 跟 V 代表權重。
圖1.12a 右則是一個簡單的 RNN,展開後如圖1.2b。我們可以看到時間 t 從 1 到 T。也可以視為一個深度為「T」的網路。
-----
Fig. 1.2a. FNN and RNN, p. 4, [4].
-----
Fig. 1.2b. An unrolled RNN, p. 4, [4].
-----
圖1.2c 是 RNN 的公式。
xt 是 輸入,權重為 Y。ht 是上一層未經權重跟偏壓的輸出,作為另一個輸入,其權重為 W。偏壓為 b。
三者相加後為 at,經過 tanh,為一個暫存值 ht,先輸出到下一個單元。
ht 經過權重 V 跟偏壓 c 之後,為輸出 ot。
-----
Fig. 1.2c. RNN formula, p. 4, [4].
-----
二、LSTM
LSTM 是改進後的構造。
圖2.1a 其實不容易理解,後面有更漂亮的圖,但由於這是經典教科書 [5] 裡面用的圖,我們這邊先來看一下。
除了輸入跟輸出之外,多了三個閘(門)。此處從一般的說法,稱為輸入門、忘記門、輸出門。
這三個,會經由 sigmoid 函數變成 0 到 1 的實數,用來控制信號的衰減(或保留)程度。比方說,輸入乘上輸入門的值,才是「真正」的輸入,輸出乘上輸出門的值,才是真正的輸出。
圖2.1b 是更仔細的說明。關於這張圖,先說明到這裡,因為後面有更清楚的圖。
公式可以參考圖2.1c。
-----
Fig. 2.1a. LSTM, p. 409, [5].
-----
Fig. 2.1b. LSTM remark, [7].
-----
Fig. 2.1c. LSTM formula [3].
-----
圖2.2a 很清楚地表達了 LSTM 的構造,我們來仔細看一下。
參考圖2.2b 的公式。
xt 是輸入(ii 應為 it, xi 應為 xt),ht-1 是上一層的輸出,xt 與 ht-1 用來形成三個門的值。W 跟 R 是權重,b 是偏壓。
先產生三個門的值,分別為 it、ft、ot。
c 是 cell,記憶細胞(記憶單元)的縮寫。
c't 這行公式比較複雜,這次的輸入 xt 跟上次輸出的 ht-1 經過權重與偏壓,再壓縮後,是這次暫時「真正」的輸入。
然後上次記得的 ct-1 經過忘記門,與 c't 經過輸入門,相加,就是這次的記憶 ct。
壓縮再經過輸出門,為 ht。
重點在於三個 sigmoid 產生控制訊號。以及兩個 tanh 用來壓縮資料。
-----
Fig. 2.2a. LSTM, [6].
-----
Fig. 2.2b. LSTM formula, [6].
-----
圖2.3a 也蠻清楚的,符號的說明放在圖 2.3b。從圖2.4,我們可以看到一個一般的 RNN 如何變成一個 LSTM。
LSTM 的構造,就先介紹到這裡。
-----
Fig. 2.3a. LSTM, [7].
-----
Fig. 2.3b. LSTM symbols, [7].
-----
Fig. 2.4a. RNN, [8].
-----
Fig. 2.4b. LSTM, [8].
-----
三、Highway Networks
c 是 cell state 的縮寫,表示一個儲存細胞、儲存單元、或記憶體。
由於 RNN 本身是一個極深的網路,LSTM 增加了記憶單元這條線性的途徑後,極深的網路變為可行,這個構造作者後來將其應用在 CNN 上,在 Highway Netwoks 取得很大的成功。其他作者則分別在 ResNet 與 DenseNet 持續改進。但以捷徑幫忙傳遞梯度的概念,其實早在 GoogLeNet 已經用上了。
-----
Fig. 3.1. The cell state runs straight down
the entire chain, with only some minor linear interactions [8], [9].
-----
「2015年由 Rupesh Kumar Srivastava 等人受到 LSTM 門機制的啟發提出的網絡結構(Highway Networks)很好的解決了訓練深層神經網絡的難題,Highway Networks 允許信息高速無阻礙的通過深層神經網絡的各層,這樣有效的減緩了梯度的問題,使深層神經網絡不再僅僅具有淺層神經網絡的效果。」[10]。
-----
Fig. 3.2. Highway networks [11].
-----
四、ResNet、DenseNet and GoogLeNet
◎ ResNet
「模型的深度加深,學習能力增強,因此更深的模型不應當產生比它更淺的模型更高的錯誤率。而這個“退化”問題產生的原因歸結於優化難題,當模型變複雜時,SGD 的優化變得更加困難,導致了模型達不到好的學習效果。」[12]。
「增加一個恆等映射,將原始所需要學的函數 H(x)轉換成 F(x)+ x,而作者認為這兩種表達的效果相同,但是優化的難度卻並不相同, 作者假設 F(x)的優化會比 H(x)簡單的多。這一想法也是源於圖像處理中的殘差向量編碼,通過一個重構,將一個問題分解成多個尺度直接的殘差問題,能夠很好的起到優化訓練的效果。」[12]。
-----
Fig. 4.1a. ResNet block [12], [13].
-----
Fig. 4.1b. VGGNet and ResNet [12], [13].
-----
「ResNet 通過增加跨層的連接來解決梯度逐層回傳時變小的問題。雖然這個想法之前就提出過了,但 ResNet 真正的把效果做好了。
下圖演示了一個跨層的連接。」[14]。
-----
Fig. 4.1c. ResNet block [14].
-----
「最底下那層的輸入不僅僅是輸出給了中間層,而且其與中間層結果相加進入最上層。這樣在梯度反傳時,最上層梯度可以直接跳過中間層傳到最下層,從而避免最下層梯度過小情況。
為什麼叫做殘差網絡呢?我們可以將上面示意圖裡的結構拆成兩個網絡的和,一個一層,一個兩層,最下面層是共享的。」[14]。
-----
Fig. 4.1d. Separation of ResNet block [14].
-----
「在訓練過程中,左邊的網絡因為更簡單所以更容易訓練。這個小網絡沒有擬合到的部分,或者說殘差,則被右邊的網絡抓取住。所以直觀上來說,即使加深網絡,跨層連接仍然可以使得底層網絡可以充分的訓練,從而不會讓訓練更難。」[14]。
-----
◎ DenseNet
DenseNet 的想法很大程度上源於隨機深度網絡(Deep networks with stochastic depth)。當時作者們提出了一種類似於 Dropout 的方法來改進 ResNet。作者們發現在訓練過程中的每一步都隨機地「扔掉」(drop)一些層,可以顯著的提高 ResNet 的泛化性能 [15]。
「DenseNet 讓網絡中的每一層都直接與其前面層相連,實現特徵的重複利用;同時把網絡的每一層設計得特別「窄」,即只學習非常少的特徵圖(最極端情況就是每一層只學習一個特徵圖),達到降低冗餘性的目的。」[15]。
-----
Fig. 4.2. DenseNet [15].
-----
◎ GoogLeNet
「網絡中間的層次生成的特徵會非常有區分性,給這些層增加一些輔助分類器,這些分類器以小卷積網絡的形式放在 Inception(4a) 和 Inception(4b) 的輸出上,在訓練過程中,損失會根據折扣後的權重(折扣權重為0.3)疊加到總損失中。」[16]。
-----
Fig. 4.3. GoogLeNet [17].
-----
Fig. 4.4. Evolution of CNNs [18].
-----
結論:
圖4.4 簡單介紹了 CNN 的演進。我們可以看到,CNN 的發展到 VGGNet 達到瓶頸,而 RNN 改進的 LSTM,經由 Highway Networks,巧妙地讓 CNN 的深度可以到「極深」,因而達到極佳的辨識能力。
可以說,圖3.1 的 cell state,是 CNN 與 RNN 的共同核心。Deep Learning 的妙處,盡在此線。
-----
後記:
結束三次的深度學習講座後,遠望附近的聯發科(圖5),依然燈火通明。
教,其實是學,最好的方式。我在這三次的演講深切的體會到!
Fig. 5. 聯發科(左)。
-----
出版說明:
2019/10/22
第一次的 LSTM 文章只能算是蒐集資料與資料整理,後來有機會到某科技公司進行三次的教育訓練,所以我又重寫了一次,精簡過文章,並補充 ResNet 與其不同的形式。每次重寫就會進步一些,目前正準備進行第三次的 LSTM 文章撰寫!
-----
References
[1] RNN(LSTM)
Hochreiter, Sepp, and Jürgen Schmidhuber. "Long short-term memory." Neural computation 9.8 (1997): 1735-1780.
http://www.bioinf.jku.at/publications/older/2604.pdf
[2] 遞歸神經網路和長短期記憶模型 RNN & LSTM · 資料科學・機器・人
https://brohrer.mcknote.com/zh-Hant/how_machine_learning_works/how_rnns_lstm_work.html
[3] AI從頭學(一九):Recurrent Neural Network
http://hemingwang.blogspot.tw/2017/03/airecurrent-neural-network.html
[4] Wang, Hao, and Dit-Yan Yeung. "Towards bayesian deep learning: A survey." arXiv preprint arXiv:1604.01662 (2016).
https://arxiv.org/pdf/1604.01662.pdf
[5] 100_rnn
http://www.deeplearningbook.org/contents/rnn.html
[6] Optimizing Recurrent Neural Networks in cuDNN 5
https://devblogs.nvidia.com/parallelforall/optimizing-recurrent-neural-networks-cudnn-5/
[7] All of Recurrent Neural Networks – Medium_m4c8pmg3d
https://medium.com/@jianqiangma/all-about-recurrent-neural-networks-9e5ae2936f6e
[8] Understanding LSTM Networks -- colah's blog
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
[9] 『cs231n』RNN之理解LSTM網絡 - 掃文資訊
https://hk.saowen.com/a/a4162fcc05e9206b66731e6cf4bcdfcfae6be20ca66d09dcb2130b48794b7af7
[10] Highway Networks - bamtercelboo - 博客园
http://www.cnblogs.com/bamtercelboo/p/7606197.html
[11] 基於pytorch實現HighWay Networks之Highway Networks詳解 - 掃文資訊
https://hk.saowen.com/a/6347f3cb3e82b2aa98431589bbc775fec1499406deb65dc90cf21f6f2331ff8a
[12] ResNet论文笔记 - CSDN博客
http://blog.csdn.net/wspba/article/details/56019373
[13] 残差网络ResNet笔记 - 简书
https://www.jianshu.com/p/e58437f39f65
[14] ResNet:深度残差网络 — 动手学深度学习 0.6 documentation
https://zh.gluon.ai/chapter_convolutional-neural-networks/resnet-gluon.html
[15] CVPR 2017最佳論文作者解讀:DenseNet 的「what」、「why」和「how」|CVPR 2017 _ 香港矽谷
https://www.hksilicon.com/articles/1392714
[16] GoogLeNet学习心得 - 静悟生慧 - 博客园
https://www.cnblogs.com/Allen-rg/p/5833919.html
[17] googlenet in keras
http://joelouismarino.github.io/blog_posts/blog_googlenet_keras.html
[18] 深度學習之四大經典CNN技術淺析 硬創公開課 香港矽谷
https://www.hksilicon.com/articles/1280725
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.