沒想到,自 2012 年 AlexNet 開啟的深度學習革命已經過去了 12 年。近日,知名 AI 研究科學家 Andrej Karpathy 的一條帖子,讓參與這波深度學習變革的許多大佬們陷入了回憶殺。從圖靈獎得主 Yann LeCun 到 GAN 之父 Ian Goodfellow,紛紛憶往昔。到目前為止,該帖子已經有 63 萬 + 的瀏覽量。在帖子中,Karpathy 提到:有一個有趣的事實是,很多人可能聽說過 2012 年 ImageNet/AlexNet 的時刻,以及它開啟的深度學習革命。不過,可能很少有人知道,支援這次競賽獲勝作品的程式碼是由 Alex Krizhevsky 從頭開始,用 CUDA/C++ 手工編寫的。這個程式碼倉庫叫做 cuda-convnet, 當時託管在 Google Code 上:https://code.google.com/archive/p/cuda-convnet/Karpathy 想著 Google Code 是不是已經關閉了 (?),但他在 GitHub 上找到了一些其他開發者基於原始程式碼建立的新版本,比如:https://github.com/ulrichstern/cuda-convnet“AlexNet 是最早將 CUDA 用於深度學習的著名例子之一。”Karpathy 回憶說,正是因為使用了 CUDA 和 GPU,AlexNet 才能處理如此大規模的資料 (ImageNet),並在影像識別任務上取得如此出色的表現。“AlexNet 不僅僅是簡單地用了 GPU,還是一個多 GPU 系統。比如 AlexNet 使用了一種叫做模型並行的技術,將卷積運算分成兩部分,分別執行在兩個 GPU 上。”Karpathy 提醒大家,你要知道那可是 2012 年啊!“在 2012 年 (大約 12 年前),大多數深度學習研究都是在 Matlab 中進行,跑在 CPU 上,在玩具級別的資料集上不斷迭代各種學習演算法、網路架構和最佳化思路。” 他寫道。但 AlexNet 的作者 Alex、Ilya 和 Geoff 卻做了一件與當時的主流研究風格完全不同的事情 ——“不再糾結於演算法細節,只需要拿一個相對標準的卷積神經網路 (ConvNet),把它做得非常大,在一個大規模的資料集 (ImageNet) 上訓練它,然後用 CUDA/C++ 把整個東西實現出來。”Alex Krizhevsky 直接使用 CUDA 和 C++ 編寫了所有的程式碼,包括卷積、池化等深度學習中的基本操作。這種做法非常創新也很有挑戰性,需要程式設計師對演算法、硬體架構、程式語言等有深入理解。從底層開始的程式設計方式複雜而繁瑣,但可以最大限度地最佳化效能,充分發揮硬體計算能力,也正是這種迴歸根本的做法為深度學習注入了一股強大動力,構成深度學習歷史上的轉折點。有意思的是,這一段描述勾起不少人的回憶,大家紛紛考古 2012 年之前自己使用什麼工具實現深度學習專案。紐約大學電腦科學教授 Alfredo Canziani 當時用的是 Torch,“從未聽說有人使用 Matlab 進行深度學習研究......” 。對此 Yann lecun 表示同意,2012 年大多數重要的深度學習都是用 Torch 和 Theano 完成的。Karpathy 有不同看法,他接話說,大多數專案都是在用 Matlab ,自己從未使用過 Theano,2013-2014 年使用過 Torch。一些網友也透露 Hinton 也是用 Matlab。知名的 GAN 之父 Ian Goodfellow 也現身說法,表示當時 Yoshua 的實驗室全用 Theano,還說自己在 ImageNet 釋出之前,曾為 Alex 的 cuda-convnet 編寫了 Theano 捆綁包。谷歌 DeepMind 主管 Douglas Eck 現身說自己沒用過 Matlab,而是 C++,然後轉向了 Python/Theano。紐約大學教授 Kyunghyun Cho 表示,2010 年,他還在大西洋彼岸,當時使用的是 Hannes SChulz 等人做的 CUV 庫,幫他從 Matlab 轉向了 python。Lamini 的聯合創始人 Gregory Diamos 表示,說服他的論文是吳恩達等人的論文《Deep learning with COTS HPC systems》。論文表明 Frankenstein CUDA 叢集可以擊敗 10,000 個 CPU 組成的 MapReduce 叢集。論文連結:https://proceedings.mlr.press/v28/coates13.pdf不過,AlexNet 的巨大成功並非一個孤立的事件,而是當時整個領域發展趨勢的一個縮影。一些研究人員已經意識到深度學習需要更大的規模和更強的計算能力,GPU 是一個很有前景的方向。Karpathy 寫道,“當然,在 AlexNet 出現之前,深度學習領域已經有了一些向規模化方向發展的跡象。例如,Matlab 已經開始初步支援 GPU。史丹佛大學吳恩達實驗室的很多工作都在朝著使用 GPU 進行大規模深度學習的方向發展。還有一些其他的並行努力。”考古結束時,Karpathy 感慨道 “在編寫 C/C++ 程式碼和 CUDA kernel 時,有一種有趣的感覺,覺得自己彷彿回到了 AlexNet 的時代,回到了 cuda-convnet 的時代。”當下這種 "back to the basics" 的做法與當年 AlexNet 的做法有著異曲同工 ——AlexNet 的作者從 Matlab 轉向 CUDA/C++,是為了追求更高的效能和更大的規模。雖然現在有了高階框架,但在它們無法輕鬆實現極致效能時,仍然需要回到最底層,親自編寫 CUDA/C++ 程式碼。對了,當時國內的研究者們都是用什麼?歡迎留言討論。