Xception
2019/10/24
-----
// Review Xception — With Depthwise Separable Convolution, Better Than Inception-v3 (Image Classification)
-----
References
Review Xception — With Depthwise Separable Convolution, Better Than Inception-v3 (Image Classification)
https://towardsdatascience.com/review-xception-with-depthwise-separable-convolution-better-than-inception-v3-image-dc967dd42568
无需数学背景,读懂 ResNet、Inception 和 Xception 三大变革性架构 _ 机器之心
https://www.jiqizhixin.com/articles/2017-08-19-4
Thursday, October 31, 2019
SqueezeNet
SqueezeNet
2019/10/31
-----
// Modern convnets, squeezenet, with Keras and TPUs
-----
// Modern convnets, squeezenet, with Keras and TPUs
-----
// Squeezenet-residual by songhan
-----
References
Modern convnets, squeezenet, with Keras and TPUs
https://codelabs.developers.google.com/codelabs/keras-flowers-squeezenet/#6
Squeezenet-residual by songhan
http://songhan.github.io/SqueezeNet-Residual/
2019/10/31
-----
// Modern convnets, squeezenet, with Keras and TPUs
-----
// Modern convnets, squeezenet, with Keras and TPUs
-----
// Squeezenet-residual by songhan
-----
References
Modern convnets, squeezenet, with Keras and TPUs
https://codelabs.developers.google.com/codelabs/keras-flowers-squeezenet/#6
Squeezenet-residual by songhan
http://songhan.github.io/SqueezeNet-Residual/
MobileNet v1
MobileNet v1
2019/10/31
-----
// Review MobileNetV1 — Depthwise Separable Convolution (Light Weight Model)
-----
References
Review MobileNetV1 — Depthwise Separable Convolution (Light Weight Model)
https://towardsdatascience.com/review-mobilenetv1-depthwise-separable-convolution-light-weight-model-a382df364b69
2019/10/31
-----
// Review MobileNetV1 — Depthwise Separable Convolution (Light Weight Model)
-----
References
Review MobileNetV1 — Depthwise Separable Convolution (Light Weight Model)
https://towardsdatascience.com/review-mobilenetv1-depthwise-separable-convolution-light-weight-model-a382df364b69
Mobile
Mobile
2019/10/31
-----
// GitHub - weslynn_AlphaTree-graphic-deep-neural-network 将深度神经网络中的一些模型 进行统一的图示,便于大家对模型的理解
-----
GitHub - weslynn_AlphaTree-graphic-deep-neural-network 将深度神经网络中的一些模型 进行统一的图示,便于大家对模型的理解
https://github.com/weslynn/AlphaTree-graphic-deep-neural-network
纵览轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception _ 机器之心
https://www.jiqizhixin.com/articles/2018-01-08-6
2019/10/31
-----
// GitHub - weslynn_AlphaTree-graphic-deep-neural-network 将深度神经网络中的一些模型 进行统一的图示,便于大家对模型的理解
-----
GitHub - weslynn_AlphaTree-graphic-deep-neural-network 将深度神经网络中的一些模型 进行统一的图示,便于大家对模型的理解
https://github.com/weslynn/AlphaTree-graphic-deep-neural-network
纵览轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception _ 机器之心
https://www.jiqizhixin.com/articles/2018-01-08-6
Thursday, October 24, 2019
[翻譯] An Overview of Normalization Methods in Deep Learning
[翻譯] An Overview of Normalization Methods in Deep Learning
2019/10/24
-----
-----
An Overview of Normalization Methods in Deep Learning _ Machine Learning Explained
https://mlexplained.com/2018/11/30/an-overview-of-normalization-methods-in-deep-learning/
2019/10/24
-----
-----
An Overview of Normalization Methods in Deep Learning _ Machine Learning Explained
https://mlexplained.com/2018/11/30/an-overview-of-normalization-methods-in-deep-learning/
Wednesday, October 23, 2019
AI 從頭學(二0):Deep Learning,Hot
AI 從頭學(二0):Deep Learning,Hot
2017/03/29
-----
Fig. Hot(圖片來源:Pixabay)。
-----
底下摘錄某單位 Deep Learning 工程師徵才的條件,大家可以知道現在有哪些比較熱門的技術。
我已經查好 DQN 的 paper 了!
-----
-----
Requirements:
-----
Requirement :
-----
出版說明:
2019/10/13
重要論文(假設鎖定在深度學習)有三種,一種是最新的,一發表就被很多人引用的,另一種不是最新的,發表過一段時間,也被很多人引用。第三種,關心的人不是太多,受限於主題比較狹窄。
假定你是碩士班或博士班的學生,上述三種,都是你該關心的。第一種的重要性,在於發表論文很注重原創性,如果你做的,有人已經做過了,而且你沒有做的比他好,那你的論文價值就不大。第二、三種,則可能是你研究的基石。
假定你是一個工程師,打算進入深度學習,但並沒有經過學院的訓練,那以上三種,也是你該注意的。第一種,是看看有何新技術可以直接使用。第三種,可能跟你的工作有直接相關。但第二種,才是最重要的。因為沒有第二種,第一種你也掌握不了。
論文那麼多,第二種,對你才是最 hot 的。不管多熱,你都要設法拿起來。以上!
2017/03/29
-----
Fig. Hot(圖片來源:Pixabay)。
-----
底下摘錄某單位 Deep Learning 工程師徵才的條件,大家可以知道現在有哪些比較熱門的技術。
我已經查好 DQN 的 paper 了!
-----
-----
Requirements:
-----
Requirement :
-----
出版說明:
2019/10/13
重要論文(假設鎖定在深度學習)有三種,一種是最新的,一發表就被很多人引用的,另一種不是最新的,發表過一段時間,也被很多人引用。第三種,關心的人不是太多,受限於主題比較狹窄。
假定你是碩士班或博士班的學生,上述三種,都是你該關心的。第一種的重要性,在於發表論文很注重原創性,如果你做的,有人已經做過了,而且你沒有做的比他好,那你的論文價值就不大。第二、三種,則可能是你研究的基石。
假定你是一個工程師,打算進入深度學習,但並沒有經過學院的訓練,那以上三種,也是你該注意的。第一種,是看看有何新技術可以直接使用。第三種,可能跟你的工作有直接相關。但第二種,才是最重要的。因為沒有第二種,第一種你也掌握不了。
論文那麼多,第二種,對你才是最 hot 的。不管多熱,你都要設法拿起來。以上!
Tuesday, October 22, 2019
深入淺出 Deep Learning(三):RNN (LSTM)
深入淺出 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
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
Monday, October 21, 2019
AI 從頭學(一九):Recurrent Neural Network
AI 從頭學(一九):Recurrent Neural Network
2017/03/28
前言:
在一連串的 BP、AD、LeNet、CNN 等簡介之後,這次講了 RNN 三種基本架構。我想讀者,包括我自己,應該都能對 Deep Learning 有初步的掌握。
祝大家百丈礦脈,更深一層!
-----
Fig. Chain(圖片來源:Pixabay)。
-----
Summary:
Recurrent Neural Network (RNN) [1], [2] 主要可分為 RNN、Long Short-Term Memory (LSTM) LSTM、Gated Recurrent Unit (GRU) 三種 [3]-[8]。
傳統的RNN [9]-[12] 使用 Back Propagation Through Time (BPTT) Algorithm [13], [14]。有別於 BP Algorithm [15],BPTT是有序的,也就是往回調整參數權重時,同一層裡面,要從後面的輸出開始微分 [16], [17]。
LSTM [18]-[26] 增加了三個控制閘,藉以修正傳統RNN單元梯度陡峭與平緩的問題。GRU [27]-[33] 則是 LSTM 的簡化版,有較高的效能 [34], [35]。不管是 LSTM 或 GRU,都是藉由增加控制訊號來加強記憶 [36], [37]。
-----
第一節:RNN 與 LSTM 簡介
◎ RNN
圖1.1a 左邊是一個傳統的 FNN,右邊是 RNN,RNN 展開後得到圖1.1b。RNN 的公式見圖1.2a。
由圖1.1a 右可以看到,在 activation function(i.e. ht)傳遞到輸出層的同時,會順便傳相同的值回到ht,但時間上已經延後一個單位。所以我們看到圖1.1b,每一個 ht 作用時,要先將前一個 ht-1 的輸出乘上 W 的權重,加上輸入值 xt 乘上 Y 的權重,加上偏壓 b。這個是圖1.2a 的第一行。
後續作用 tanh,這個ht的值一邊往輸出層移動,一邊輸出到下一個 ht+1。這是第二行。
ht 乘上 V 的權重,加上偏壓 c,就成了輸出 ot。這是第三行。
瞧,RNN的觀念是不是很簡單。
值的一提的是圖1.2b,softmax function。這個只會用在輸出層,不會用在隱藏層。Softmax 主要的功能是使輸出成為一個離散的機率分佈,總和為 1。
-----
Fig. 1.1a. FNN and RNN, p. 4, [2].
-----
Fig. 1.1b. An unrolled RNN, p. 4, [2].
-----
Fig. 1.2a. RNN formula, p. 4, [2].
-----
Fig. 1.2b. Softmax function, p. 4, [2].
-----
◎ LSTM
在 [2] 裡面也提到了 LSTM,有公式(參考圖1.4),但沒有圖。圖的話,[1] 裡面有一張(參考圖1.3a),看起來很有學問,但是我建議你不要花太多時間,因為後面有更好的圖。而且在你還搞不清輸入跟乘法還有sigm以及tanh的作用之前,很難看懂。
本篇文章,關於 LSTM 最好的圖應該是圖1.3b,雖然它沒有標示三個閘,哪個是哪個,但是等你明瞭原理,其實一目瞭然,有沒有標示已經無關緊要了。
接下來則以 [2] 的公式(圖1.4)配合 [5] 的圖(圖1.3b)講解 LSTM。這個有點長,所以依照慣例,我們還是先來一段自問自答。圖跟公式沒有統一,這裡我們以圖為主好了。
-----
Question
Q1: σ, sigmoid
Q2: tanh, hyperbolic tangent
Q3: element-wise mul
Q4: f, forget gate
Q5: o, output gate
Q6: z, input
Q7: i, input gate
Q8: ct-1, old memory cell
Q9, ct, memory cell
-----
Q1: σ, sigmoid
這個 sigmoid function,並不像之前的 CNN 範例,以此作為 activation function。它主要的功能,是把值限定在0與1之前,然後可以當作控制訊號。配合乘法使用,如果乘以0就是資料訊號不通過,1就是全部通過,其他則是部分通過。所以我們看到圖1.3b中共有三個sigms,分別是忘記閘、輸入閘,以及輸出閘。編號分別是0、1、3。這個你在圖1.3a中是看不到的。
-----
Q2: tanh, hyperbolic tangent
這個就是一般的 activation function 囉。這個在圖1.3b中有兩個。左邊這個五角形可以知道編號2接的不是閘,而是真正的輸入。這個輸入要加上之前的記憶ct-1乘上忘記閘的值,然後準備輸出。以白話來說,就是首先由忘記閘0決定要忘掉多少東西,然後這次帶來的東西由輸入閘1決定要帶入多少東西,這兩個加總,準備輸出。
經過右邊的五角形 tanh 作用後,再由輸出閘3決定真正要輸出多少訊號量。
講到這邊,其實已經把 LSTM 講完了。
-----
Q3: element-wise mul
這個是向量乘法,向量,可以參考圖4.2b,字串也是一種向量。在此處,我建議你只要知道,這個就是乘以sigm輸出的0到1之間的值決定輸出的百分比。也就是控制的意思。
-----
Q4: f, forget gate
這個是編號0,用來決定上一個記憶ct-1可以進來多少。
-----
Q5: o, output gate
這個是編號3,用來決定真正要輸出多少。
-----
Q6: z, input
這個是編號2,就是真正的輸入值 xt 囉。它會另外拷貝三份給三個閘使用。
-----
Q7: i, input gate
這個是編號1,用來決定有多少輸入訊號 xt 可以進來。值得注意的是忘記閘與輸入閘都會被之前的記憶 ct-1 所影響。
-----
Q8: ct-1, old memory cell
之前保存的記憶。
-----
Q9, ct, memory cell
新的記憶,要帶到下一個運算 LSTM 運算單元。
-----
Fig. 1.3a. LSTM, p. 409, [1].
-----
Fig. 1.3b. LSTM, [5].
-----
Fig. 1.3c. LSTM symbols, [5].
-----
LSTM 公式:
本來圖講完,LSTM 的原理應該已經很清楚了,但是公式都貼出來了,所以還是配合圖講解一下公式好了。因為實作上還要把公式化為程式碼的。
公式在圖1.4。
有關 LSTM 的輸入,圖1.4a的第一行,xt=Wwet。可參考:word embedding matrix。
斯坦福大学深度学习与自然语言处理第二讲:词向量
http://www.52nlp.cn/%E6%96%AF%E5%9D%A6%E7%A6%8F%E5%A4%A7%E5%AD%A6%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E4%B8%8E%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86%E7%AC%AC%E4%BA%8C%E8%AE%B2%E8%AF%8D%E5%90%91%E9%87%8F
本節主要講解 LSTM 的結構,輸入的部分未來若有機會再專文討論。
-----
Fig. 1.4a. LSTM formula, p. 4, [2].
-----
Fig. 1.4b. LSTM formula, p. 4, [2].
-----
Fig. 1.4c. LSTM formula, p. 5, [2].
-----
第二節:RNN
◎ RNN
簡單的 RNN 架構在第一節已有說明。較複雜的 RNN 網路,請參考圖2,本文並不討論。
-----
Fig. 2.1a. An RNN is a very deep FNN, p. 2, [9].
-----
Fig. 2.1b. The Multiplicative RNN, p. 4, [9].
-----
Fig. 2.1c. Illustrations of four different RNNs, p. 4, [10].
-----
第三節:BPTT
◎ BPTT
「傳統的RNN [9]-[12] 使用 Back Propagation Through Time (BPTT) Algorithm [13], [14]。有別於 BP Algorithm [15],BPTT是有序的,也就是往回調整參數權重時,同一層裡面,要從後面的輸出開始微分 [16], [17]。」
這裡解釋一下上面這段話 :
基本上,類神經網路是一個函數,表現為網路的形式。網路有多個輸入,也有多個輸出。如果以類神經網路來解決問題,主要是要讓 cost function (C),或稱 loss function (L),也就是網路的輸出值與正確值的誤差越小越好。
當權重 w 與偏壓 b 固定時,函數為 f(x),輸入值為 x。但是當我們想要調整 w 與 b 使得誤差變小,這時 x 固定,w 跟 b 為函數 f 的變數,我們要對 C 做 w 與 b 的偏微分。當一階w偏導數大於0,表示誤差漸增,這時 w 要向左移動,誤差才會變小。這段話如果不很清楚,請重新看一下 [15]。
由於網路是多層的,所以微分時會遇到 chain rule。同一個輸出層,先做哪一個並不會影響結果。但是不同的隱藏層,要從輸出層一層一層往輸入層推進,這個部分是有序的。
RNN,如圖1.1b,看似一個扁平的網路,其實因為每個輸出都會受到之前的影響,所以做 BP的時候,要從後面的輸出往前做 BP,這也就是 RNN 用的 BP 叫做 back propagation through time 的意思,參考圖3.1a。原則上,你可以把簡單的RNN視為一個很深的網路。
[13] 的演算法不容易閱讀,[14] 則一目瞭然,參考圖3.1b。第一個部分是前向計算,變數t從1到T遞增。第二個部分是BPTT,變數t從T-1到1遞減。第三個部分則是更新權重。
-----
Fig. 3.1a. Back propagation through time, [17].
-----
Fig. 3.1b. BPTT algorithm, p. 243, [14].
-----
第四節:LSTM
◎ LSTM
LSTM 在第一節中其實已經講得很清楚,這裡多參考幾篇論文。
圖4.1a還算不錯。左邊是傳統的RNN,中間是 LSTM。展開後可得圖4.2b 跟4.2c。
參考右邊的解釋,你會知道有加法、乘法、sigm、tanh 等,也知道有三個閘,你知道它們之間有些關係與計算,但是輸入跟輸出都很難理解,所以還是圖1.3b比較好。
圖4.1b跟4.1c幫助都不是很大。但總之,到目前為止,靠著圖1.3b,你已經可以瞭解 LSTM 的架構。所以更複雜的圖4.1d與4.1e就請自行參考。
總之,主要是圖1.3b、4.2a、4.2d 三張圖,幫助我理解 LSTM。
-----
Fig. 4.1a. LSTM, p. 2, [23].
-----
Fig. 4.1b. LSTM, p. 274, [22].
-----
Fig. 4.1c. LSTM, p. 39, [21].
-----
Fig. 4.1d. An LSTM network, p. 40, [21].
-----
Fig. 4.1e. An LSTM network, p. 1745, [18].
-----
Fig. 4.2a. LSTM, [24].
-----
Fig. 4.2b. An LSTM network, [25].
-----
Fig. 4.2c. RNN, [26].
-----
Fig. 4.2d. LSTM, [26].
-----
第五節:GRU
◎ GRU
終於進到 GRU 了!
GRU 可以說是 LSTM 的簡化版。
圖5.1a 是 LSTM 跟 GRU 的「電路圖」。這兩個圖一開始一樣不容易看懂,特別 GRU 目前是全新的概念。
先看一下 LSTM。先注意有 foi 三個閘,閘有開關,你可以把黑點視為sigm。c~ 是新的記憶,由舊的記憶 c 加上輸入,這個舊的記憶 c 要先經由 f 決定剩下幾成,然後加上輸入的幾成,再存回 c 後,tanh,然後輸出閘,輸出。這個一樣越描越黑,有興趣可以配合其他的圖與公式仔細推敲。
LSTM 這邊就再講解一下圖5.2e的公式,主要是第五行,我做了小修改:
ct=(ct-1) x (ft) + (jt) x (it),參考圖5.1b。
ct-1是前一個記憶值。ft是忘記閘。
jt是輸入值。it是輸入閘。
其次是第六行:
ht=tanh(ct) x ot
ct 經過 activation function 之後,由輸出閘決定輸出的百分比。
至於前四行的 sigm 與 tanh 是怪怪的。
-----
這邊才是真正要講 GRU。
還是再來自問自答。
Question
Q10: 1-, interpolation
Q11: z, update gate
Q12: r, reset gate
Q13: h, activation
Q14: h~, candidate activation
-----
Q10: 1-, interpolation
先看一下圖5.1c,這個 1- ,是 interpolation。
在圖5.1a 右,這個閘顯示可以接左或接右。其實決定更新閘與重置閘的比率。舉例,一個是 60% 的資料可以通過,另一個就是 40% 的資料可以通過。
-----
Q11: z, update gate
z 決定有多少資料要更新。如果 z = 1,則全部都是舊資料,新資料完全不考慮進來。參考圖5.2f 的第四行公式。
-----
Q12: r, reset gate
r 是重置閘,它決定舊資料有多少比例進入成為新資料候選人。參考圖5.1a 右以及圖5.2f 的一、三行公式。
-----
Q13: h, activation
h是新資料,這個 activation function 是由更新閘決定多少比率的舊資料,與多少比率的新資料候選人,不是單純的 tanh。參考圖5.1a 右,以及圖5.2f 公式的第四行。
-----
Q14: h~, candidate activation
h~ 是新資料候選人。它是由重置閘先決定舊資料有多少比例進來,然後加上輸入資料,再由更新閘決定輸出。參考圖5.1a 右,以及圖5.2f 的三、四行。
-----
圖5.3 就請自行參考。
-----
Fig. 5.1a. LSTM and GRU, p. 3, [27].
-----
Fig. 5.1b. LSTM, p. 2, [28].
-----
Fig. 5.1c. GRU, p. 3, [28].
-----
Fig. 5.2a. GRU formula, p. 4, [27].
-----
Fig. 5.2b. GRU formula, p. 4, [27].
-----
Fig. 5.2c. GRU formula, p. 4, [27].
-----
Fig. 5.2d. GRU formula, p. 4, [27].
-----
Fig. 5.2e. LSTM formula, p. 2, [28].
-----
Fig. 5.2f. GRU formula, p. 3, [28].
-----
Fig. 5.3a. Gated Feedback RNN, p. 4, [29].
-----
Fig. 5.3b. Structure of IMAGINET, p. 2, [30].
-----
結論:
圖5.1a 是本篇文章的核心。由於省略不少符號,以及流程的重複,並不容易瞭解。所以我認為還是要反覆搭配公式才能有較通透的理解。
本文只有講解 LSTM 與 GRU 的架構。有關輸入的文字向量部分,若有時間再補充。
-----
出版說明:
2019/10/21
跟 CNN 相比,RNN(LSTM、GRU) 是比較難理解的概念,特別是 LSTM 裡面的幾個門。不過,你可以把 LSTM 想成沒有卷積,然後順時針方向旋轉九十度的 CNN,也許這樣比較容易理解,因為一般深度學習是從圖像處理的 CNN 開始。
除了音訊之外,RNN 較早時也用來處理自然語言。有人問,目前 NLP 轉進 self attention,那還要不要學 LSTM。答案是肯定的,因為 LSTM 只是基礎而已。事實上,LSTM 的一些概念如 identity mapping(skip connection)被用在 ResNet,而 gate 也被用在稍後的 ConvS2S。
-----
References
◎ 1 Intro
[1] 100_rnn
http://www.deeplearningbook.org/contents/rnn.html
[2] 2016_Towards Bayesian Deep Learning, A Survey
◎ 1 Intro Internet
[3] 淺談Deep Learning原理及應用
http://www.cc.ntu.edu.tw/chinese/epaper/0038/20160920_3805.html
[4] A Beginner's Guide to Recurrent Networks and LSTMs - Deeplearning4j Open-source, Distributed Deep Learning for the JVM
https://deeplearning4j.org/lstm
[5] All of Recurrent Neural Networks – Medium_m4c8pmg3d
https://medium.com/@jianqiangma/all-about-recurrent-neural-networks-9e5ae2936f6e
[6] Recurrent Layers - Keras Documentation
https://keras.io/layers/recurrent/
[7] Recurrent Layers - TFLearn
http://tflearn.org/layers/recurrent/
[8] Recurrent Neural Networks in Tensorflow II - R2RT
http://r2rt.com/recurrent-neural-networks-in-tensorflow-ii.html
◎ 2 RNN
[9] 2011_Generating Text with Recurrent Neural Networks
[10] 2013_How to construct deep recurrent neural networks
2 RNN Internet
[11] Recurrent Neural Networks Tutorial, Part 1 – Introduction to RNNs – WildML
http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/
[12] Recurrent Neural Networks Tutorial, Part 2 – Implementing a RNN with Python, Numpy and Theano – WildML
http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-2-implementing-a-language-model-rnn-with-python-numpy-and-theano/
◎ 3 BPTT
[13] 1990_Backpropagation through time, what it does and how to do it
[14] 2015_Automatic speech recognition, a deep learning approach_237-266
◎ 3 BPTT Internet
[15] AI從頭學(九):Back Propagation
http://hemingwang.blogspot.tw/2017/02/aiback-propagation.html
[16]
[17] Recurrent Neural Networks Tutorial, Part 3 – Backpropagation Through Time and Vanishing Gradients – WildML
http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/
◎ 4 LSTM
[18] 1997_Long short-term memory
[19] 2000_Learning to forget, Continual prediction with LSTM
[20] 2002_Learning precise timing with LSTM recurrent networks
[21] 2012_Supervised Sequence Labelling with Recurrent Neural Networks_37-45
[22] 2013_Hybrid speech recognition with deep bidirectional LSTM
[23] 2016_LSTM, A search space odyssey
◎ 4 LSTM Internet
[24] Optimizing Recurrent Neural Networks in cuDNN 5
https://devblogs.nvidia.com/parallelforall/optimizing-recurrent-neural-networks-cudnn-5/
[25] Recurrent Neural Network Configuration — PaddlePaddle documentation
http://www.paddlepaddle.org/doc/algorithm/rnn/rnn.html
[26] Understanding LSTM Networks -- colah's blog
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
◎ 5 GRU
[27] 2014_Empirical evaluation of gated recurrent neural networks on sequence modeling
[28] 2015_An empirical evaluation of recurrent network architectures
[29] 2015_Gated feedback recurrent neural networks
[30] 2015_Learning language through pictures
◎ 5 GRU Internet
[31] chainer_links_connection_gru — Chainer 1_22_0 documentation
http://docs.chainer.org/en/latest/_modules/chainer/links/connection/gru.html
[32] theanets_layers_recurrent_GRU — Theanets 0_7_3 documentation
http://theanets.readthedocs.io/en/stable/api/generated/theanets.layers.recurrent.GRU.html
[33] Recurrent Neural Network Tutorial, Part 4 – Implementing a GRU-LSTM RNN with Python and Theano – WildML
http://www.wildml.com/2015/10/recurrent-neural-network-tutorial-part-4-implementing-a-grulstm-rnn-with-python-and-theano/
[34] LSTM与GRU的一些比较--论文笔记 - meanme的专栏 - 博客频道 - CSDN_NET
http://blog.csdn.net/meanme/article/details/48845793
[35] Review - Gated Recurrent Units Prof_Xuechen's Personal Blog
https://professorstudio.github.io/2016/08/01/gru/
[36] 机器之心 LSTM和递归网络基础教程
http://www.jiqizhixin.com/article/1364
[37] 深度学习与层级性:从RNN到注意力与记忆 张江
http://www.twoeggz.com/news/3988531.html
-----
補充資料:
[38] 有哪些LSTM(Long Short Term Memory)和RNN(Recurrent)网络的教程?
https://www.zhihu.com/question/29411132
[39] 零基础入门深度学习(6) - 长短时记忆网络(LSTM)
https://zybuluo.com/hanbingtao/note/581764?from=groupmessage
2017/03/28
前言:
在一連串的 BP、AD、LeNet、CNN 等簡介之後,這次講了 RNN 三種基本架構。我想讀者,包括我自己,應該都能對 Deep Learning 有初步的掌握。
祝大家百丈礦脈,更深一層!
-----
Fig. Chain(圖片來源:Pixabay)。
-----
Summary:
Recurrent Neural Network (RNN) [1], [2] 主要可分為 RNN、Long Short-Term Memory (LSTM) LSTM、Gated Recurrent Unit (GRU) 三種 [3]-[8]。
傳統的RNN [9]-[12] 使用 Back Propagation Through Time (BPTT) Algorithm [13], [14]。有別於 BP Algorithm [15],BPTT是有序的,也就是往回調整參數權重時,同一層裡面,要從後面的輸出開始微分 [16], [17]。
LSTM [18]-[26] 增加了三個控制閘,藉以修正傳統RNN單元梯度陡峭與平緩的問題。GRU [27]-[33] 則是 LSTM 的簡化版,有較高的效能 [34], [35]。不管是 LSTM 或 GRU,都是藉由增加控制訊號來加強記憶 [36], [37]。
-----
第一節:RNN 與 LSTM 簡介
◎ RNN
圖1.1a 左邊是一個傳統的 FNN,右邊是 RNN,RNN 展開後得到圖1.1b。RNN 的公式見圖1.2a。
由圖1.1a 右可以看到,在 activation function(i.e. ht)傳遞到輸出層的同時,會順便傳相同的值回到ht,但時間上已經延後一個單位。所以我們看到圖1.1b,每一個 ht 作用時,要先將前一個 ht-1 的輸出乘上 W 的權重,加上輸入值 xt 乘上 Y 的權重,加上偏壓 b。這個是圖1.2a 的第一行。
後續作用 tanh,這個ht的值一邊往輸出層移動,一邊輸出到下一個 ht+1。這是第二行。
ht 乘上 V 的權重,加上偏壓 c,就成了輸出 ot。這是第三行。
瞧,RNN的觀念是不是很簡單。
值的一提的是圖1.2b,softmax function。這個只會用在輸出層,不會用在隱藏層。Softmax 主要的功能是使輸出成為一個離散的機率分佈,總和為 1。
-----
Fig. 1.1a. FNN and RNN, p. 4, [2].
-----
Fig. 1.1b. An unrolled RNN, p. 4, [2].
-----
Fig. 1.2a. RNN formula, p. 4, [2].
-----
Fig. 1.2b. Softmax function, p. 4, [2].
-----
◎ LSTM
在 [2] 裡面也提到了 LSTM,有公式(參考圖1.4),但沒有圖。圖的話,[1] 裡面有一張(參考圖1.3a),看起來很有學問,但是我建議你不要花太多時間,因為後面有更好的圖。而且在你還搞不清輸入跟乘法還有sigm以及tanh的作用之前,很難看懂。
本篇文章,關於 LSTM 最好的圖應該是圖1.3b,雖然它沒有標示三個閘,哪個是哪個,但是等你明瞭原理,其實一目瞭然,有沒有標示已經無關緊要了。
接下來則以 [2] 的公式(圖1.4)配合 [5] 的圖(圖1.3b)講解 LSTM。這個有點長,所以依照慣例,我們還是先來一段自問自答。圖跟公式沒有統一,這裡我們以圖為主好了。
-----
Question
Q1: σ, sigmoid
Q2: tanh, hyperbolic tangent
Q3: element-wise mul
Q4: f, forget gate
Q5: o, output gate
Q6: z, input
Q7: i, input gate
Q8: ct-1, old memory cell
Q9, ct, memory cell
-----
Q1: σ, sigmoid
這個 sigmoid function,並不像之前的 CNN 範例,以此作為 activation function。它主要的功能,是把值限定在0與1之前,然後可以當作控制訊號。配合乘法使用,如果乘以0就是資料訊號不通過,1就是全部通過,其他則是部分通過。所以我們看到圖1.3b中共有三個sigms,分別是忘記閘、輸入閘,以及輸出閘。編號分別是0、1、3。這個你在圖1.3a中是看不到的。
-----
Q2: tanh, hyperbolic tangent
這個就是一般的 activation function 囉。這個在圖1.3b中有兩個。左邊這個五角形可以知道編號2接的不是閘,而是真正的輸入。這個輸入要加上之前的記憶ct-1乘上忘記閘的值,然後準備輸出。以白話來說,就是首先由忘記閘0決定要忘掉多少東西,然後這次帶來的東西由輸入閘1決定要帶入多少東西,這兩個加總,準備輸出。
經過右邊的五角形 tanh 作用後,再由輸出閘3決定真正要輸出多少訊號量。
講到這邊,其實已經把 LSTM 講完了。
-----
Q3: element-wise mul
這個是向量乘法,向量,可以參考圖4.2b,字串也是一種向量。在此處,我建議你只要知道,這個就是乘以sigm輸出的0到1之間的值決定輸出的百分比。也就是控制的意思。
-----
Q4: f, forget gate
這個是編號0,用來決定上一個記憶ct-1可以進來多少。
-----
Q5: o, output gate
這個是編號3,用來決定真正要輸出多少。
-----
Q6: z, input
這個是編號2,就是真正的輸入值 xt 囉。它會另外拷貝三份給三個閘使用。
-----
Q7: i, input gate
這個是編號1,用來決定有多少輸入訊號 xt 可以進來。值得注意的是忘記閘與輸入閘都會被之前的記憶 ct-1 所影響。
-----
Q8: ct-1, old memory cell
之前保存的記憶。
-----
Q9, ct, memory cell
新的記憶,要帶到下一個運算 LSTM 運算單元。
-----
Fig. 1.3a. LSTM, p. 409, [1].
-----
Fig. 1.3b. LSTM, [5].
-----
Fig. 1.3c. LSTM symbols, [5].
-----
LSTM 公式:
本來圖講完,LSTM 的原理應該已經很清楚了,但是公式都貼出來了,所以還是配合圖講解一下公式好了。因為實作上還要把公式化為程式碼的。
公式在圖1.4。
有關 LSTM 的輸入,圖1.4a的第一行,xt=Wwet。可參考:word embedding matrix。
斯坦福大学深度学习与自然语言处理第二讲:词向量
http://www.52nlp.cn/%E6%96%AF%E5%9D%A6%E7%A6%8F%E5%A4%A7%E5%AD%A6%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E4%B8%8E%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86%E7%AC%AC%E4%BA%8C%E8%AE%B2%E8%AF%8D%E5%90%91%E9%87%8F
本節主要講解 LSTM 的結構,輸入的部分未來若有機會再專文討論。
-----
Fig. 1.4a. LSTM formula, p. 4, [2].
-----
Fig. 1.4b. LSTM formula, p. 4, [2].
-----
Fig. 1.4c. LSTM formula, p. 5, [2].
-----
第二節:RNN
◎ RNN
簡單的 RNN 架構在第一節已有說明。較複雜的 RNN 網路,請參考圖2,本文並不討論。
-----
Fig. 2.1a. An RNN is a very deep FNN, p. 2, [9].
-----
Fig. 2.1b. The Multiplicative RNN, p. 4, [9].
-----
Fig. 2.1c. Illustrations of four different RNNs, p. 4, [10].
-----
第三節:BPTT
◎ BPTT
「傳統的RNN [9]-[12] 使用 Back Propagation Through Time (BPTT) Algorithm [13], [14]。有別於 BP Algorithm [15],BPTT是有序的,也就是往回調整參數權重時,同一層裡面,要從後面的輸出開始微分 [16], [17]。」
這裡解釋一下上面這段話 :
基本上,類神經網路是一個函數,表現為網路的形式。網路有多個輸入,也有多個輸出。如果以類神經網路來解決問題,主要是要讓 cost function (C),或稱 loss function (L),也就是網路的輸出值與正確值的誤差越小越好。
當權重 w 與偏壓 b 固定時,函數為 f(x),輸入值為 x。但是當我們想要調整 w 與 b 使得誤差變小,這時 x 固定,w 跟 b 為函數 f 的變數,我們要對 C 做 w 與 b 的偏微分。當一階w偏導數大於0,表示誤差漸增,這時 w 要向左移動,誤差才會變小。這段話如果不很清楚,請重新看一下 [15]。
由於網路是多層的,所以微分時會遇到 chain rule。同一個輸出層,先做哪一個並不會影響結果。但是不同的隱藏層,要從輸出層一層一層往輸入層推進,這個部分是有序的。
RNN,如圖1.1b,看似一個扁平的網路,其實因為每個輸出都會受到之前的影響,所以做 BP的時候,要從後面的輸出往前做 BP,這也就是 RNN 用的 BP 叫做 back propagation through time 的意思,參考圖3.1a。原則上,你可以把簡單的RNN視為一個很深的網路。
[13] 的演算法不容易閱讀,[14] 則一目瞭然,參考圖3.1b。第一個部分是前向計算,變數t從1到T遞增。第二個部分是BPTT,變數t從T-1到1遞減。第三個部分則是更新權重。
-----
Fig. 3.1a. Back propagation through time, [17].
-----
Fig. 3.1b. BPTT algorithm, p. 243, [14].
-----
第四節:LSTM
◎ LSTM
LSTM 在第一節中其實已經講得很清楚,這裡多參考幾篇論文。
圖4.1a還算不錯。左邊是傳統的RNN,中間是 LSTM。展開後可得圖4.2b 跟4.2c。
參考右邊的解釋,你會知道有加法、乘法、sigm、tanh 等,也知道有三個閘,你知道它們之間有些關係與計算,但是輸入跟輸出都很難理解,所以還是圖1.3b比較好。
圖4.1b跟4.1c幫助都不是很大。但總之,到目前為止,靠著圖1.3b,你已經可以瞭解 LSTM 的架構。所以更複雜的圖4.1d與4.1e就請自行參考。
總之,主要是圖1.3b、4.2a、4.2d 三張圖,幫助我理解 LSTM。
-----
Fig. 4.1a. LSTM, p. 2, [23].
-----
Fig. 4.1b. LSTM, p. 274, [22].
-----
Fig. 4.1c. LSTM, p. 39, [21].
-----
Fig. 4.1d. An LSTM network, p. 40, [21].
-----
Fig. 4.1e. An LSTM network, p. 1745, [18].
-----
Fig. 4.2a. LSTM, [24].
-----
Fig. 4.2b. An LSTM network, [25].
-----
Fig. 4.2c. RNN, [26].
-----
Fig. 4.2d. LSTM, [26].
-----
第五節:GRU
◎ GRU
終於進到 GRU 了!
GRU 可以說是 LSTM 的簡化版。
圖5.1a 是 LSTM 跟 GRU 的「電路圖」。這兩個圖一開始一樣不容易看懂,特別 GRU 目前是全新的概念。
先看一下 LSTM。先注意有 foi 三個閘,閘有開關,你可以把黑點視為sigm。c~ 是新的記憶,由舊的記憶 c 加上輸入,這個舊的記憶 c 要先經由 f 決定剩下幾成,然後加上輸入的幾成,再存回 c 後,tanh,然後輸出閘,輸出。這個一樣越描越黑,有興趣可以配合其他的圖與公式仔細推敲。
LSTM 這邊就再講解一下圖5.2e的公式,主要是第五行,我做了小修改:
ct=(ct-1) x (ft) + (jt) x (it),參考圖5.1b。
ct-1是前一個記憶值。ft是忘記閘。
jt是輸入值。it是輸入閘。
其次是第六行:
ht=tanh(ct) x ot
ct 經過 activation function 之後,由輸出閘決定輸出的百分比。
至於前四行的 sigm 與 tanh 是怪怪的。
-----
這邊才是真正要講 GRU。
還是再來自問自答。
Question
Q10: 1-, interpolation
Q11: z, update gate
Q12: r, reset gate
Q13: h, activation
Q14: h~, candidate activation
-----
Q10: 1-, interpolation
先看一下圖5.1c,這個 1- ,是 interpolation。
在圖5.1a 右,這個閘顯示可以接左或接右。其實決定更新閘與重置閘的比率。舉例,一個是 60% 的資料可以通過,另一個就是 40% 的資料可以通過。
-----
Q11: z, update gate
z 決定有多少資料要更新。如果 z = 1,則全部都是舊資料,新資料完全不考慮進來。參考圖5.2f 的第四行公式。
-----
Q12: r, reset gate
r 是重置閘,它決定舊資料有多少比例進入成為新資料候選人。參考圖5.1a 右以及圖5.2f 的一、三行公式。
-----
Q13: h, activation
h是新資料,這個 activation function 是由更新閘決定多少比率的舊資料,與多少比率的新資料候選人,不是單純的 tanh。參考圖5.1a 右,以及圖5.2f 公式的第四行。
-----
Q14: h~, candidate activation
h~ 是新資料候選人。它是由重置閘先決定舊資料有多少比例進來,然後加上輸入資料,再由更新閘決定輸出。參考圖5.1a 右,以及圖5.2f 的三、四行。
-----
圖5.3 就請自行參考。
-----
Fig. 5.1a. LSTM and GRU, p. 3, [27].
-----
Fig. 5.1b. LSTM, p. 2, [28].
-----
Fig. 5.1c. GRU, p. 3, [28].
-----
Fig. 5.2a. GRU formula, p. 4, [27].
-----
Fig. 5.2b. GRU formula, p. 4, [27].
-----
Fig. 5.2c. GRU formula, p. 4, [27].
-----
Fig. 5.2d. GRU formula, p. 4, [27].
-----
Fig. 5.2e. LSTM formula, p. 2, [28].
-----
Fig. 5.2f. GRU formula, p. 3, [28].
-----
Fig. 5.3a. Gated Feedback RNN, p. 4, [29].
-----
Fig. 5.3b. Structure of IMAGINET, p. 2, [30].
-----
結論:
圖5.1a 是本篇文章的核心。由於省略不少符號,以及流程的重複,並不容易瞭解。所以我認為還是要反覆搭配公式才能有較通透的理解。
本文只有講解 LSTM 與 GRU 的架構。有關輸入的文字向量部分,若有時間再補充。
-----
出版說明:
2019/10/21
跟 CNN 相比,RNN(LSTM、GRU) 是比較難理解的概念,特別是 LSTM 裡面的幾個門。不過,你可以把 LSTM 想成沒有卷積,然後順時針方向旋轉九十度的 CNN,也許這樣比較容易理解,因為一般深度學習是從圖像處理的 CNN 開始。
除了音訊之外,RNN 較早時也用來處理自然語言。有人問,目前 NLP 轉進 self attention,那還要不要學 LSTM。答案是肯定的,因為 LSTM 只是基礎而已。事實上,LSTM 的一些概念如 identity mapping(skip connection)被用在 ResNet,而 gate 也被用在稍後的 ConvS2S。
-----
References
◎ 1 Intro
[1] 100_rnn
http://www.deeplearningbook.org/contents/rnn.html
[2] 2016_Towards Bayesian Deep Learning, A Survey
◎ 1 Intro Internet
[3] 淺談Deep Learning原理及應用
http://www.cc.ntu.edu.tw/chinese/epaper/0038/20160920_3805.html
[4] A Beginner's Guide to Recurrent Networks and LSTMs - Deeplearning4j Open-source, Distributed Deep Learning for the JVM
https://deeplearning4j.org/lstm
[5] All of Recurrent Neural Networks – Medium_m4c8pmg3d
https://medium.com/@jianqiangma/all-about-recurrent-neural-networks-9e5ae2936f6e
[6] Recurrent Layers - Keras Documentation
https://keras.io/layers/recurrent/
[7] Recurrent Layers - TFLearn
http://tflearn.org/layers/recurrent/
[8] Recurrent Neural Networks in Tensorflow II - R2RT
http://r2rt.com/recurrent-neural-networks-in-tensorflow-ii.html
◎ 2 RNN
[9] 2011_Generating Text with Recurrent Neural Networks
[10] 2013_How to construct deep recurrent neural networks
2 RNN Internet
[11] Recurrent Neural Networks Tutorial, Part 1 – Introduction to RNNs – WildML
http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/
[12] Recurrent Neural Networks Tutorial, Part 2 – Implementing a RNN with Python, Numpy and Theano – WildML
http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-2-implementing-a-language-model-rnn-with-python-numpy-and-theano/
◎ 3 BPTT
[13] 1990_Backpropagation through time, what it does and how to do it
[14] 2015_Automatic speech recognition, a deep learning approach_237-266
◎ 3 BPTT Internet
[15] AI從頭學(九):Back Propagation
http://hemingwang.blogspot.tw/2017/02/aiback-propagation.html
[16]
[17] Recurrent Neural Networks Tutorial, Part 3 – Backpropagation Through Time and Vanishing Gradients – WildML
http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/
◎ 4 LSTM
[18] 1997_Long short-term memory
[19] 2000_Learning to forget, Continual prediction with LSTM
[20] 2002_Learning precise timing with LSTM recurrent networks
[21] 2012_Supervised Sequence Labelling with Recurrent Neural Networks_37-45
[22] 2013_Hybrid speech recognition with deep bidirectional LSTM
[23] 2016_LSTM, A search space odyssey
◎ 4 LSTM Internet
[24] Optimizing Recurrent Neural Networks in cuDNN 5
https://devblogs.nvidia.com/parallelforall/optimizing-recurrent-neural-networks-cudnn-5/
[25] Recurrent Neural Network Configuration — PaddlePaddle documentation
http://www.paddlepaddle.org/doc/algorithm/rnn/rnn.html
[26] Understanding LSTM Networks -- colah's blog
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
◎ 5 GRU
[27] 2014_Empirical evaluation of gated recurrent neural networks on sequence modeling
[28] 2015_An empirical evaluation of recurrent network architectures
[29] 2015_Gated feedback recurrent neural networks
[30] 2015_Learning language through pictures
◎ 5 GRU Internet
[31] chainer_links_connection_gru — Chainer 1_22_0 documentation
http://docs.chainer.org/en/latest/_modules/chainer/links/connection/gru.html
[32] theanets_layers_recurrent_GRU — Theanets 0_7_3 documentation
http://theanets.readthedocs.io/en/stable/api/generated/theanets.layers.recurrent.GRU.html
[33] Recurrent Neural Network Tutorial, Part 4 – Implementing a GRU-LSTM RNN with Python and Theano – WildML
http://www.wildml.com/2015/10/recurrent-neural-network-tutorial-part-4-implementing-a-grulstm-rnn-with-python-and-theano/
[34] LSTM与GRU的一些比较--论文笔记 - meanme的专栏 - 博客频道 - CSDN_NET
http://blog.csdn.net/meanme/article/details/48845793
[35] Review - Gated Recurrent Units Prof_Xuechen's Personal Blog
https://professorstudio.github.io/2016/08/01/gru/
[36] 机器之心 LSTM和递归网络基础教程
http://www.jiqizhixin.com/article/1364
[37] 深度学习与层级性:从RNN到注意力与记忆 张江
http://www.twoeggz.com/news/3988531.html
-----
補充資料:
[38] 有哪些LSTM(Long Short Term Memory)和RNN(Recurrent)网络的教程?
https://www.zhihu.com/question/29411132
[39] 零基础入门深度学习(6) - 长短时记忆网络(LSTM)
https://zybuluo.com/hanbingtao/note/581764?from=groupmessage