Tuesday, December 31, 2019

AI 三部曲(深度學習:從入門到精通)

AI 三部曲(深度學習:從入門到精通)

2019/05/02

前言:

本文試著整理出十篇 Deep Learning(深度學習)的論文,作為初學者進入深度學習的第一關。內容包含 CV(電腦視覺)五篇、NLP(自然語言處理)五篇。如果是完全的初學者,建議可以先看一下 AI 從頭學 [23]。

-----


Fig. Penrose Triangle(圖片來源:Pixabay)。

-----

Summary:

Deep Learning 兩個主要的應用領域是 CV 與 NLP。

首部曲:

CV 三個重要主題則是 CNN(卷積神經網路)、Semantic Segmentation(語意分割)、Object Detection(物件偵測)。CNN 是 Deep Learning 的基礎 [1],最重要的幾個模型是 LeNet [2]-[4]、NIN [5]、ResNet [6]-[8]。Semantic Segmentation 則以 FCN 為代表 [9]。Object Detection 則可以從 YOLOv1 開始 [10]。

NLP 建議的閱讀順序是 LSTM [11]、Seq2seq [12]、Attention [13]、ConvS2S [14]、Transformer [15]。以上是 BERT 的主要基礎,BERT 是一個 NLP 預訓練模型,於 2018 年底推出,在許多 NLP 任務中的表現都很好 [16]。

以上十篇是深度學習的基礎。另有 Optimization [17]、Regularization [18]、Normalization [19]、Semantic Segmentation [20]、Object Detection [21]、Word2vec [22] 等主題可以深入。

二部曲:

假定這十篇論文已經可以充分掌握,我推薦用 Python 實作一下 LeNet [24]。然後是三個重要主題:Regularization 如 Weight Decay 或 Dropout、Optimization 如 Momentum 或 Adam、Normalization 如 Batch 或 Layer [25]。若對 Deep Learning 有極大的興趣,可以在上述主題都熟練後,重新打一下機器學習(其實就是數學)的基礎 [26], [27]。

三部曲:

NLP 如果要徹底掌握 BERT,其實要回頭複習 NNLM、Word2vec、GloVe、fastText、ELMo、AWD-LSTM、ULMFiT、OpenAI GPT [29]。

以上主題十分龐大,建議還是以這十篇的 LeNet [2], [23] 開始。說的誇張一點,LeNet 如果搞定,Deep Learning 就可以算是掌握九成了,其他都是變化。

-----

Outline

CNN(卷積神經網路)的演變

一、LeNet(The Net)
◎ Regression(迴歸)
◎ LeNet
◎ Convolution(卷積)
◎ Neuron(神經元)
◎ Pooling(池化)
◎ Full Connection Layer(全連接層)
◎ Linearly Non-separable(線性不可分)
◎ Linearly Separable(線性可分)
◎ Activation Function(激活函數)
◎ Gradient Descent(梯度下降法)
◎  Back Propagation(反向傳播法)

二、NIN(Network in Network)
◎ NIN(網路中的網路)
◎ 1 x 1 Convolution(1x1 卷積)

三、ResNet(Residual Net)
◎ Residual Structure(殘差結構)
◎ ResNet(殘差網路)

四、FCN(Fully Convolutional Network)
◎ Semantic Segmentation(語意分割)
◎ FCN(全卷積網路)
◎ Up Sampling(上取樣)

五、YOLOv1
◎ Object Detection(物件偵測)
◎ YOLO(你只能看一次)
◎ Loss Function(YOLO 的損失函數)

六、LSTM(Long Short-Term Memory)
◎ RNN(遞迴神經網路)
◎ LSTM(長的短期記憶)

七、Seq2seq(Sequence to Sequence)
◎ Seq2seq(序列到序列)

八、Attention
◎ Attention(注意力)

九、ConvS2S(Convolutional Seq2seq)
◎ ConvS2S(卷積的序列到序列)

十、Transformer
◎ Transformer(變形金剛)
◎ Query、Key、Value
◎ Self Attention(自注意力)
◎ Qd、Ke、Ve(編碼端的 QKV)
◎ Qd、Kd、Vd(解碼端的 QKV)

-----



Fig. 1. CNN(卷積神經網路)的演變 [1]
 
-----

CNN(卷積神經網路)的演變

-----

正文開始之前,先說說 CNN 的歷史 [1]。

1998 的 LeNet 是第一個里程碑。簡單說就是可以辨識 0 到 9 的阿拉伯數字,並且已經用在美國的一些銀行。不過由於當然電腦運算量的限制,沈寂了一段很長的時間。

2012 的 AlexNet 是第二個重要的里程碑。今年是 2019,在這段時間內,藉著 GPU 龐大的運算能力,2013 的 ZFNet、NIN,2014 的 VGGNet、GoogLeNet,到 2015 的 ResNet,影像辨識能力一舉超越人類專家。

簡單說,ResNet = LeNet + NIN + LSTM。這四篇論文,在本篇文章中會陸續介紹。

-----

一、LeNet(The Net)

-----

CNN是個有點複雜的概念,因此,在介紹 LeNet 之前,我們先以一個相對簡單的迴歸分析,作為熱身。

-----


Fig. 2. Regression(迴歸)[2]

-----

◎ Regression(迴歸)

-----

什麼是迴歸?以圖二為例,左邊是一個線性迴歸,中間接近一個二次的拋物線,右邊是高次的曲線。

這三個模型,哪一個是對的?哪一個最好,其實沒有一定。但一般說來,我們不希望模型的誤差太大,也不希望模型太複雜,所以中間這張圖,就是一般我們所需要的。

藉由有限的資料,找出一個函數來 fit 這些資料。函數找出來以後,就可以用 x 來預測 y。比方說,預測股市(有這麼簡單嗎?哈哈)。

-----


Fig. 3. LeNet [2]。 

-----

◎ LeNet

-----

圖二是個迴歸模型,可以用 x 預測 y。圖三是 LeNet,CNN 模型,可以用一張 32x32 的圖片,預測圖片的數字是 0 到 9 的機率,總和為 1。

你可以理解的是迴歸模型的輸入是一個點 x,輸出是一個 y 值。LeNet 的 輸入是 1024 個點,x0 到 x1023,輸出是一個 y 向量,y0 到 y9,y0 到 y9 的總和為 1。

丟進模型的,也沒有限定是阿拉伯數字。以圖三為例,如果你把 A 丟進訓練好的 LeNet 下去運算,你可能認為 4 的可能是是 0.1,9 的可能性是 0.1,其他的可能性均為 0,但是正規化之後,4 和 9 的可能性都是 0.5,其他還是 0。

LeNet 的結構是 輸入層、卷積層、池化層、卷積層、池化層、全連接層、全連接層、輸出層。輸入層就是 1024 個點,輸出層就是10 個 0 到 1 的實數且總和為 1。

下面繼續介紹卷積層、池化層、以及全連接層。

-----


Fig. 4. Convolution(卷積)[2]

-----

◎ Convolution(卷積)

-----

卷積是什麼呢?圖四是一個平面上,或者叫空間(二維)上的卷積。

不過我們先來說一下時間上的卷積,這邊會有一點信號與系統以及數位訊號處理的觀念。

讓我們直接進入數位訊號處理。假定有一個 x + 1 的信號,與一個 x + 1 的信號(或者一個 x + 1 的信號通過一個 x + 1 的系統),兩個信號作卷積,得出來的就是一個 (x + 1)*(x + 1) 的信號,也就是 x^2 + 2x + 1 的信號。所以一維的卷積,你當成多項式相乘就可以了。

卷積的觀念從一維推廣到二維,如圖四,就是一個小矩陣通過一張較大的圖片。每一個點旁邊有八個點,共九個點。每個矩陣也有九個值,你可以想成用你的朋友來重新定義你這個人,比方說旁邊都是紅點,那你這九個人基本上就是紅,旁邊都是綠點,那你這九個人基本上就是綠、旁邊都是藍點,那你這九個人基本上就是藍。至於實際運算,可以參考一維的運算方式。

在數位信號處理上,這個 3x3 的矩陣叫做空間濾波器,不同的濾波器有不同的功能,比方說有些對垂直線敏感,有些對水平線敏感。這些都是由專家找出來的。深度學習跟數位訊號處理最大的差距,就是在深度學習中,矩陣的權重是靠資料訓練出來的。

如何訓練,後面的梯度下降法會仔細說明。

-----


Fig. 5. Neuron(神經元)[2]

-----

◎ Neuron(神經元)

-----

神經元由一些元素構成,分別是輸入、權重、偏置、激活函數、輸出。

圖五可以跟圖四一起看。比方說 x11 到 x33 這九個原圖上的點,就是輸入。矩陣上的 w11 到 w33 就是對應的權重。相乘再加總之後,如果大於一個 bias(偏置,圖五漏掉了),被激活了,就繼續經過一個 activation function(激活函數)計算,然後輸出。如果沒有被激活,那輸出就是 0。常見的激活函數有 sigmoid、tanh、ReLU 等。

激活函數有一個功能是壓縮資料,另一個更重要的功能是增加模型的表現力(所以都是非線性),激活函數如何影響到神經網路,後面的線性可分與線性不可分會說明。

跟 weight 一樣,bias 也是靠訓練得到的。

-----


Fig. 6. Pooling(池化)[2]

-----

◎ Pooling(池化)

-----

池化有兩個功能,一是降維(或者叫壓縮資料、減少資料),一是保留特徵。主要有最大值池化跟平均池化。

-----


Fig. 7. Full Connection Layer(全連接層)[4]

-----

◎ Full Connection Layer(全連接層)

-----

經過卷積、池化、卷積、池化之後,LeNet 會有兩個全連接層。全連接層主要就是線性組合(另外還要加上激活函數的非線性)。

如果以 LeNet 為例,第一層卷積層主要功能是找出各個角度的直線,第二層卷積層則是將一些小直線拼成垂直線、水平線、斜線、或曲線。接下來的全連接層則是將第二層的物件組成一個數字。

為什麼在 CNN 前幾層會用到卷積層,而不是全連接層呢?主要是影像的特性,每個點只會跟鄰近的點有關連,跟遠方的點,基本上是不相干的。所以用一些小矩陣,把影像的特徵提取出來。

-----


Fig. 8. Linearly Non-separable(線性不可分)[4]

-----

◎ Linearly Non-separable(線性不可分)

-----

圖八是一個線性不可分的例子。

-----


Fig. 9. Linearly Separable(線性可分) [4]

-----

◎ Linearly Separable(線性可分)

-----

透過數層的非線性激活函數,線性不可分就變成線性可分了。

-----


Fig. 10. Activation Function(激活函數)[4]

-----

◎ Activation Function(激活函數)

-----

不同的激活函數,都有可能將線性不可分轉為線性可分。

-----


Fig. 11. Gradient Descent(梯度下降法)[2]

-----

◎ Gradient Descent(梯度下降法)

-----

接下來是深度學習的重頭戲,梯度下降法 [2]。

我們先一一由左至右解釋符號。

Wk 是本次的權重,Wk-1 是上次的權重。epsilon 是步長,偏微分符號(讀做 round),E(W) 是 error function,或者叫做 cost function,是預測值跟實際值的誤差。

利用圖二中左邊第一個點來說明。先想像你的預測值跟實際值的呈現如一座山,你想要讓誤差值變小,也就是下山,你能怎麼做?可以往右踏一步,也可以往左踏一步,如果你往左踏一步,發現高度有下降一點點,就是正確的方向,那你只要反覆一直走,就可以下山。

epsilon 就是步長,Wk-1 就是上一次的位置,Wk 就是新的位置,導數為正,斜率值大於零,表示遞增,這時你的 x 座標要減去一個正值,也就是向左移,誤差就會變小,也就是下山。

網路函數,變數為 x,常數為 w。可是當你想要調整權重,這時要固定 x。至於為何是偏微而不是常微,因為 w 有很多要調整。

這邊會有遇到局部最小值的可能,有些方法可以解決,譬如 momentum [17]。

-----


Fig. 12. Back Propagation(反向傳播法)[3]

-----

◎  Back Propagation(反向傳播法)

-----

BP

1. S 是訓練集,有 M 個樣本。L 是總層數。o 是一個樣本,y 是該樣本 o 的值。 2. 隨機設定所有 w 和 b 的初始值。 3. 做到收斂或做到指定的次數。 4. 選擇一個小批次 O。 5. 把 O 丟進前向網路。 6. 得到 V,跟實際值 Y 有差距,為 E。 7. 將 E 代入 G。 8. 從最後一層開始往前做。 9. 計算 w 的梯度。 10. 計算 b 的梯度。 11. 更新 w。 12. 更新 b。 13. 權重轉置乘上 G 代入前一層的 E。 14. 如果不是第一層,則 15. 取激活函數 f 的微分值,與 E 做 hadamard product 再代入 G。 16. end if。 17. end for。 18. end while 19. 傳回 DNN 裡,所有層裡面的 w 和 b。 20. end procedure。

以上先簡單註解圖十二演算法二十行,再仔細說明內容。

一、背景:

反向傳播法其實就是微積分裡的 chain rule,一個函數的導數,可以分解成其隱含數導數的乘積。神經網路由於是由一連串的激活函數跟線性組合構成,所以神經網路的導數,可以分解成一連串 f' 與 w 的連續乘積 [7], [8]。

二、上標與下標:

上標 L 是代表神經網路的第 L 層,下標 t 則是代表 time,Wt 是本次的權重,Wt+1 則是更新後的權重。

三、輸出

V 是輸出,演算法第六行,因為 cost function 是 (1/2)(V - Y)^2,所以其導數是 E = V - Y。第七行的 G 則是暫存。

四、W 和 b

第九行的 W 比第十行的 b,多乘一個 V,是因為 V[l] = f(WV[l-1]+b),原本 V 是變數,但是要更新 W 和 b 時,W 和 b 變成變數,V 變成常數。以 b 為變數,WV[l-1] 是常數,在 chain rule 微分後不見了。以 W 為變數,WV[l-1] 微分後會留下 V[l-1]。

五、chain rule

第十三到第十五行,則是把導數傳到前一層,暫存的 G,乘上 f' 跟 W,即可得到前一層的導數,f' 在這邊是要利用網路裡暫存的數值,用電腦算出來的。

小結:

BP 把每層的導數 f' 跟 w 層層展開。 梯度下降法藉由調整權重讓損失函數的值朝 0 前進。損失函數 L 是 輸出 V 的函數。輸出函數 V 是激活函數 F 的函數。激活函數 F 是神經元 Z 的函數。神經元 Z 是 W X + B 的函數。以上是反向傳播。更新 W 時,變數由 X 變為 W,所以導數要多乘一個 X 項。更新 B 時,變數由 X 變為 B,不用多乘 W 跟 X,因為 W 與 X 在此都是常數,微分後就不見了!

經過層層的更新 W 和 b 的權重,最後傳回,一次更新網路。

-----

二、NIN(Network in Network)

-----


Fig. 13. NIN(網路中的網路)[5]

-----

◎ NIN(網路中的網路)

-----

圖十三,NIN,就是在兩個卷積層之間,再插入一個叫 MLPconv 的網路。

-----


Fig. 14. 1 x 1 Convolution(1x1 卷積) [5]

-----

◎ 1 x 1 Convolution(1x1 卷積)

-----

簡單說,就是千層派的概念。64 張特徵圖,可以壓扁成 32 張特徵圖。當然,也可以擴充為 128 張特徵圖。每張新的特徵圖,都是由原來的 64 張特徵圖,以不同的權重構成,權重值?靠訓練 [5]。

這邊的 1 x 1 convolution,或稱為 conv1,其實跟我們一般概念上的 conv3  或 conv5 不同。conv3 是空間上的卷積,conv1 則是 channel 間的卷積。所謂 channel,64 張 feature maps,就是 64 個 channel,新的特徵圖上,每一個點 xij,都是不同 channel 上,所有不同的 xij 的線性組合。

精神跟空間的卷積還是一樣,平面上的像素跟鄰近的像素相關性高,channel 間的相關性,同樣位置的每一點相關性高。

Conv1 由於可以有效壓縮資料,在目前的深度學習中,已是基本配備。

-----

三、ResNet(Residual Net)

-----


Fig. 15. Residual Structure(殘差結構)[6]

-----

◎ Residual Structure(殘差結構)

-----

圖十五是一個殘差結構,也就是在原來的網路架構上,多加了一個 identity(或者叫 skip connection),這樣餘下的部分,就變成 F(x) 這個殘差部分。

殘差網路比原來網路的值小,所以對變化比較敏感,也比較好訓練。而從 LSTM 概念來的 identity 則可以減低深度網路梯度消失的問題 [7]。

-----


Fig. 16. ResNet(殘差網路)[6]

-----

◎ ResNet(殘差網路)

-----

截至本次更新日期,2019/07/01,《Deep residual learning for image recognition》這篇論文被引用 24409 次,獲得極大的成功。不過你大概可以說,ResNet = LeNet + NIN + LSTM。偉大的論文,有時只是很基本的元素,加上卓越的洞見。

這邊可以先簡單再回顧一下 CNN 的歷史 [1]。

1998 LeNet 是一個不錯的網路,但當時受限於計算機的運算力有限,所以網路大小也受限。
2012 AlexNet 有了 GPU 跟一些新技巧,加深了網路,大幅提升網路性能。
2013 ZFNet 微調 AlexNet,改善一點點。
2013 NIN 讓加深網路更可行。
2014 VGGNet 用兩個 conv3 組成一個 conv5,反覆加深,到 16 層結果很棒,19 比 16 好一點點,22 以上反而更差。這表示加深網路並不是萬靈丹。
2014 GoogLeNet 除了大量使用 conv1,也多了兩個輔助輸出,可以直接傳遞梯度到網路比較前面的部分。

2015 的 ResNet 跟 Highway Networks 都採用 LSTM 的 identity 概念,不過 ResNet 比較簡潔,也做了比較多實驗。結果大獲成功,陸續也有更多的變形。

不過,後續的研究,則說明,ResNet 除了可以減低梯度消失的問題,更大的可能是避免模型退化,也就是神經元無法輸出,或者兩個神經元輸出一樣 [6]。

-----

四、FCN(Fully Convolutional Network)

-----


Fig. 17. Semantic Segmentation(語意分割)[9]

-----

◎ Semantic Segmentation(語意分割)

-----

一般 CNN 的功能是辨識一張圖片的內容為何,譬如阿拉伯數字 0 到 9,如圖三。

FCN 則是能夠分辨到像素級別,譬如圖十七。每個屬於貓的像素,都被塗上棕色,每個屬於狗的像素,都被塗上紫色,背景則是綠色。

-----


Fig. 18. FCN(全卷積網路)[9]

-----

◎ FCN(全卷積網路)

-----

怎麼做到呢?圖十八上,在一般的 CNN 中,最後是全連接層,輸出可能是三十種類別的可能性,取最大的那個當作結果。

FCN 最後不用全連接層,基本上還是卷積層,所以最後是三十張特徵圖。每個像素穿過這三十張特徵圖,取最大值那張所屬的類別,作為此像素的類別。

-----


Fig. 19. Up Sampling(上取樣)[9]

-----

◎ Up Sampling(上取樣)

-----

由於只以最後一層的特徵圖,輪廓很模糊,所以上取樣兩次,以這三張圖加總,可以得到較清晰的輪廓。論文所做的實驗,繼續上取樣,結果不會比較好,所以上取樣只做兩次。

有關 FCN 較新的研究,可以參考 [20]。

-----

五、YOLOv1

-----


Fig. 20. Object Detection(物件偵測)[10]

-----

◎ Object Detection(物件偵測)

-----

一般 CNN 是辨識一張圖片的類別。Object Detection 則是可以辨識圖片內的多個物件。

以 YOLOv1 為例,他把圖片先分成 7x7 個小框框,每個小框框可以預測兩張圖(中心落在框框內),這樣最多可以預測出 98 張圖。圖二十預測了狗、腳踏車跟汽車三個物件。

-----


Fig. 21. YOLO(你只要看一次)[10]

-----

◎ YOLO(你只能看一次)

-----

圖廿一是 YOLOv1 的網路架構,最右邊是重點,輸出是 7x7x30。

也就是 49 個小框框,每個小框框預測兩張圖。每個圖有 15 個資訊,參考下一張圖的損失函數。

-----


Fig. 22. Loss Function(YOLO 的損失函數)[10]。  

-----

◎ Loss Function(YOLO 的損失函數)

-----

S × S × (B * 5 + C) tensors。

S = 7。
B = 2。
C = 20。

S = 7,7 X 7 個預測框。B = 2,每個框預測 2 個物件(屬於同一種類別)。5 分別是中心 (x, y) 與寬高 w, h,以及是物件或不是物件。然後 C = 20 是這兩個物件屬於二十種類別的 confidences。

-----

有關更多 Object Detection,可以參考 [21]。

另外補充一下,你大概可以說,YOLOv3 = YOLOv1 + ResNet + FPN,而 FPN 跟 FCN 都使用最後三層特徵圖輔助運算。

-----

六、LSTM(Long Short-Term Memory)

-----


Fig. 23. RNN(遞迴神經網路)[11]。

-----

◎ RNN(遞迴神經網路)

-----

圖廿三是三個陽春的 RNN 單元,輸入與前一個輸出加總後,通過 tanh 再輸出。由於是時間序列,因此適合處理 speech、audio、video、text 等資料。如果你把 RNN旋轉九十度,那其實是一個很深的網路,只是每層都有輸入與輸出,不像一般 CNN,輸入跟輸出都只有一層。

-----


Fig. 24. LSTM(長的短期記憶)[11]。

-----

◎ LSTM(長的短期記憶)

-----

RNN 由於有梯度消失 [7] 與梯度爆炸 [8] 等問題,因此後續又有學者提出 LSTM。大家看到 LSTM,有沒有想過,為何單元裡有三個 sigmoid 跟兩個 tanh?

其實 sigmoid 在這裡不是激活函數,而是當作類比的閘門,用來控制輸入的百分比在 0 與 1 之間,所以後續又執行乘法。至於 tanh 有兩個,只要看一下圖廿四就知道,加總後要再經過一個非線性的激活函數,進行非線性轉換,增加模型的表現能力。簡單來說,就是兩層的意思。

LSTM 之外,也有 GRU 單元,架構簡化而效能接近。

-----

七、Seq2seq(Sequence to Sequence)

-----


Fig. 25. Seq2seq(序列到序列)[12]

-----

◎ Seq2seq(序列到序列)

-----

Sequence to sequence,以翻譯為例,左邊的輸入是一個英文句子,右邊的輸出是一個對應的德文句子。先把英文句子轉成向量 [22] 輸入,壓縮成單一向量,再把向量解碼成德文。

這個架構也可以執行摘要的功能。只要把(英文、德文)換成(全文、摘要)即可!

-----

八、Attention

-----


Fig. 26. Attention(注意力)[13]

-----

◎ Attention(注意力)

-----

Seq2seq 的單一向量儲存空間有限,會損失資訊。因此 Attention 把左邊的句子壓縮成多向量,每個向量有不同的權重,權重如何得到?靠訓練。

-----

九、ConvS2S(Convolutional Seq2seq)

-----


Fig. 27. ConvS2S(卷積的序列到序列)[14]

-----

◎ ConvS2S(卷積的序列到序列)

-----

ConvS2S 跟下一個 Transformer 都屬於 STORM 的架構,Source Target Output Relational Model。只是 ConvS2S 使用一維的 convolution 代替 LSTM / GRU,而 Transformer 則以 self-attention 的架構,RNN 跟 CNN 都不使用。但讀者可以注意到 Transformer 裡面還是有用到 FNN 的神經網路用來升降維。

讀者若能徹底掌握 Transformer,則 ConvS2S 很容易從 Transformer 推演過來。

-----

十、Transformer

-----


Fig. 28. Transformer(變形金剛)[15]

-----

◎ Transformer(變形金剛)

-----

以下以英德翻譯為例,右邊 Stage3 是全部的核心。

訓練時 Qd 找到編碼端的 Ke、Ve,也找到 解碼端的 Kd、Vd,對齊後輸出需要的德文。

測試時 Qd 找到編碼端的 Ke、Ve,透過訓練好的權重,直接輸出需要的德文。

-----

圖廿八對第一次看的人應該很複雜,不過整個 Transformer 的架構確實就是如此。

分成十小節說明:

一、I/O Embedding
Word2Vec。Stage1 不管 Encoder 端的英文或者 Decoder 端的德文,都先從 one-hot 編碼轉成詞向量 [22]。

二、Positional Encoding
公式跟跟訓練結果差不多,用公式。

三、Attention
Query、Key、Value。詞向量再分解成 Q、K、V。如何分解?靠訓練出來的權重矩陣。

四、Multi-Head
套用 CNN 多個卷積核 的概念讓結果變好。

五、Masked
保持 Auto Regression,output 不考慮 i 之後字的因素。

六、Skip
ResNet(Dropout)[6]。

七、Layer Normalization
BN 每筆資料每層的某個位置正規化,LN 某筆資料某層的所有位置正規化,正規化 - 減 mean 再除以 STD [19]。

八、FNN
調整輸出跟輸入的維度 [5]。

九、Linear
打分數。

十、Softmax
是 Logistic Regression 的推廣,
資料為 0 ~ 1 之間,總和為 1 的離散機率分布。

-----


Fig. 29. Query、Key、Value [15]

-----

◎ Query、Key、Value

-----

首先透過權重矩陣把已經 embed 好的詞向量轉成 Q、K、V 三個分量。Q 跟 K 其實差不多,但概念上 Q 是變數,K 是常數,K 是位址的概念,V 是內容的概念。Qd 可以分別對應到 Ke 跟 Kd,這樣運算起來比較方便。

-----


Fig. 30. Self Attention(自注意力)[15]

-----

◎ Self Attention(自注意力)

-----

QKV:
QK 對齊(內積、餘弦相似)。(如果 LSTM 的 Attention 的話,是加法)。

Root of dk:
dk:dimension of K,避免向量的分量值透過 Logistic Regression 後都是 1 或者都是 0,造成無 attention。

-----


Fig. 31. Qd、Ke、Ve(編碼端的 QKV)[15]

-----

◎ Qd、Ke、Ve(編碼端的 QKV)

-----

Qd 找到 Ke、Ve,編碼端的英文。

-----


Fig. 32. Qd、Kd、Vd(解碼端的 QKV)[15]

-----

◎ Qd、Kd、Vd(解碼端的 QKV)

-----

Qd 找到 Kd、Vd,解碼端的德文。

-----

Conclusion

本文簡單介紹了五篇 CV 跟五篇 NLP 最重要的論文。讀者若希望有進一步的認識,CV [25] 跟 NLP [29] 都有更多介紹!

-----

演講公告

8 月 25 日 星期日 下午兩點到五點,清大圖書館一樓清沙龍。
8 月 24 日 星期六 下午兩點到五點,北科大第六教學大樓,一樓開放空間。
6 月 15 日 星期六 下午兩點到五點,北科大綜合科館地下一樓 B08。
5 月 25 日 星期六 下午兩點到五點,清大風雲樓二樓靠門口處。
5 月 18 日 星期六 下午兩點到五點,開南大學卓越樓 621 室。
5 月 9 日 星期四 下午兩點二十到四點,台大明達館 223 室。

-----

全方位 AI 課程(六十小時搞定深度學習)
https://hemingwang.blogspot.com/2019/10/preface.html 
 
-----

References

[1] 深入淺出 Deep Learning(四):CNN
http://hemingwang.blogspot.com/2018/02/deep-learningcnn.html

[2]深入淺出 Deep Learning(二):LeNet & BP
http://hemingwang.blogspot.com/2018/02/deep-learninglenet-bp.html 

[3] AI從頭學(九):Back Propagation
http://hemingwang.blogspot.tw/2017/02/aiback-propagation.html 

[4] Math(五):Manifold
http://hemingwang.blogspot.com/2019/04/mathmanifold.html

[5] AI從頭學(二八):Network in Network
http://hemingwang.blogspot.com/2017/06/ainetwork-in-network.html

[6] AI從頭學(三三):ResNet
http://hemingwang.blogspot.com/2018/09/airesnet.html

[7] Vanishing Gradient
http://hemingwang.blogspot.com/2019/05/vanishing-gradient.html

[8] Exploding Gradient
http://hemingwang.blogspot.com/2019/05/exploding-gradient.html

[9] AI從頭學(三四):FCN
http://hemingwang.blogspot.com/2018/02/deep-learningfcn.html

[10] AI從頭學(三六):YOLO v1
http://hemingwang.blogspot.com/2018/04/deep-learningyolo-v1.html

[11] NLP(一):LSTM
http://hemingwang.blogspot.com/2019/09/lstm.html

[12] NLP(二):Sequence to Sequence
http://hemingwang.blogspot.com/2019/09/seq2seq.html

[13] NLP(三):Attention
http://hemingwang.blogspot.com/2019/01/attention.html

[14] NLP(四):ConvS2S
https://hemingwang.blogspot.com/2019/04/convs2s.html

[15] NLP(五):Transformer
http://hemingwang.blogspot.com/2019/01/transformer.html 

[16] NLP(六):BERT Overview
https://hemingwang.blogspot.com/2019/01/bert-overview.html

-----

[17] An overview of gradient descent optimization algorithms
http://ruder.io/optimizing-gradient-descent/

[18] An Overview of Regularization Techniques in Deep Learning (with Python code)
https://www.analyticsvidhya.com/blog/2018/04/fundamentals-deep-learning-regularization-techniques/ 

[19] 深度学习中的Normalization模型 - 知乎
https://zhuanlan.zhihu.com/p/43200897

[20] 深度学习(十九)——FCN, SegNet, DeconvNet, DeepLab, ENet, GCN - antkillerfarm的专栏 - CSDN博客
https://blog.csdn.net/antkillerfarm/article/details/79524417

[21] 關於影像辨識,所有你應該知道的深度學習模型 - Steven Shen - Medium
https://medium.com/@syshen/%E7%89%A9%E9%AB%94%E5%81%B5%E6%B8%AC-object-detection-740096ec4540

[22] [NLP] 秒懂词向量Word2vec的本质 - 知乎
https://zhuanlan.zhihu.com/p/26306795

-----

[23] AI從頭學(目錄)
http://hemingwang.blogspot.com/2016/12/ai_20.html

[24] LeNet Lab(目錄)
https://hemingwang.blogspot.com/2019/04/lenet-lab.html

[25] 30 Topics for Deep Learning
http://hemingwang.blogspot.com/2019/04/30-topics-for-deep-learning.html

[26] Machine Learning
https://hemingwang.blogspot.com/2019/04/machine-learning.html

[27] Mathematics
https://hemingwang.blogspot.com/2019/04/mathematics.html

[28] Deep Learning Highlight
http://hemingwang.blogspot.com/2019/02/deep-learning-highlight.html

[29] AI Seminar(目錄)
https://hemingwang.blogspot.com/2019/01/ai-seminar.html

No comments: