深度學習的坎坷六十年
點擊上方“小白學視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達
文章導讀
從1958年弗蘭克.羅森布拉特發(fā)明的感知機、RNN、LeNet-5到Transformers等等,前人們一步一步的帶動著深度學習往前跑。本文主要偏向于計算機視覺方向,帶大家回想智慧凝結的每一個里程碑。

1958 年:感知機的興起
1958 年,弗蘭克 · 羅森布拉特發(fā)明了感知機,這是一種非常簡單的機器模型,后來成為當今智能機器的核心和起源。
感知機是一個非常簡單的二元分類器,可以確定給定的輸入圖像是否屬于給定的類。為了實現(xiàn)這一點,它使用了單位階躍激活函數(shù)。使用單位階躍激活函數(shù),如果輸入大于 0,則輸出為 1,否則為 0。
下圖是感知機的算法。

Frank 的意圖不是將感知機構建為算法,而是構建成一種機器。感知機是在名為 Mark I 感知機的硬件中實現(xiàn)的。Mark I 感知機是一臺純電動機器。它有 400 個光電管(或光電探測器),其權重被編碼到電位器中,權重更新(發(fā)生在反向傳播中)由電動機執(zhí)行。下圖是 Mark I 感知機。

就像你今天在新聞中看到的關于神經網(wǎng)絡的內容一樣,感知機也是當時的頭條新聞。《紐約時報》報道說,“[海軍] 期望電子計算機的初步模型能夠行走、說話、觀察、書寫、自我復制并意識到它的存在”。今天,我們都知道機器仍然難以行走、說話、觀察、書寫、復制自己,而意識則是另一回事。
Mark I 感知機的目標僅僅是識別圖像,而當時它只能識別兩個類別。人們花了一些時間才知道添加更多層(感知機是單層神經網(wǎng)絡)可以使網(wǎng)絡具有學習復雜功能的能力。這進一步產生了多層感知機 (MLP)。
1982~1986 : 循環(huán)神經網(wǎng)絡 (RNN)
在多層感知機顯示出解決圖像識別問題的潛力之后,人們開始思考如何對文本等序列數(shù)據(jù)進行建模。
循環(huán)神經網(wǎng)絡是一類旨在處理序列的神經網(wǎng)絡。與多層感知機 (MLP) 等前饋網(wǎng)絡不同,RNN 有一個內部反饋回路,負責記住每個時間步的信息狀態(tài)。

第一種 RNN 單元在 1982 年到 1986 年之間被發(fā)現(xiàn),但它并沒有引起人們的注意,因為簡單的 RNN 單元在用于長序列時會受到很大影響,主要是由于記憶力短和梯度不穩(wěn)定的問題。
1998:LeNet-5:第一個卷積神經網(wǎng)絡架構
LeNet-5 是最早的卷積網(wǎng)絡架構之一,于 1998 年用于文檔識別。LeNet-5 由 3 個部分組成:2 個卷積層、2 個子采樣或池化層和 3 個全連接層。卷積層中沒有激活函數(shù)。
正如論文所說,LeNet-5 已進行商業(yè)化部署,每天讀取數(shù)百萬張支票。下面是 LeNet-5 的架構。該圖像取自其原始論文。

LeNet-5 在當時確實是一個有影響力的東西,但它(常規(guī)的卷積網(wǎng)絡)直到 20 年后才受到關注!LeNet-5 建立在早期工作的基礎上,例如福島邦彥提出的第一個卷積神經網(wǎng)絡、反向傳播(Hinton 等人,1986 年)和應用于手寫郵政編碼識別的反向傳播(LeCun 等人,1989 年)。
1998:長短期記憶(LSTM)
由于梯度不穩(wěn)定的問題,簡單 RNN 單元無法處理長序列問題。LSTM 是可用于處理長序列的 RNN 版本。LSTM 基本上是 RNN 單元的極端情況。
LSTM 單元的一個特殊設計差異是它有一個門機制,這是它可以控制多個時間步長的信息流的基礎。
簡而言之,LSTM 使用門來控制從當前時間步到下一個時間步的信息流,有以下 4 種方式:
輸入門識別輸入序列。
遺忘門去掉輸入序列中包含的所有不相關信息,并將相關信息存儲在長期記憶中。
LTSM 單元更新更新單元的狀態(tài)值。
輸出門控制必須發(fā)送到下一個時間步的信息。

LSTM 處理長序列的能力使其成為適合各種序列任務的神經網(wǎng)絡架構,例如文本分類、情感分析、語音識別、圖像標題生成和機器翻譯。
LSTM 是一種強大的架構,但它的計算成本很高。2014 年推出的 GRU(Gated Recurrent Unit)可以解決這個問題。與 LSTM 相比,它的參數(shù)更少,而且效果也很好。
2012 年:ImageNet 挑戰(zhàn)賽、AlexNet 和 ConvNet 的興起
如果跳過 ImageNet 大規(guī)模視覺識別挑戰(zhàn)賽 (ILSVRC) 和 AlexNet,就幾乎不可能討論神經網(wǎng)絡和深度學習的歷史。
ImageNet 挑戰(zhàn)賽的唯一目標是評估大型數(shù)據(jù)集上的圖像分類和對象分類架構。它帶來了許多新的、強大的、有趣的視覺架構,我們將簡要回顧這些架構。
挑戰(zhàn)賽始于 2010 年,但在 2012 年發(fā)生了變化,AlexNet 以 15.3% 的 Top 5 低錯誤率贏得了挑戰(zhàn),這幾乎是之前獲勝者錯誤率的一半。AlexNet 由 5 個卷積層、隨后的最大池化層、3 個全連接層和一個 softmax 層組成。AlexNet 提出了深度卷積神經網(wǎng)絡可以很好地處理視覺識別任務的想法。但當時,這個觀點還沒有深入到其他應用上!
在隨后的幾年里,ConvNets 架構不斷變得更大并且工作得更好。例如,有 19 層的 VGG 以 7.3% 的錯誤率贏得了挑戰(zhàn)。GoogLeNet(Inception-v1) 更進一步,將錯誤率降低到 6.7%。2015 年,ResNet(Deep Residual Networks)擴展了這一點,并將錯誤率降低到 3.6%,并表明通過殘差連接,我們可以訓練更深的網(wǎng)絡(超過 100 層),在此之前,訓練如此深的網(wǎng)絡是不可能的。之前人們發(fā)現(xiàn)更深層次的網(wǎng)絡工作得更好,這導致了其他新架構,如 ResNeXt、Inception-ResNet、DenseNet、Xception 等。
讀者可以在這里找到這些架構和其他現(xiàn)代架構的總結和實現(xiàn):https://github.com/Nyandwi/ModernConvNets


2014 年 : 深度生成網(wǎng)絡
生成網(wǎng)絡用于從訓練數(shù)據(jù)中生成或合成新的數(shù)據(jù)樣本,例如圖像和音樂。
生成網(wǎng)絡有很多種類型,但最流行的類型是由 Ian Goodfellow 在 2014 年創(chuàng)建的生成對抗網(wǎng)絡 (GAN)。GAN 由兩個主要組件組成:生成假樣本的生成器和區(qū)分真實樣本和生成器生成樣本的判別器。生成器和鑒別器可以說是互相競爭的關系。他們都是獨立訓練的,在訓練過程中,他們玩的是零和游戲。生成器不斷生成欺騙判別器的假樣本,而判別器則努力發(fā)現(xiàn)那些假樣本(參考真實樣本)。在每次訓練迭代中,生成器在生成接近真實的假樣本方面做得更好,判別器必須提高標準來區(qū)分不真實的樣本和真實樣本。
GAN 一直是深度學習社區(qū)中最熱門的事物之一,該社區(qū)以生成偽造的圖像和 Deepfake 視頻而聞名。如果讀者對 GAN 的最新進展感興趣,可以閱讀 StyleGAN2、DualStyleGAN、ArcaneGAN 和 AnimeGANv2 的簡介。如需 GAN 資源的完整列表,請查看 Awesome GAN 庫:https://github.com/nashory/gans-awesome-applications。下圖說明了 GAN 的模型架構。

GAN 是生成模型的一種。其他流行的生成模型類型還有 Variation Autoencoder (變分自編碼器,VAE)、AutoEncoder (自編碼器)和擴散模型等。
2017 年:Transformers 和注意力機制
時間來到 2017 年。ImageNet 挑戰(zhàn)賽結束了。新的卷積網(wǎng)絡架構也被制作出來。計算機視覺社區(qū)的每個人都對當前的進展感到高興。核心計算機視覺任務(圖像分類、目標檢測、圖像分割)不再像以前那樣復雜。人們可以使用 GAN 生成逼真的圖像。NLP 似乎落后了。但是隨后出現(xiàn)了一些事情,并且在整個網(wǎng)絡上都成為了頭條新聞:一種完全基于注意力機制的新神經網(wǎng)絡架構橫空出世。并且 NLP 再次受到啟發(fā),在隨后的幾年,注意力機制繼續(xù)主導其他方向(最顯著的是視覺)。該架構被稱為 Transformer 。
在此之后的 5 年,也就是現(xiàn)在,我們在這里談論一下這個最大的創(chuàng)新成果。Transformer 是一類純粹基于注意力機制的神經網(wǎng)絡算法。Transformer 不使用循環(huán)網(wǎng)絡或卷積。它由多頭注意力、殘差連接、層歸一化、全連接層和位置編碼組成,用于保留數(shù)據(jù)中的序列順序。下圖說明了 Transformer 架構。

Transformer 徹底改變了 NLP,目前它也在改變著計算機視覺領域。在 NLP 中,它被用于機器翻譯、文本摘要、語音識別、文本補全、文檔搜索等。
讀者可以在其論文 《Attention is All You Need》 中了解有關 Transformer 的更多信息。
2018 年至今
自 2017 年以來,深度學習算法、應用和技術突飛猛進。為了清楚起見,后來的介紹是按類別劃分的。在每個類別中,我們都會重新審視主要趨勢和一些最重要的突破。
Vision Transformers
Transformer 在 NLP 中表現(xiàn)出優(yōu)異的性能后不久,一些勇于創(chuàng)新的人就迫不及待地將注意力機制放到了圖像上。在論文《An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale》中,谷歌的幾位研究人員表明,對直接在圖像塊序列上運行的正常 Transformer 進行輕微修改可以在圖像分類數(shù)據(jù)集上產生實質性的結果。他們將他們的架構稱為 Vision Transformer (ViT),它在大多數(shù)計算機視覺基準測試中都有體現(xiàn)(在作者撰寫本文時,ViT 是 Cifar-10 上最先進的分類模型)。
ViT 設計師并不是第一個嘗試在識別任務中使用注意力機制的人。我們可以在論文 Attention Augmented Convolutional Networks 中找到第一個使用的記錄,這篇論文試圖結合自注意力機制和卷積(擺脫卷積主要是由于 CNN 引入的空間歸納偏置)。另一個例子見于論文《Visual Transformers: Token-based Image Representation and Processing for Computer Vision,這篇論文在基于濾波器的 token 或視覺 token 上運行 Transformer。這兩篇論文和許多其他未在此處列出的論文突破了一些基線架構(主要是 ResNet)的界限,但當時并沒有超越當前的基準。ViT 確實是最偉大的論文之一。這篇論文最重要的見解之一是 ViT 設計師實際上使用圖像 patch 作為輸入表示。他們對 Transformer 架構沒有太大的改變。

除了使用圖像 patch 之外,使 Vision Transformer 成為強大架構的結構是 Transformer 的超強并行性及其縮放行為。但就像生活中的一切一樣,沒有什么是完美的。一開始,ViT 在視覺下游任務(目標檢測和分割)上表現(xiàn)不佳。
在引入 [Swin Transformers ]之后,Vision Transformer 開始被用作目標檢測和圖像分割等視覺下游任務的骨干網(wǎng)絡。Swin Transformer 超強性能的核心亮點是由于在連續(xù)的自注意力層之間使用了移位窗口。下圖描述了 Swin Transformer 和 Vision Transformer (ViT) 在構建分層特征圖方面的區(qū)別。

Vision Transformer 一直是近來最令人興奮的研究領域之一。我們可以在這里討論許多 Vision Transformers 論文,但讀者可以在論文《Transformers in Vision: A Survey》中了解更多信息。其他最新視覺 Transformer 還有 CrossViT、ConViT 和 SepViT 等。
視覺和語言模型
視覺和語言模型通常被稱為多模態(tài)。它們是涉及視覺和語言的模型,例如文本到圖像生成(給定文本,生成與文本描述匹配的圖像)、圖像字幕(給定圖像,生成其描述)和視覺問答(給定一個圖像和關于圖像中內容的問題,生成答案)。Transformer 在視覺和語言領域的成功很大程度上促成了多模型作為一個單一的統(tǒng)一網(wǎng)絡。
實際上,所有視覺和語言任務都利用了預訓練技術。在計算機視覺中,預訓練需要對在大型數(shù)據(jù)集(通常是 ImageNet)上訓練的網(wǎng)絡進行微調,而在 NLP 中,往往是對預訓練的 BERT 進行微調。要了解有關 V-L 任務中預訓練的更多信息,請閱讀論文《A Survey of Vision-Language Pre-Trained Models》。有關視覺和語言任務、數(shù)據(jù)集的一般概述,請查看論文《Trends in Integration of Vision and Language Research: A Survey of Tasks, Datasets, and Methods》。
前段時間,OpenAI 發(fā)布了 [DALL·E 2](改進后的 DALL·E),這是一種可以根據(jù)文本生成逼真圖像的視覺語言模型?,F(xiàn)有的文本轉圖像模型有很多,但 DALL·E 2 的分辨率、圖像標題匹配和真實感都相當出色。
DALL·E 2 尚未對公眾開放,但你可以加入候補名單。以下是 DALL·E 2 創(chuàng)建的一些圖像示例。

大規(guī)模語言模型 (LLM)
語言模型有多種用途。它們可用于預測句子中的下一個單詞或字符、總結一段文檔、將給定文本從一種語言翻譯成另一種語言、識別語音或將一段文本轉換為語音。
開玩笑地說,發(fā)明 Transformers 的人必須為語言模型在朝著大規(guī)模參數(shù)化方向前進受到指責(但實際上沒有人應該受到責備,Transformers 是 2010 年代十年中最偉大的發(fā)明之一,大模型令人震驚的地方在于:如果給定足夠的數(shù)據(jù)和計算,它總能更好地工作)。在過去的 5 年中,語言模型的大小一直在不斷增長。
在引入論文《Attention is all you need》一年后,大規(guī)模語言模型開始出現(xiàn)。2018 年,OpenAI 發(fā)布了 GPT(Generative Pre-trained Transformer),這是當時最大的語言模型之一。一年后,OpenAI 發(fā)布了 GPT-2,一個擁有 15 億個參數(shù)的模型。又一年后,他們發(fā)布了 GPT-3,它有 1750 億個參數(shù)。GPT-3 用了 570GB 的 文本來訓練。這個模型有 175B 的參數(shù),模型有 700GB 大。根據(jù) lambdalabs 的說法,如果使用在市場上價格最低的 GPU 云,訓練它需要 366 年,花費 460 萬美元!
GPT-n 系列型號僅僅是個開始。還有其他更大的模型接近甚至比 GPT-3 更大。如:NVIDIA Megatron-LM 有 8.3B 參數(shù)。最新的 DeepMind Gopher 有 280B 參數(shù)。2022 年 4 月 12 日,DeepMind 發(fā)布了另一個名為 Chinchilla 的 70B 語言模型,盡管比 Gopher、GPT-3 和 Megatron-Turing NLG(530B 參數(shù))小,但它的性能優(yōu)于許多語言模型。Chinchilla 的論文表明,現(xiàn)有的語言模型是訓練不足的,具體來說,它表明通過將模型的大小加倍,數(shù)據(jù)也應該加倍。但是,幾乎在同一周內又出現(xiàn)了具有 5400 億個參數(shù)的 Google Pathways 語言模型(PaLM)!

代碼生成模型
代碼生成是一項涉及補全給定代碼或根據(jù)自然語言或文本生成代碼的任務,或者簡單地說,它是可以編寫計算機程序的人工智能系統(tǒng)??梢圆碌剑F(xiàn)代代碼生成器是基于 Transformer 的。
我們可以確定地說,人們已經開始考慮讓計算機編寫自己的程序了(就像我們夢想教計算機做的所有其他事情一樣),但代碼生成器在 OpenAI 發(fā)布 Codex 后受到關注。Codex 是在 GitHub 公共倉庫和其他公共源代碼上微調的 GPT-3。OpenAI 表示:“OpenAI Codex 是一種通用編程模型,這意味著它基本上可以應用于任何編程任務(盡管結果可能會有所不同)。我們已經成功地將它用于編譯、解釋代碼和重構代碼。但我們知道,我們只觸及了可以做的事情的皮毛?!?目前,由 Codex 支持的 [GitHub Copilot] 扮演著結對程序員的角色。
在我使用 Copilot 后,我對它的功能感到非常驚訝。作為不編寫 Java 程序的人,我用它來準備我的移動應用程序(使用 Java)考試。人工智能幫助我準備學術考試真是太酷了!
在 OpenAI 發(fā)布 Codex 幾個月后,DeepMind 發(fā)布了 [AlphaCode],這是一種基于 Transformer 的語言模型,可以解決編程競賽問題。AlphaCode 發(fā)布的博文稱:“AlphaCode 通過解決需要結合批判性思維、邏輯、算法、編碼和自然語言理解的新問題,在編程競賽的參與者中估計排名前 54%?!?解決編程問題(或一般的競爭性編程)非常困難(每個做過技術面試的人都同意這一點),正如 Dzmitry 所說,擊敗 “人類水平仍然遙遙無期”。
前不久,來自 Meta AI 的科學家發(fā)布了 InCoder,這是一種可以生成和編輯程序的生成模型。
更多關于代碼生成的論文和模型可以在這里找到:https://paperswithcode.com/task/code-generation/codeless
再次回到感知機
在卷積神經網(wǎng)絡和 Transformer 興起之前的很長一段時間里,深度學習都圍繞著感知機展開。ConvNets 在取代 MLP 的各種識別任務中表現(xiàn)出優(yōu)異的性能。視覺 Transformer 目前也展示出似乎是一個很有前途的架構。但是感知機完全死了嗎?答案可能不是。
在 2021 年 7 月,兩篇基于感知機的論文被發(fā)表。一個是 [MLP-Mixer: An all-MLP Architecture for Vision],另一個是 [Pay Attention to MLPs(gMLP)].
MLP-Mixer 聲稱卷積和注意力都不是必需的。這篇論文僅使用多層感知機 (MLP),就在圖像分類數(shù)據(jù)集上取得了很高的準確性。MLP-Mixer 的一個重要亮點是它包含兩個主要的 MLP 層:一個獨立應用于圖像塊(通道混合),另一個層跨塊應用(空間混合)。
gMLP 還表明,通過避免使用自注意和卷積(當前 NLP 和 CV 的實際使用的方式),可以在不同的圖像識別和 NLP 任務中實現(xiàn)很高的準確性。

讀者顯然不會使用 MLP 去獲得最先進的性能,但它們與最先進的深度網(wǎng)絡的可比性卻是令人著迷的。
再次使用卷積網(wǎng)絡:2020 年代的卷積網(wǎng)絡
自 Vision Transformer(2020 年)推出以來,計算機視覺的研究圍繞著 Transformer 展開(在 NLP 中,transformer 已經是一種規(guī)范)。Vision Transformer (ViT) 在圖像分類方面取得了最先進的結果,但在視覺下游任務(對象檢測和分割)中效果不佳。隨著 Swin Transformers 的推出, Vision Transformer 很快也接管了視覺下游任務。
很多人(包括我自己)都喜歡卷積神經網(wǎng)絡。卷積神經網(wǎng)絡確實能起效,而且放棄已經被證明有效的東西是很難的。這種對深度網(wǎng)絡模型結構的熱愛讓一些杰出的科學家回到過去,研究如何使卷積神經網(wǎng)絡(準確地說是 ResNet)現(xiàn)代化,使其具有和 Vision Transformer 同樣的吸引人的特征。特別是,他們探討了「Transformers 中的設計決策如何影響卷積神經網(wǎng)絡的性能?」這個問題。他們想把那些塑造了 Transformer 的秘訣應用到 ResNet 上。
Meta AI 的 Saining Xie 和他的同事們采用了他們在論文中明確陳述的路線圖,最終形成了一個名為 [ConvNeXt]的 ConvNet 架構。ConvNeXt 在不同的基準測試中取得了可與 Swin Transformer 相媲美的結果。讀者可以通過 ModernConvNets 庫(現(xiàn)代 CNN 架構的總結和實現(xiàn))了解更多關于他們采用的路線圖。
結論
深度學習是一個非常有活力、非常寬廣的領域。很難概括其中所發(fā)生的一切,作者只觸及了表面,論文多到一個人讀不完。很難跟蹤所有內容。例如,我們沒有討論強化學習和深度學習算法、深度學習框架的演變(如 TensorFlow 和 PyTorch),以及深度學習硬件?;蛟S,還有其他重要的事情構成了我們沒有討論過的深度學習歷史、算法和應用程序的很大一部分。
作為一個小小的免責聲明,讀者可能已經注意到,作者偏向于計算機視覺的深度學習??赡苓€有其他專門為 NLP 設計的重要深度學習技術作者沒有涉及。
此外,很難確切地知道某項特定技術是什么時候發(fā)表的,或者是誰最先發(fā)表的,因為大多數(shù)奇特的東西往往受到以前作品的啟發(fā)。如有紕漏,讀者可以去原文評論區(qū)與作者討論。
好消息!
小白學視覺知識星球
開始面向外開放啦??????
下載1:OpenCV-Contrib擴展模塊中文版教程 在「小白學視覺」公眾號后臺回復:擴展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內容。 下載2:Python視覺實戰(zhàn)項目52講 在「小白學視覺」公眾號后臺回復:Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學校計算機視覺。 下載3:OpenCV實戰(zhàn)項目20講 在「小白學視覺」公眾號后臺回復:OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學習進階。 交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關微信群。請勿在群內發(fā)送廣告,否則會請出群,謝謝理解~

