RNN 和 CNN 兩大 model 講解完,也知道他們常分別用在 NLP 和 CV 領域中。但其實文字也有結構,運用 CNN 能幫助捕捉結構上的特徵;而圖像也有序列, 和 RNN 結合可以完成時序方面的任務。
今天就要來介紹幾個 CV x RNN、NLP x CNN 實例。
CV 跟 NLP 重疊的任務很多,所以結合 RNN 的例子滿多的,包括 image captioning、visual question answering 等等。此外 video 相關任務、手寫字順序等等也包含了時序特徵,也都可以用 RNN 捕捉時間關係。
下面分別介紹典型的 CV x RNN 任務:image captioning,以及稍微有趣一點的進階應用:visual language navigation 的架構設計。
(Xu et al. 2016) Show, Attend and Tell: Neural Image Caption Generation with Visual Attention
這篇 paper 的任務和架構都很簡單,目標是給定圖片,輸出圖片的文字描述。
架構如下:
—— Image captioning model。
首先當然用 CNN 提取圖片特徵。提取完之後的 hidden state 會進入 RNN decoder 產生一句描述。
Model 中自然也加入了 attention,因為在 decoding 的每一個輸出字都跟圖片中的不同部位有關,所以需要把注意力放在不同位置。這也是 attention 為什麼對 model interpretation 幫助很大:
—— Attention over time。上下兩排分別用了不同的 attention 機制。
這樣的架構算是早期滿典型的設計。接下來介紹有趣一點的應用。
Visual Language Navigation (VLN) 目標是讓一個機器人根據文字指令結合他所看見的世界找到下一個 action。
因此找出 action 需要三個要素:文字分析、圖像分析、和機器人本身的歷史軌跡。這個 cross-modal reasoning navigator 大致架構如下:
—— Cross-modal reasoning navigator at step t。
我們來看看裡面包含的幾個元件:
Vision encoder
最上方 vision encoder 找出當下所見的 encoding,paper 中是用了 pre-trained CNN 來 encode。
Trajectory encoder
中間綠色區塊,本身是 LSTM encoder。 是當前的 history context,是根據之前的 history context、前一步的 action、和當前所見到的 vision encode 而成的:
這邊 也是經過 attention 取得。
Language encoder
左邊藍色區塊,也是 LSTM encoder。
將文字 encode 後,會和 vision 經由 attention 結合成 ,來知道 vision 中的哪些地方和指令比較有關。也會和 history context 經由 attention 結合成
,知道指令中哪些文字和之前做過的事和現在看到的東西最有關。
Action predictor
中間紅色區塊的 action predictor 最後根據 、
、和
選擇最佳的動作。
除了圖像中的時序外,文字中也含有架構。比較直覺的例如中文字的結構其實跟字意相當有關係。但這邊我們介紹兩個英文任務,一個是在英文字中抓取 character-level embedding,另一個是利用 CNN 抓取句子中的局部訊息來做 classification。這兩篇中展示的也是比較常用的技巧!
(Kim et al., 2015) Character-Aware Neural Language Models
英文字雖然不像中文字有明顯結構,但其實還是有一些 pattern,最常見例如 -ly、-ing 字尾跟字意就會很有關係。這時候可以利用 CNN 來提取字根字首字尾的這些 pattern 來豐富最後的 word embedding。
—— Language model with character-level embedding。
Paper 中的 model 把字中的每個 charcter embedding 合在一起成為 matrix,並透過 convolutional layer 提取字中的局部特徵,經過幾層後,最後形成 word embedding 進入主要的 LSTM model。接下來的故事就跟一般 NLP x RNN 的 model 差不多了。
而用 character-level embedding 的好處是,parameter 量減少了 60%,但 performance 卻能表現得跟 state-of-the-art 一樣好,甚至能在 morphological-rich(形態豐富)的語言上表現得更好。
(Conneau et al., 2017) Very Deep Convolutional Networks for Text Classification
接下來介紹這篇用 CNN 做 text classification,主要是在這項任務裡,文字中的時序特徵對預測來說並不是特別重要,因此能產生跟 RNN 一樣甚至更好的效果。也因為使用 CNN,parallel computing 能讓訓練速度提升許多。
Paper 中的 model VDCNN 架構如下:
—— VDCNN 架構。
圖中的 convolutional block 是 Temp Conv - Temporal Batch Norm - ReLU - Temp Conv - Temporal Batch Norm - ReLU
的幾層 layer。
首先整個 model 也是 character-level,input 是 s 個 character,每個 character embedding 大小為 16,所以疊在一起後 input matrix 是 。
接著進入所謂 Temp Conv (Temporal Convolution),其實就是上面介紹的把 convolution 作用在 input matrix 上。因為是 convolve over temporal location 而不是 spatial location,所以稱作 temporal convolution。
之後一連串的 conv layer 提取時間和結構上的特徵。這邊每兩個 block 就 pool 一次,主要是讓 output 變成一半的大小,也就是 temporal resolution 減半,增加之後幾層每個 hidden node 的 receptive field,同時不讓運算負擔增加 [4]。而 temporal resolution 減半的同時,我們也讓學習的 feature(i.e. filter 數量)加倍。
幾層之後就會像這樣:
—— A stack of temporal convolution layers。[4]
Dilation 可以從 [5] 視覺化理解!
最後進入 fully-connected layer 做 classification 預測結果。
這樣的架構搭配 residual connection 可以訓練得很深,尤其對比較大的 dataset 訓練結果更好。也因此 paper 中用這個 model 在很多 text classification 任務上取得了超越 state-of-the-art 的成績。
(Li et al., 2019) VisualBERT: A Simple and Performant Baseline for Vision and Language
Day 14 我們介紹過 BERT,一個建立在 transformer 之上的架構。利用 BERT,我們甚至可以同時捕捉文字和圖像的種種關係。
VisualBERT 就是一個能用在 vision and language task 的 pre-trained model。他的架構大致如下:
—— VisualBERT 架構。
在 BERT 中 input 是兩個句子。而 VisualBERT 為了捕捉文字與圖像之間的關係,input 一個是句子,一個是圖像。圖像部分,主要部分會先用 object detector 偵測,取得該 bounding box 的 feature embedding,之後和先前介紹的一樣,結合 segment embedding 和 position embedding。
BERT 中訓練的兩個任務,也都變得跟 image 相關:
而 VisualBERT 也在四個 visaion and language task 中取得了持平或更好的成績,顯示 BERT 也能和 vision 結合得很好。
這篇裡我們舉了幾篇 paper 來介紹一些 CV 和 RNN、NLP 和 CNN 結合的架構,以學習文字和圖像中都會存在的結構和時序方面的關係。最後也用 VisualBERT 認識了 transformer 與文字和圖像的結合。
而這些 paper 的好結果也證明根據任務的特性思考最適合的架構,才能達到最好的效果。