iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
AI & Data

AI白話文運動系列之「A!給我那張Image!」系列 第 29

AI研究趨勢討論(三)--強強聯手打造新世代里程碑(CNN與ViT結合)

  • 分享至 

  • xImage
  •  

前言

我們之前在討論CNN架構以及各種CNN模型的時候,有提到CNN因為幾項獨特的優勢,成為了電腦視覺或影像處理中的霸主,然而,從2017年Google提出的「Attention Is All You Need」開始,霸主寶座換人了,論文(https://arxiv.org/pdf/1706.03762.pdf)裡面介紹了一種使用注意力機制的模型架構,而這樣的架構後來被衍伸使用在影像任務上,也就是大名鼎鼎的Vision Transformer,簡稱ViT(https://arxiv.org/pdf/2010.11929v2.pdf),今天就讓我們從注意力機制開始,談談ViT是甚麼,以及現在熱門的發展趨勢:CNN與ViT的結合。

先備知識

  1. 對捲積運算有基礎的認識(可以回顧這篇的內容:https://ithelp.ithome.com.tw/articles/10323076 )
  2. 了解甚麼是捲積神經網路(Convolutional Neural Network)(可以回顧這篇的內容:https://ithelp.ithome.com.tw/articles/10323077)

看完今天的內容你可能會知道......

  1. 甚麼是注意力機制
  2. 甚麼是Transformer架構
  3. 甚麼是ViT架構,Transformer如何用在影像上
  4. CNN與ViT怎麼結合

一、注意力機制

  • 在CNN的世界中,我們通過捲積核來尋找輸入影像當中是否存在感興趣的「局部特徵」,雖然通過調整圖片的大小,可以讓捲積核「看」到不同尺度的特徵,但是這樣的做法有兩項主要的問題:單純考慮局部的話,是否會損失「全局(Global)」的資訊?對所有局部資訊都一視同仁的話,是否會無法聚焦在真正重要的資訊上?
  • 這就是我們要引入注意力機制的原因,就像人類一樣,我們觀察事物的時候,會「聚焦」在某些特定的東西上,也就是把注意力集中在特定的位置。聽起來有點難懂,是時候再把我們可愛的吉祥物叫出來示範了:
    https://ithelp.ithome.com.tw/upload/images/20231014/20163299KmZL5ZllPI.png
  • 上圖左邊是正常的影像,右邊是注意力的示意圖,越紅的地方代表我們的注意力越高,越冷色系的地方則是注意力越低。假設我們今天需要判斷一個動物是不是一隻狗,我們很有可能會關注牠的臉型、嘴巴以及耳朵等部位,換句話說,在這些地方我們的注意力會特別高,因為這些地方對我們的判斷來講是非常關鍵的資訊。
  • 現在我們已經知道注意力是甚麼了,那注意力機制又是甚麼呢?我們可以把注意力機制想像成是「對於所有的輸入資訊分配注意力的過程」,目的是讓我們不會一視同仁的處理所有輸入資訊。以上圖舉例的話就是,我們希望給定一張左圖,要得出像右圖的結果,中間的運算過程就是使用了注意力機制。
  • 接下來我們介紹最常使用的注意力機制(query-key-value attention),看看我們要如何從輸入資訊中得出每個資訊要給多少的注意力:
    https://ithelp.ithome.com.tw/upload/images/20231014/20163299fNciloDwqO.png
  • 在給定了Query, Keys, Values之後,我們先計算Query與所有Key的相似度,接著將這個結果當作權重分別乘上對應的Value計算加權總合,出來的結果就是我們需要的注意力數值。先不考慮上面的Query, Keys, Values是怎麼出來的,我們來思考一下這樣的過程是甚麼意思,假設我今天去圖書館想要看跟希臘神話有關的書(Query),那麼我要怎麼找呢?圖書館都會按照書籍的種類進行分群編號,對於我想要看的書,出現在「歷史」與「西洋文學」這種類別(Key)的機率特別高,而出現在「數學」、「中國史」等類別的機率會比較低,所以我應該要在「歷史」與「西洋文學」之類的類別之下的所有書籍(Value)中找到我需要的書。這個例子中,我想要找的目標就是Query,書籍的分類或編號就是Key,而對應分類或編號下面的書就是Value(或是也可以理解成圖書館中的所有書統稱Value,但是書籍都會分類編號,所以是同個意思),為了能夠找到我想要的書,我要先確認我的目標與不同類別或編號的相似度有多高,確定好之後,我應該更加關注那些相似度高的類別下面的書籍。
  • 記憶力機制(Attention)是相當複雜的東西,可以根據Attention中相似度的算法、計算的範圍、使用的模型架構、所用的輸入資訊等概念分成很多不同的類型,因為今天主要是要介紹Transformer,所以我們只介紹query-key-value attention,其他常見的類型可以看:https://zh.wikipedia.org/zh-tw/%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6 ,或是延伸閱讀參考書:https://d2l.ai/chapter_attention-mechanisms-and-transformers/index.html

二、Vision Transformer(ViT)

  • ViT源自於Google於2017年提出的Transformer架構:
    https://ithelp.ithome.com.tw/upload/images/20231014/20163299ErCMsVqEC3.png
    https://ithelp.ithome.com.tw/upload/images/20231014/201632991aSybSvAGZ.png
  • 基本上就是使用前面說的query-key-value attention機制,不過剛才並沒有說明Query, Keys, Values是怎麼來的,這邊我們就來談談這個問題。
  • 在Transformer架構中,我們使用的attention資訊來源自自己的輸入資訊本身,並沒有使用額外的資訊,這樣的做法叫做「self-attention」。甚麼意思呢?也就是上面的Query, Keys, Values都是通過某種方式,從輸入資訊本身「學」出來的。具體來說,就是我們通過模型學出三個不同的矩陣,r接著分別乘上輸入資訊之後就可以得到Query, Keys, Values
  • 另一點比較特別的部分在於Position Encodeing,這是因為我們剛剛在介紹注意力機制時,都把所有輸入資訊看成是同樣的東西,可是實際上,這些輸入資訊會因為先後順序、位置不同而帶有不同的重要性,所以在計算出所有資訊的注意力之前,我們應該把位置的資訊也加進去考慮。這麼說,我們應該要把位置的資訊疊加上去嘍?為甚麼途中的運算方式是直接加在一起呢?讓們用下圖來說明;
    https://ithelp.ithome.com.tw/upload/images/20231014/20163299SJC6uAHkEU.png
  • 左邊是原始self-attention的架構,其中的a是由輸入訊號x經過矩陣運算後得出來的。這時候我們可以嘗試把位置資訊P疊加在x的後面看看,也就是新的x',因為訊號維度增加的關係,我們的矩陣也要跟著變大,所以我們根據P的維度建立出另一個矩陣Wp,接著與原先的矩陣W組合在一起形成新的矩陣。然後我們就會發現,新的矩陣核心的訊號x'的運算結果恰好就是a+x
  • ViT的做法跟Transformer基本一致,不過輸入訊號的部分,因為我們希望透過注意力機制關注全局的資訊,所以我們將圖片切成不同的塊(Patch),將這些塊混合位置資訊之後送入注意力機制的判斷,如下圖所示:
    https://ithelp.ithome.com.tw/upload/images/20231014/20163299GOX5pbrj5K.png
  • 到這邊是不是又有些困惑了,既然ViT一樣是接受小區塊的輸入,為甚麼說他可以看到全局的資訊呢?因為我們把這些小區塊送入注意力機制之後,得出的結果仍舊是全圖的所有小區塊,不過,我們會知道每個區塊的注意力是多少,這樣讓們除了看到全局資訊的同時,也可以知道哪些細節是重要的。

三、CNN與ViT結合

  • CNN擅長處理局部資訊,所以在少量數據上能有好的表現,而ViT則剛好相反,擅長提取全局的資訊,在大量數據上能夠不錯的表現,那麼為何不結合兩種方法的優點開發新的架構呢?這就是目前很熱門的研究方向,我們稍微列出幾個來介紹一下:

    1. EdgeNeXt

    • 論文:https://arxiv.org/pdf/2206.10589.pdf
      https://ithelp.ithome.com.tw/upload/images/20231014/20163299w7H58rZXR0.png
    • 這篇論文是在2022年提出的,從架構上可以很明顯的看出來,作者將模型分成四個階段,後三個階段中,由CNN提取出來的特徵會交由注意力架構來處理,將較於傳統的作法,作者所提出的注意力機制也同時考慮到通道資訊,讓模型的效果優於其他同類型的模型。

    2. BoTNet

    3. Early Convolutions Help Transformers See Better

    • 論文:https://arxiv.org/pdf/2106.14881.pdf
      https://ithelp.ithome.com.tw/upload/images/20231014/20163299Go6Jf3w35d.png
    • 與上篇論文類似,這篇2021年由FB和UC Berkeley提出的論文也使用了非常巧妙的架構結合CNN與ViT,也就是先通過CNN提取資訊,將這些資訊輸入進ViT裡面。會這樣做是因為之前的研究有提到Patch Embedding的不穩定會導致ViT在訓練時梯度劇烈變化,而Patch Embedding在運算上可視為是捲積核非常大的捲機運算,也因為參數複雜且隨機性高,所以也容易導致模型的不穩定。既然這樣的話,我們可以通過好幾個小的捲積核來取代一個大捲積核,也就是作者們提出的架構(同樣的概念可以回顧LaNet-5到AlexNet的轉變:https://ithelp.ithome.com.tw/articles/10330192)。

四、總結

  • 今天的內容要說簡單可以很簡單,要說複雜也可以很複雜,注意力機制是個很好理解,也很常應用在日常生活中的機制,可是有時候太習以為常就會忽略它的存在,再來,要用數學或是電腦的語言來詮釋的話,又是一件令人困惱的事,如果對今天的內容比較陌生的話,我建議可以先忽略數學的部分,單純理解概念就夠了,日後如果要實做的話,也有Pytorch提供現成的工具可以使用,通過實際的程式碼或許會更好理解!

上一篇
AI研究趨勢討論(二)--遷移學習、領域自適應與領域泛化
下一篇
AI研究趨勢討論(四)--AI圖像生成(以Diffusion Model為例)
系列文
AI白話文運動系列之「A!給我那張Image!」30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言