MLP is Best?
眾所周知,CNN是計算機視覺的首選模型,最近還流行用vision transformer做視覺,誰又能想到用多層感知機(MLPs)去做圖像相關的模型呢?《MLP-Mixer: An all-MLP Architecture for Vision》這篇論文就用了基于MLP的框架,依然取得了很高的分類精度。
MLP-Mixer簡介
MLP-Mixer不用卷積,也不用attention,完全基于multi-layer perceptrons(MLPs),僅依賴最基本的矩陣相乘,數據輸出的改變(reshape,轉置),和標量的非線性。上圖展示了MLP-Mixer的宏觀框架。說好的MLP,為啥看著這么像transfromer。
從上圖我們可以看到,一張圖片會被等分切成多個patchs,然后每個patch會有很多channels,最終一張圖片的輸入就是patches * channels的一張表。通俗點說,如上圖左下角那張圖片,假如它是9 * 9 * 3 ,會被劃分成9個patch,每個patch就是3 * 3 * 3 = 27,所以這張圖片的輸入就是 9 * 27,如果輸入多張圖片,就是batch_size * 9 * 27。
從圖中,我們可以看到Mixer使用兩種類型的MLP層,channel-mixing MLPS和token-mixing MLPs。channel-mixing MLPs使得channel內之間有交互,而token-mixing MLPs使得不同位置(不同patch)之間有交互。這兩種類型的MLP交錯使用使得輸入各個維度之間不斷學習交叉特征。
如論文所說,channel-mixing就相當于使用1維卷積,對于token-mixing就可以看作為一個單通道的depth-wise卷積。CNN并不能看作是Mixer的特例,要遠比這種結構復雜。
Mixer架構
其實Mixer架構非常簡單,看上面的圖解就已經很清楚了。Mixer把一個圖片拆解為S個patchs,每個patch之間并無重疊。
每個patch會被同一個矩陣做線性映射為X(S * C),然后輸入到上文所說的多個Mixer層中,先是遇到token-mixing MLP block,對矩陣每列做映射,再是通過channel-mixing對每行做映射,這里映射是共享embedding的。每個MLP層都包含兩個全連接和一個非線性函數。Mixer layers用公式定義如下:
每層mixer的輸入都是同樣尺寸的table,這個和transformer很類似,和CNN就很不同了。Mixer也沒有使用position embedding,因為token-mixing MLPs對位置已經很敏感了。最后Mixer用了一個很標準的pooling層和全連接層做分類任務。
實驗
從實驗中我們可以看到mixer在精度上離vit模型已經相差不多了,論文還對比了pretrain后的效果對比,感興趣的可以看原文。
MLP-Mixer: An all-MLP Architecture for Vision.
https://arxiv.org/pdf/2105.01601.pdf
代碼路徑:https://github.com/google-research/vision_transformer
MLP is Best?總結
以上是生活随笔為你收集整理的MLP is Best?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 炼丹侠必知的9大池化操作汇总
- 下一篇: 微信视频号推荐算法上分技巧