面向統一的AI神經網路架構和預訓練方法
導讀 本文是胡瀚老師於 2022 年 12 月 17 日在 DataFunCon 線上大會上的直播分享的文字稿,全文內容在不改變原意的基礎上整理而成。
報告主要包括以下三個方面:
1. NLP 和 CV 的大統一趨勢及其背景
2. 神經架構融合
3. 預訓練融合
分享嘉賓|胡瀚 微軟 Principal Research Manager
編輯整理|羅傲雪 慧科
出品社群|DataFun
01
近幾年,自然語言處理(NLP)和圖形影像領域(CV)在神經網路架構和預訓練上正在經歷一個趨向統一的融合趨勢。
1. 神經架構融合趨勢
Transformer 的神經網路架構率先在自然語言處理(NLP)領域取得了很好的效果,併成為該領域的主流神經架構。從 2020 年下半年開始,計算機視覺領域也開始將 Transformer 應用到各種視覺問題中,並取代此前的卷積神經網路,成為新的主流神經架構,其中谷歌的 ViT 以及我們小組提出的 Swin Transformer 是兩個比較流行、比較有代表性的視覺 Transformer 網路。
2. 預訓練融合趨勢
除了神經架構外,不同 AI 應用領域的預訓練方法也在趨向統一。
其中涉及到的技術主要是掩碼語言/影像建模(Masked Language/Image Modeling)方法,它們透過預測隨機遮掩區域的自監督任務來預訓練網路引數。這種方法首先在 NLP 領域證明了其效果(諸如 GPT、BERT 等),目前在影像領域也被證明非常有效(諸如 Beit、MAE、SimMIM 等)。
這是一個很有意思的事情,所謂分久必合,合久必分。如圖所示這些不同的問題在最早期的時候是被一起考慮的,後來發現直接一步到位解決問題比較困難,於是有了很多不同的領域或者 community,例如 ACL,CVPR 等,如今各個 community 又在走向統一,神經架構和學習正規化趨同,隨著 ChatGPT 更進一步發現瞭解決 NLP 問題的路徑,也許以類似的方法去解決更通用的 AI 問題已不再遙遠。
3. 腦科學的啟發
AI 從上個世紀 50 年代開始起步,在幾乎同一時間,腦科學或者說認知神經科學也真正起步。這個領域也有很多很好的進展,其中一個發現就是人處理不同智慧問題的機制很可能是相似的。
譬如人腦處理不同智慧的神經結構就是比較一致的。大腦負責處裡不同智慧的神經器官主要在新皮質,也就是上面左圖中褶皺的部分,它分為很多功能區(上圖左示意圖),後腦勺負責處理視覺訊號,頂葉負責處理運動、觸覺等智慧,顳葉的皮質又分為處理聲音、處理語言等不同區域,以及前額葉區域主要負責更高階的智慧,例如決策、認知等等。儘管新皮質由不同的功能區在負責各種各樣的智慧,但其神經結構其實是非常統一的,把褶皺的新皮質展開,就像一個餐廳布,而幾乎所有地方的剖面結構在顯微著色下觀察幾乎是一樣的,都是有一個很清晰的六層結構。
事實上,這種統一的結構對人類的生存和發展是很關鍵的,這樣就不需要經過幾百萬年的漫長時間去進化出一個新的智慧,而是依靠同樣的神經結構很快就能適應新的環境或者學會一個新的技能。
上面講了神經結構,下面來看人腦如何學習。
現在也是有很多研究表明人的學習可能也是一個非常統一的機制,也就是透過預測的方式來學習。這裡有個關鍵器官:丘腦。
這裡舉的是一個視覺學習的例子,透過視網膜接收訊號,視覺神經訊號會先經過丘腦,到大腦皮層後再返回到丘腦,這個過程就是在預測下一幀是什麼,透過預測的畫面和真實畫面的比較,就可以進行學習,這和現在比較流行的 GPT 方法非常相似。
除了視覺,觸覺、聽覺和語言理解很可能也是基於同樣的 prediction 和 compare 機制來進行學習的,這就是一種統一的預訓練正規化。
4. 大一統帶來的實用上的好處
關於統一的好處,這裡列舉三點:
① 第一、技術和知識共享:技術和知識共享能讓不同領域都有更快的進步,對於 NLP 和 CV 領域來說,深度學習革命的早期主要是 CV 技術在影響 NLP 領域,而最近兩年 NLP 領域進展迅速,很多很好的技術被 CV 領域所借鑑。
② 第二、促進多模態應用:技術的統一也在催生全新的多模態研究和應用,例如實現零樣本物體識別能力的 CLIP 模型、能給定任意文字生成圖片的 DALL-E 模型等等。
③ 第三,實現降本增效:我們舉晶片的例子,以前設計晶片時需要最佳化不同的運算元,例如卷積、Transformer 等,而現在晶片設計只需要最佳化 Transformer 就可以解決 90% 以上問題。Nvidia 最新的 H100 GPU 的一個主要宣傳點,就是可以將 Transformer 的訓練效能提升 6 倍。
NLP 和 CV 基本技術的趨同,還能帶來一個好處,那就是在 NLP 領域大模型所表現出的“湧現”特性,也有可能在不久的將來就會出現在 CV 領域。當然現在還不能完全確定,但無疑將是計算機視覺領域努力的目標,我們也非常期待見到這方面的進展。
02
AI 神經架構的統一
1. 神經架構邁向統一之路
在早些年,不同 AI 領域的主流模型是很不一樣的。例如視覺領域通常會用卷積網路,NLP 通常會用 Transformer,而在社交計算領域,通常會用圖網路來建模。
上圖展示了 NLP 領域或者序列資料的模型變遷。
最早比較有名的工作是 LSTM,這個模型流行了很多年,直到 2013 年 Deep learning 在語音識別取得突破的時候,還是採用這樣一種建模方法,只是網路層數變得更深;2014 年的 GRU 模型在機器翻譯問題上用一個相對簡單的結構取得了比 LSTM 更好的效果;2015 年,Attention 機制首次在機器翻譯問題上證明非常有效;這幾年模型變遷很快,直到 2017 年 Transformer 出現,NLP 領域的建模才穩定下來。
再看計算機視覺領域神經結構的變遷,它的發展相對簡單,整個領域一直主要以卷積操作來構建神經網路。早期比較有影響力的事件是 Yann LeCun 等人將其應用在手寫數字識別中,取得了廣泛關注。在深度學習時代的一系列著名網路都是以卷積運算元為基礎的。
為了統一 NLP 和 CV 的神經網路,很自然會有以下兩個思路:
① 第一,把 CV 的建模方法用到 NLP 領域。
② 第二,把 NLP 的建模方法應用到 CV 領域。
先看將卷積應用到 NLP 的嘗試。
其實在 Transformer 之前的一個月,Facebook 就曾嘗試把 CV 領域主流的卷積運算元應用到 NLP 裡(ConvSeq2seq),當時在機器翻譯問題上取得了突破,只是 1 個月以後就被 Transformer 超越,所以沒有引起很廣泛的關注。直到現在,Transformer 由於一些很好的性質,仍然是 NLP 領域中一種絕對主導的網路結構。
再看 Transformer 或者 Attention 模組應用到 CV 的嘗試。
早些時候大家主要把 Attention 機制用到各種 CV 問題裡去,取得了些成功,例如 2017 年底的 NL-NET 以及我們小組提出的關係網路(RelationNet)均在一些特定視覺問題上取得了很好的應用。
最近的工作開始把 Transformer 作為整體應用到 CV 裡,其中比較流行的有谷歌的 ViT、我們小組的 Swin Transformer,以及同期的一些工作。
我們看下谷歌的 ViT 模型。
它的做法很簡單,就是把影像切塊切成不重疊的塊,將每個塊當作一個 token,於是就可以將 NLP 裡的 Transformer 直接應用於影像分類。
這一模型在 CV 的一個重要 benchmark ImageNet-1K 分類任務中取得了新的記錄,比此前最好的模型好了 0.1 個百分點,儘管提升不算多,但足夠引起領域的關注。
這種建模相比 CNN 有兩個明顯的好處:
① 第一,相比 CNN 這種基於靜態模板的網路,Transformer 的濾波模板是隨位置動態的,可以更高效地建模關係。
② 第二,可以建模長程關係(Long-term relationship),可以建模遠距離的 token 之間的關聯。
我們組的工作 Swin Transformer 則進一步證明了基於 Transformer 的框架能在更廣泛的視覺問題中取代傳統的卷積神經網路方法(CNN),例如語義分割(對影像裡的每個畫素作分類)、物體檢測(定位到感興趣的物體)等這些視覺領域很重要的問題,而且是大幅超越。
此後 Transformer 在視覺領域開始廣泛的應用開來。
2. Swin Transformer
Swin Transformer 的神經架構和傳統的視覺神經網路一樣分為四個階段,每個階段具有不同的影像解析度,都用 Transformer 模組組成。現在回頭來看這個工作,主要是三方面的貢獻:
① 提出將 Transformer 和 CV 領域先驗知識的設計思想;
② 提出了一種可移位不重疊視窗,不重疊視窗的設計至今仍然是處理高解析度視覺任務必不可少的一個技術;
③ 研發了使用於視覺 Transformer 訓練的一系列技巧,並做了很好的開源,從而加速了整個研究社群對於視覺 Transformer 的研究。
先來看下視覺訊號跟文字訊號的區別:
① 首先,視覺演算法需要尺度不變性。視覺演算法需要識別不同大小的物體(一隻貓不論大小都應該把它識別成一隻肥貓),但在文字里我們只會說,“我是一隻肥貓”,不會講“我是一隻肥肥貓貓”。
② 第二,視覺訊號是連續的。影像中相鄰塊的顏色和紋理大機率是相似的,而文字則是離散的。
③ 第三,視覺演算法需要滿足平移不變性。影像中不同位置的物體都應能被識別出來。而詞的位置則對文字的理解更為重要。
第二點是我們提出的移位不重疊視窗技術:
① 傳統的滑動視窗方法(左圖),對不同位置都取以該位置為中心的視窗將注意力計算限制在視窗內,這樣一個影像裡面就會有幾千個視窗,這種方法對 Transformer 的硬體實現不太友好。
② 我們的移位視窗方法(右圖),把視窗變成不重疊,這樣整個影像的視窗數變成了幾十個,且非常利於平行計算。為了構造視窗與視窗之間的聯絡,在下一層將視窗做移位操作,乍一看會破壞視覺訊號的連續性假設,但實驗證明該策略非常有效。
最後一個貢獻是我們做了很好的開源,很榮幸幫助到了後續針對視覺 Transformer 的研究。
此外,Swin Transformer 中通用 Transformer 計算單元和領域相關的先驗的設計原則是通用的,可能適合解決各種 AI 模態的建模問題。
具體來說,先驗部分可以用圖中是否有連邊來刻畫,沒有連邊就表示先驗上不用刻畫它們之間的聯絡,Swin Transformer 就是去掉了較遠的節點之間的聯絡,所謂區域性先驗。利用這種引入領域先驗的建模思想,我們同事開發的 Graphormer 在 KDD 的一個比賽(預測分子圖的量子效應)中拿到了冠軍。
回頭看為什麼 Transformer 能夠成為統一各種 AI 問題的神經結構的選擇,我認為,主要就是來源於它的通用性,具體來說,是兩個方面:
① 一方面是圖建模的通用性,圖可以建模世間萬物和所有概念(包括實體概念和抽象概念)以及它們之間的聯絡,Transformer 就可以看作一個基於圖的神經網路。
② 另一方面是投影比較法的通用性,它在進行關係建模時,會先把不同節點的特徵投影到同一個子空間去比較相似度,這樣就可以構建任意異構輸入節點之間的聯絡,譬如,文字和影像這樣很不一樣的訊號,都可以透過投影找到一個子空間,使得在子空間裡面它們是可以比較的。
3. Swin Transformer V2
下面我們介紹小組研發的第二代 Swin Transformer,我們相信 CV 和 NLP 沒有本質區別,因此基本上沿著 NLP 領域的成功之路來探索視覺神經網路的未來。
過去幾年 NLP 領域最大的一個發現,就是擴充套件模型大小對效能很關鍵(如圖 lambda 語言建模任務在模型從一個億運到五千億時,準確率從 40% 提升到 80%),甚至出現湧現(emergence)的能力。
而對比計算機視覺和 NLP 後會發現模型規模的差距很大(灰色 NLP,藍色視覺),視覺模型和 NLP 模型的大小差了 300 倍,和人腦相差 10 萬倍。
Swin Transformer V2 是我們在 2021 年年底的一個工作,是當時全世界最大的一個稠密視覺模型,結果也是符合“模型越大效果越好”的結論的。
我們在四個主流的 benchmark 上取得了新的記錄(SOTA),分別是物體檢測、語義分割、影片分類、影像分類。
和其它 10 億級別的視覺模型(谷歌的 ViT-G 和 CoAtNet-7)對比,我們的模型大了 25%,需要的標註資料少了 40 倍,訓練 cost 小十倍,而且能應用到更廣泛的視覺問題中。
其中的關鍵就是我們用了一種新的基於掩碼影像建模(MIM)的預訓練方法,該預訓練方法是自監督的,完全不需要標註資料。這種預訓練方法和以前基於影像分類或者影像-文字對的預訓練方法相比,大大降低了對資料量的要求。例如,前兩種預訓練方法,往往需要 10 億級別的圖片,才能訓練出 10 億引數規模的模型,而我們的預訓練方法,只需要百萬、千萬級別就行。而核心的 insight,就是新的預訓練任務編碼的資訊量要大的多:影像分類任務即使類別數達到 10 萬,每個圖片所編碼的資訊量也就在 15 個 bit 左右,影像-文字對的形式稍多,但也僅有 20-30 個 bit 左右,而基於掩碼影像建模的方法,其所蘊含的資訊量幾乎包含了整個圖片的資訊,預計遠大於 10 萬 bit,而這也是它能用更少的資料驅動更大模型訓練的主要原因。
第二,視覺任務不同於 NLP 任務的一個特點是預訓練與下游任務解析度的差別很大。
我們提出了從離散相對位置偏置到連續相對位置偏置的方法,能更好地在不同解析度之間遷移。
第三,我們發現視覺任務(例如影像分類或者影像-文字對比任務)比文字任務更容易不穩定,這裡示意圖顯示的是,每次 Attention 後 Variance(方差)可能會擴大,經過兩層之後,Variance 就從 1 變到 60 多。我們的改進是提出了一種新的 Attention 計算方法,和一種新的配置 Layer Norm 層的方法,這樣數值上穩定了許多。
透過這些改進,我們訓練了一個擁有 30 億引數的 Swin-V2 模型,重新整理了多個代表性任務上的效能。當然,它和 NLP 模型的差距還有 180 倍,所以仍然任重道遠。
除了稠密大模型外,另一種能更快擴充套件模型規模的方法是採用稀疏模型,人腦就是一個典型的稀疏模型的例子。
稀疏模型目前領域最好的實踐是混合專家模型(MoE),針對這一模型,我們開發了Tutel 系統,在單層神經網路上取得了 5 倍左右的效能提升, 這一系統被 Meta(facebook)所採用(利用 Azure 雲服務),相比於它們自己的框架有 40% 的提速。另外,我們開源了用於視覺問題的 Swin-MOE 模型和訓練指令碼。
03
AI 預訓練方法的融合
1. 視覺預訓練方法的發展歷程
預訓練方法對於計算機視覺的發展非常重要,這一技術使得深度學習模型被成功應用到只有少量或中等規模的標註資料(幾百或幾千)上,例如影像細粒度分類、物體檢測、語義分割等等。
上圖展示了視覺預訓練方法的變遷。
最早是 Auto Encoder 透過一個重構任務逐層訓練了一個相對比較深的網路,這也被認為是深度學習革命的開端之一;2012 年,AlexNet 在影像分類任務中取得了里程碑突破,深度學習技術開始廣泛應用於視覺問題;2019 年,基於對比學習的自監督方法在一些下游任務中超過了有監督,當然,當時這一方法在大模型預訓練方面不是很成功;2021 年的 CLIP 方法例如億級別的影像-文字對進行預訓練,在任意類別識別方面取得了重要突破;接下來是掩碼影像建模方法 BEIT,以及其後的 MAE/SimMIM 方法,這一類方法和 NLP 中的方法很相似,我們證明,它同樣可以和在 NLP 領域裡一樣,用來驅動視覺大模型的訓練。
這一預訓練任務也非常簡單,就是把影像中的一些區域掩蓋住,然後訓練網路用剩餘的影像部分來預測蓋住部分的畫素值。
我們主要嘗試回答了下面三個問題:
① 一是,如何構造一個最簡單的 MIM 的預訓練任務。
② 二是,這一預訓練任務能否從更大的資料中獲益。
③ 三是,它能否啟發一些其它方法。
2. 極簡 MIM 預訓練框架
我們嘗試了一個最簡化的設計:
① 掩碼策略:用較大的 patch size 隨機掩蓋影像塊。
② 預測頭:用幾乎是最輕量級的線性預測頭。
③ 預測目標:把分類任務變成預測畫素值。
④ 編碼器:希望能夠預訓練不同的視覺編碼器(Vi,Swin,ResNet 等)。
⑤ 解碼器:稀疏(MAE)和稠密解碼器(SimMIM)之間,更推薦稠密解碼器(訓練時間足夠長時效果更佳)。
在掩碼策略裡,我們發現隨機掩碼效果反而幾乎是最好的,而且塊的大小很重要(32x32 最佳)。
我們還發現指標 AvgDist 能很好地反映預訓練最終的效果,也就是每個不可見畫素離它最近的可見畫素的距離的平均,實驗表明 AvgDist 在 15 到 20 之間時,下游任務的表現最佳,這也解釋了為什麼掩碼塊大小為 32x32 時會有整體最佳的效果。
上圖說明我們對不同的神經架構是具有通用性的,其中包括 ViT、Swin、ResNet 等。
這裡右圖中黑色曲線表示有監督預訓練在不同大小的模型上的表現,紅色曲線是我們的方法的表現,模型越大,我們的預訓練方法帶來的提升越大。
最後看一下視覺化,當掩蓋住一半的區域的時候(左一組圖),可以很好的去恢復遮蓋部分;當遮蓋幾乎整個物體的時候,還能推理出物體來;而全部遮蓋時,它將不能恢復該物體,這說明模型不是透過記住,而是透過推理來恢復影像畫素值的。
3. 預訓練方法能否有效利用大資料
這是 OpenAI 發現的一個重要定律,即擴充套件定律(Scaling Laws),這一定律表明,計算、資料量和引數量指數增加時,模型的效能線性增加,而且至今沒有發現飽和的趨勢。
我們針對視覺的預訓練方法 MIM 做了類似的研究,發現計算和引數量是遵循這個規律的,但是資料量還不是很明晰,這可能是因為我們的模型還不夠大,希望將來有更多資源時,可以做進一步探索。
4. 對其它預訓練任務的啟發
MIM 預訓練方法的成功,啟發我們去改進此前的預訓練模型的微調效能,同時又能保持該預訓練模型原有的能力。我們發現一種特徵蒸餾方法能有效實現這一效果,就是將原先預訓練好的模型的特徵圖,蒸餾到一個新的學生網路中,這一學生網路將既能保持原先模型的能力,又能在微調效能上取得顯著提升。
這種方法,不僅對中等規模模型有效,對大模型也是有效的。也是基於這一方法,我們在語義分割和物體檢測上均重新整理了新的記錄。
最後做下總結,不同 AI 任務在架構和預訓練上有著統一的趨勢,這個趨勢在 NLP 和 CV 上可以略窺一二。這一趨勢還在繼續,特別是在 NLP 領域的 ChatGPT 模型在某種意義上基本解決了 NLP 問題後,CV 的問題也有望在不遠的將來得到有效解決。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024922/viewspace-2950662/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 3.3 神經網路的訓練神經網路
- 機器學習之訓練神經網路:最佳做法機器學習神經網路
- 深度神經網路的分散式訓練概述:常用方法和技巧全面總結神經網路分散式
- 用神經網路訓練一個文字分類器神經網路文字分類
- 如何應對訓練的神經網路不工作?神經網路
- 用神經網路測量訓練集的半衰期神經網路
- 訓練自己的Android TensorFlow神經網路Android神經網路
- 使用tf.estimator.Estimator訓練神經網路神經網路
- 深度神經網路為何很難訓練?神經網路
- 《神經網路和深度學習》系列文章三十八:深度神經網路為何很難訓練?神經網路深度學習
- 談談如何訓練一個效能不錯的深度神經網路神經網路
- Batch Normalization: 如何更快地訓練深度神經網路BATORM神經網路
- 從零開始:教你如何訓練神經網路神經網路
- 訓練神經網路時如何確定batch size?神經網路BAT
- umich cv-5-1 神經網路訓練1神經網路
- umich cv-5-2 神經網路訓練2神經網路
- 迴圈神經網路設計同樣可以使用預訓練詞“嵌入”神經網路
- 文字生成神經網路架構發展神經網路架構
- 一窺Habana的推理和訓練神經處理器
- Yelp訓練了一個神經網路來debug,然後就被這個AI刪庫了神經網路AI
- 神經網路訓練的三個基本概念Epoch, Batch, Iteration神經網路BAT
- MLer必知的8個神經網路架構神經網路架構
- 迴圈神經網路之embedding,padding,模型構建與訓練神經網路padding模型
- 【python實現卷積神經網路】開始訓練Python卷積神經網路
- AI在用 | 一個超級提示,用Claude 3生成神經網路架構動畫AI神經網路架構動畫
- 使用 PyTorch 構建和訓練一個卷積神經網路進行影像分類任務PyTorch卷積神經網路
- 機器學習必知的8大神經網路架構機器學習神經網路架構
- 從網路架構方面簡析迴圈神經網路RNN架構神經網路RNN
- 如何入門Pytorch之四:搭建神經網路訓練MNISTPyTorch神經網路
- 【機器學習】李宏毅——類神經網路訓練不起來怎麼辦機器學習神經網路
- 深度學習與CV教程(6) | 神經網路訓練技巧 (上)深度學習神經網路
- 神經網路之反向傳播訓練(8行程式碼)神經網路反向傳播行程
- 如何用C++在TensorFlow中訓練深度神經網路C++神經網路
- 對.net系統架構改造的一點經驗和教訓架構
- 關於訓練神經網路的諸多技巧Tricks(完全總結版)神經網路
- 一個故事看懂AI神經網路工作原理AI神經網路
- 祕籍在手,訓練不愁!特斯拉AI負責人Karpathy的超全神經網路訓練套路AI神經網路
- 使用人工神經網路訓練手寫數字識別模型神經網路模型