看見的革命——CNN 如何教會機器理解影像

Ilya Sutskever 的閱讀清單有 27 項,其中 5 項關於卷積神經網路。更耐人尋味的是,AlexNet 那篇他自己就是作者之一。從 AlexNet 到 ResNet,從一場比賽的碾壓到 152 層深度網路的誕生,這是機器學會「看」的故事。

看見的革命——CNN 如何教會機器理解影像

本文是「Ilya Sutskever 推薦讀什麼」系列的第 4 篇。本系列解讀 OpenAI 共同創辦人 Ilya Sutskever 給 John Carmack 的傳奇閱讀清單,探索一位頂尖 AI 科學家眼中「90% 重要的東西」。

他推薦了自己的論文

Ilya Sutskever 的 27 項閱讀清單裡有三篇他自己參與撰寫的論文。其中一篇是 2012 年的 AlexNet,那篇在 ImageNet 競賽中以 10.8 個百分點碾壓所有對手、引爆整場深度學習革命的論文。作者欄上寫著三個名字:Alex Krizhevsky、Ilya Sutskever、Geoffrey E. Hinton。

在一份推薦給別人的學習清單裡放進自己的作品,這件事乍看有點微妙。但如果你從前三篇讀到這裡,答案其實很清楚。Sutskever 的清單不是在列「最厲害的論文排行榜」,而是在畫一張通往理解 AI 本質的知識地圖。篇 1篇 3,我們走完了理論層:壓縮即理解、複雜性先升後降、智慧可以被數學定義。這些都是抽象的原理。但原理終究要落地。AlexNet 就是「壓縮即理解」這個哲學在視覺領域的第一次大規模實證。卷積神經網路用少量的卷積核參數,從數百萬張圖片的原始像素中壓縮出視覺規律,然後靠這些規律來辨識一千個類別的物體。Sutskever 選它,不是因為懷舊,而是因為它是理論落地的第一聲響。

關於 AlexNet 本身的技術細節(兩張 GTX 580 顯示卡、ReLU 啟動函數、Dropout 正則化、在 Krizhevsky 父母家臥室裡訓練),我們在[〈一場比賽如何引爆一場革命:AlexNet 與深度學習的 Big Bang〉]({{< ref "20120901-alexnet-deep-learning-big-bang" >}})已經完整講過,這裡不再重複。這篇要處理的問題是:AlexNet 之後呢?如果卷積神經網路這麼強大,為什麼不直接把它疊得更深、更大?答案是:他們試過了,然後撞了牆。

網路越深,結果越差

AlexNet 有 8 層。VGGNet(2014)把它推到 19 層,GoogLeNet 用了 22 層。直覺上,更深的網路應該能學到更複雜的特徵,就像一個畫家多加幾層細節只會讓畫面更精緻。但實驗結果出乎所有人意料:當研究者試圖把網路推到 30 層、50 層甚至更深時,準確率不升反降。

這裡要特別澄清一個常見的誤解:這不是過度擬合。過度擬合的症狀是訓練集表現好、測試集表現差,代表模型「記住」了訓練資料但沒學到真正的規律。但深層網路的退化問題更詭異,它連訓練集的表現都不如淺層網路。一個 56 層的網路在訓練資料上的錯誤率,竟然比 20 層的網路更高。這在數學上說不通:如果你有一個 56 層的網路,理論上你可以讓其中 36 層什麼都不做(就是直接把輸入原封不動傳到輸出),這樣它至少應該跟 20 層的表現一樣。但實際訓練出來的結果比這更差,代表最佳化過程本身出了問題。網路有能力表達正確答案,但梯度下降找不到那個答案。

這個問題困擾了電腦視覺社群好幾年。各種技巧陸續出現試圖緩解。Batch Normalization 穩定了梯度,更好的初始化方法讓訓練更穩定,但都沒有真正解決「越深越差」的困境。直到 2015 年,微軟亞洲研究院的一個四人團隊提出了一個簡單到幾乎令人難以置信的解法。

何愷明的天才:只加一條捷徑

何愷明(Kaiming He)和他的同事張祥雨(Xiangyu Zhang)、任少卿(Shaoqing Ren)、孫劍(Jian Sun)在 2015 年發表了〈Deep Residual Learning for Image Recognition〉,也就是 ResNet 論文。這篇論文的核心想法可以用一句話說完:與其讓每一層學習「輸出應該長什麼樣」,不如讓每一層只學習「跟輸入相比,需要改變什麼」。

具體來說,傳統的神經網路每一層要學習一個映射 H(x),也就是「給定輸入 x,輸出應該是 H(x)」。ResNet 的做法是在每隔幾層的地方加一條「捷徑連接」(skip connection),讓輸入 x 可以直接跳過這幾層,和這幾層的輸出相加。這樣一來,這幾層要學習的不再是完整的映射 H(x),而是殘差 F(x) = H(x) - x,也就是「輸出跟輸入之間的差異」。最終輸出是 x + F(x)。

這個改變為什麼這麼重要?因為它讓「什麼都不做」變成了一個容易學到的選項。如果某些層確實不需要做任何變換,傳統網路需要學會一個恆等映射 H(x) = x,這對非線性的神經網路層來說並不容易。但在殘差框架下,這些層只需要學會 F(x) = 0,也就是輸出全部為零,而這對梯度下降來說輕而易舉。換句話說,ResNet 把「不改變」設成了預設值,每一層只需要決定「要不要在此基礎上做點修改」。

用一個生活化的類比:傳統網路像是每一層都要重新畫一幅完整的畫。ResNet 則像 Photoshop 的圖層。底層是原圖,每個新圖層只畫「跟上一層不一樣的地方」。如果某個圖層不需要任何修改,它就保持透明。這種設計讓你可以疊加非常多圖層而不會把畫面搞砸。

結果是驚人的。何愷明團隊成功訓練了 152 層的 ResNet,在 ImageNet 競賽上取得 3.57% 的 top-5 錯誤率,不僅遠超人類水準(約 5.1%),也拿下了 2015 年 ILSVRC 的冠軍。更重要的是,他們實驗性地測試了超過 1,000 層的網路,雖然性能沒有持續提升,但也沒有退化。殘差連接確實從根本上解決了深度問題。

這篇論文至今被引用超過 20 萬次,是整個深度學習領域引用數最高的論文之一。何愷明本人後來先後在 Facebook AI Research(FAIR)和 MIT 任職,持續在電腦視覺領域開拓新地。但他最被記住的貢獻就是這個看似簡單的想法:加一條捷徑。

Sutskever 連續集都選

Sutskever 不只選了 ResNet,還選了它的續篇:何愷明團隊在 2016 年發表的〈Identity Mappings in Deep Residual Networks〉。這篇論文做的事情是回過頭來,用更嚴格的數學分析來理解殘差連接為什麼有效,然後基於這個理解提出改進。

原始 ResNet 的捷徑連接在跳過的層前後各有一個非線性操作(ReLU 和 Batch Normalization)。Identity Mappings 論文的關鍵發現是:如果把捷徑連接變成真正純粹的恆等映射,讓輸入完全不經過任何變換就直接加到輸出上,效果會更好。具體做法是把 Batch Normalization 和 ReLU 移到殘差分支的「前面」(pre-activation),而不是放在「後面」(post-activation)。這個看起來微不足道的順序調整,讓梯度能夠更順暢地沿著捷徑反向傳播,大幅改善了超深網路的訓練穩定性。

Sutskever 把一篇論文和它的改進版都放進 27 項清單,這個選擇本身就很有啟發性。如果你回頭看前面幾篇,會發現同樣的模式反覆出現:Kolmogorov 複雜度搭配 MDL 教程(理論搭配實踐方法),Aaronson 的部落格文章搭配正式論文(直覺搭配嚴格驗證),現在是 ResNet 搭配 Identity Mappings(突破搭配理論完善)。Sutskever 的清單有一個非常刻意的結構:他不只要你知道一個想法,他要你理解那個想法的完整生命週期,從靈感、到實作、到理論分析。在他看來,只讀 ResNet 不讀 Identity Mappings,就像只看了電影的上集沒看下集,你會知道結局但不知道為什麼。

清單上唯一一門課

27 項清單裡,有教科書、有論文、有部落格文章,但只有一項是課程:史丹佛大學的 CS231n,全名是「Convolutional Neural Networks for Visual Recognition」。這門課由李飛飛(Fei-Fei Li)創建,早期由 Andrej Karpathy(前 Tesla AI 總監、OpenAI 研究員)擔任主要講師,後來的教學團隊還包括 Justin Johnson。

在其他 26 項都是特定的論文或文章的情況下,Sutskever 專門留了一個位子給一門課程。這個選擇傳達的訊號很明確:系統性學習比論文掃射更重要。你可以一篇一篇地讀完清單上所有的論文,但如果你缺乏從零開始的基礎建設,不懂線性代數怎麼用在影像上、反向傳播的梯度怎麼算、卷積操作的直覺是什麼,那些論文裡的數學推導對你來說就只是符號排列。CS231n 提供的正是這個基礎建設。

這門課之所以特別,跟它的教學風格有很大的關係。Karpathy 的課堂上有一個經典環節:學生必須從零開始、不用任何框架,手寫反向傳播的程式碼。不是呼叫 PyTorch 的 autograd,不是用 TensorFlow 的自動微分,而是一個神經元一個神經元地算出梯度,親手把 chain rule 落實成 Python 程式。這種教學方式在當時被一些人批評為「太基礎」「浪費時間」,因為現代框架已經把這些全部抽象化了。但 Karpathy 的理念是:如果你不理解引擎怎麼運轉,你就只能當乘客,不能當工程師。

李飛飛創建這門課的背景也值得一提。她就是那位在 2009 年頂著學術界的冷眼建造了 ImageNet 資料集的研究者。那個被 NIH 拒絕經費、在 CVPR 頂級會議上只拿到海報展位的計畫,最終成為了整場深度學習革命的基礎設施。CS231n 和 ImageNet 是一體兩面:ImageNet 提供了資料,CS231n 培養了使用這些資料的人。Sutskever 把 CS231n 放進清單,等於是在說:要理解 CNN,光讀論文不夠,你需要從地基開始蓋。

我的觀察:從理論到工程的那一步

寫完篇 1篇 3 的時候,我一度擔心讀者會覺得 Sutskever 的清單太偏理論。Kolmogorov 複雜度、複雜性動力學、Shane Legg 的智慧公式,這些東西離日常工作實在太遠了。但走到篇 4,你會發現 Sutskever 的安排有他自己的節奏。理論不是用來裝飾的,而是用來支撐工程的。AlexNet 之所以有效,是因為卷積核在做的事情本質上就是壓縮,用少量參數捕捉視覺規律。ResNet 之所以能推到 152 層,是因為殘差連接讓每一層的學習任務變得更簡單,讓梯度下降更容易找到好的壓縮方式。篇 1 說的「壓縮即理解」,在這裡不再是抽象口號,而是具體的工程現實。

還有一個細節值得臺灣讀者注意。ResNet 的四位作者何愷明、張祥雨、任少卿、孫劍,當時都在微軟亞洲研究院(Microsoft Research Asia),地點在北京。這個研究院多年來是華人 AI 研究者的搖籃,從這裡走出的人後來分散到了 Facebook、Google、ByteDance、各大學。何愷明後來去了 FAIR,現在是 MIT 教授。這條路徑說明了一件事:頂尖的研究不需要在矽谷發生,但它需要一個允許人才自由探索的環境和足夠長的時間跨度。ResNet 不是趕出來的產品,而是一群研究者花了多年時間鑽研深層網路的訓練動態之後,自然浮現的解法。

回到 Sutskever 的清單。到這裡,我們已經從純粹的數學理論(篇 1-3)走到了具體的視覺工程(篇 4)。下一站,清單將帶我們進入另一個戰場:序列。當機器學會看之後,它要怎麼學會記住、學會推理、學會處理語言這種一個字接一個字展開的東西?那是 RNN 和 LSTM 的領域,也是 Sutskever 清單中佔比最高的主題。


← 上一篇:一篇博士論文如何定義「智慧」 → 下一篇:RNN 的魅力與極限 📋 回到系列目錄:那份消失的 Email