2012年至今,細數深度學習領域這些年取得的經典成果

ai科技評論 發佈 2020-08-04T05:36:57+00:00

Improving neural networks by preventing co-adaptation of feature detectors ,見原文連結。

編譯 | 陳彩嫻

編輯 | 叢 末

2006年,Hinton 發表了一篇論文《A Fast Learning Algorithm for Deep Belief Nets》,提出了降維和逐層預訓練方法,該方法可成功運用於訓練多層神經網絡,使深度網絡的實用化成為可能。該論文也被視作深度學習領域的經典之作。

從原理來看,深度學習與神經網絡緊密相關:神經網絡由一層一層的神經元構成,層數越多,神經網絡越深,而所謂「深度學習」就是模擬人類大腦,運用深層神經網絡對輸入進行「思考」、「分析」並獲得目標輸出的過程。

那麼, 自2006年Hinton發表經典論文以來,深度學習領域又取得了哪些突破性成果呢?

Google Brain前員工Denny Britz 在本文中進行了回顧整理,按時間順序介紹了從2012年到2020年深度學習領域的數項關鍵性科研成就,包括運用AlexNet和Dropout處理ImageNet(2012年)、使用深度強化學習玩Atari遊戲(2013年)、應用注意力機制的編碼器-解碼器網絡(2014年)、生成對抗網絡(2014-2015年)、ResNet(2015年)、Transformer模型(2017年)、BERT與微調自然語言處理模型(2018年),以及2019-2020年及之後的BIG語言模型與自監督學習等。這些技術大部分應用於視覺、自然語言、語音與強化學習等領域。

這些研究均已經過時間的考驗,並得到廣泛認可。本文不僅列舉了2012年以來的部分出色成果,還涉及到大量有利於了解當今深度學習研究現狀的基礎技術與知識。深度學習基礎技術的概念、方法和代碼等具有相似性,研究人員可以觸類旁通。比方說,一個終生研究計算機視覺(computer vision, CV)的學者很快也能適應自然語言處理(Natural Language Processing, NLP),在NLP方向獲得成就。如果你是深度學習領域的入門者,以下閱讀將幫助你了解現有先進技術的來歷與最初發明用途,方便你更好地開展自己的研究工作。

2012年:應用AlexNet和Dropout 方法處理ImageNet

相關論文:

  • ImageNet Classification with Deep Convolutional Neural Networks (2012),https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks

  • Improving neural networks by preventing co-adaptation of feature detectors (2012) ,https://arxiv.org/abs/1207.0580

  • One weird trick for parallelizing convolutional neural networks (2014) ,https://arxiv.org/abs/1404.5997

具體實現:

  • 用PyTorch搭建AlexNet,https://pytorch.org/hub/pytorch_vision_alexnet/

  • tensorflow搭建AlexNet,https://github.com/tensorflow/models/blob/master/research/slim/nets/alexnet.py

圖源:https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks

AlexNet算法被認為是深度學習和人工智慧研究蓬勃發展的主要原因。它是一種以Yann LeCun提出的早期LeNet網絡為基礎的深度卷積神經網絡(Deep Convolutional Neural Networ)。AlexNet結合晶片GPU的功能和算法優勢,大大超越了以前其他對ImageNet數據集中的圖像進行分類的方法。它的出現再一次證明了神經網絡的強大。此外,AlexNet是最早運用Dropout的算法之一,之後也成為了提高各類深度學習模型泛化能力的一項關鍵技術。

AlexNet 所使用的架構,包含一系列卷積層、ReLU非線性(ReLU nonlinearity)和最大池化算法(max-pooling),被廣泛視為後來CV架構創建和擴展的標準。如今,諸如PyTorch之類的軟體庫具有十分強大的功能,加上與目前最新的神經網絡架構相比,AlexNet的構成十分簡單,僅需幾行代碼即可通過 PyTorch 等軟體庫實現。有一點要注意的是:上述所介紹到的AlexNet的實現使用了論文《One weird trick for parallelizing convolutional neural networks》里所提到的網絡變量。

2013年:使用深度強化學習玩轉 Atari 遊戲

相關論文:

  • Playing Atari with Deep Reinforcement Learning (2013),https://arxiv.org/abs/1312.5602

具體實現:

  • 用PyTorch搭建深度強化學習模型(DQN),https://pytorch.org/tutorials/intermediate/reinforcement_q_learning.html

  • 用TensorFlow搭建DQN,https://www.tensorflow.org/agents/tutorials/1_dqn_tutorial

圖源:https://deepmind.com/research/publications/human-level-control-through-deep-reinforcement-learning

DeepMind團隊,基於近年來在圖像識別和GPU方面取得的一系列突破,成功訓練了一個能通過原始像素輸入來玩Atari遊戲的網絡。不僅如此,同一個神經網絡架構還在沒有被告知詳細遊戲規則的前提下,學會了玩7款不同的遊戲,從而證明了該方法的普適性。

強化學習與監督學習(比如圖像分類)的不同之處在於:在強化學習里,智能體必須在多個時間步(time step)內學會如何獲得最多獎勵。具體來說,就是它必須贏得比賽,而不是僅僅預測某個標籤。由於智能體與環境直接互動,且每個動作都會影響下一個動作,所以訓練數據不是獨立且分布均勻的,這就使得許多機器學習模型的訓練十分不穩定。這個現象可以使用經驗回放(experience replay)等技術來解決。

儘管這項研究沒有實現明顯的算法創新,但卻巧妙地結合了現有技術、基於GPU訓練的卷積神經網絡、經驗回放以及一些額外的數據處理技術,並獲得了大多數人始料未及的出色結果。這也提升了研究人員擴展深度強化學習技術的信心,有望借鑑這個成果來解決包括圍棋、Dota 2、Starcraft 2等等更複雜的任務。

Atari遊戲在之後也成為了強化學習研究的標準基準。早期的深度強化學習方法僅超過人類基本水平、學會7款遊戲,但在後來幾年時間裡,基於這些思路所取得的進步,開始在更多遊戲里打敗人類。其中有一款遊戲叫《蒙特祖瑪的復仇》,以需要長期規劃而聞名,被認為是難度最大的遊戲之一。直到最近,AI 已經在57款遊戲中超越了人類玩家的基準線。

2014年:採用「注意力」的編碼器-解碼器網絡

相關論文:

  • Sequence to Sequence Learning with Neural Networks,https://arxiv.org/abs/1409.3215

  • Neural Machine Translation by Jointly Learning to Align and Translate,https://arxiv.org/abs/1409.0473

具體實現:

  • 用Pytorch搭建採用注意力的Seq2Seq,https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html#

  • 用TensorFlow搭建採用注意力的Seq2Seq,https://www.tensorflow.org/addons/tutorials/networks_seq2seq_nmt

圖源:https://ai.googleblog.com/2017/04/introducing-tf-seq2seq-open-source.html

深度學習最卓越的成就大多體現在與視覺相關的任務中,並且由卷積神經網絡驅動。雖然NLP研究已使用LSTM網絡和編碼器-解碼器架構在語言建模和翻譯方面取得了一定成功,但該領域也是直到注意力機制的出現才開始取得令人矚目的成就。

在處理語言時,每個 token 都會被輸入循環網絡(如LSTM)中,並對先前處理過的輸入保持了記憶。token可能是字符,可能是單詞,也可能是介於字符和單詞之間的某物。換句話說,每個token都是一個時間步,一個句子就像一個時間序列。這些循環模型通常不擅長處理間隔長時間的依賴關係。在處理序列時,他們很容易「忘記」較早之前的輸入,因為它們的梯度需要通過大量時間步進行傳播。通過梯度下降方法優化這些模型非常困難。

新的注意力機制則有助於緩衝這一阻礙。它引入快捷連接(shortcut connections),給網絡提供了一個能夠在早期的時間步上適應性地「回頭看」的選擇。這些連接可以幫助網絡決定生成特定輸出時哪些輸入是重要的。一個典型的例子就是機器翻譯:在生成輸出詞時,它通常會映射一個甚至多個特定的輸入詞。

2014年:Adam優化器

相關論文:

  • Adam: A Method for Stochastic Optimization,https://arxiv.org/abs/1412.6980

具體實現:

用PyTorch搭建實現Adam優化器,https://d2l.ai/chapter_optimization/adam.html

PyTorch Adam實現,https://pytorch.org/docs/master/_modules/torch/optim/adam.html

TensorFlow Adam實現,https://github.com/tensorflow/tensorflow/blob/v2.2.0/tensorflow/python/keras/optimizer_v2/adam.py#L32-L281

圖源:http://arxiv.org/abs/1910.11758

神經網絡通過運用優化器將損失函數(如平均分類誤差)最小化進行訓練。優化器負責調整網絡參數來使網絡學習目標。大多數優化器都是基於隨機梯度下降(Stochastic Gradient Descent, SGD)的變量。但是,也有很多此類優化器包含了可調節的參數,比如優化器本身的學習率。針對特定問題尋找正確設置不僅能減少訓練時間,還能通過找到局部最小損失函數來獲取更好的結果。

大型研究實驗室往往會運行成本高昂的、使用了複雜學習速率調度器(learning rate schedules)的超參數檢索來獲取簡單但對超參數敏感的優化器(比如SGD)中最好的那一個。有時候,他們的效果雖然超越了現有基準,但是往往是花費了大筆資金調節優化器的結果。科研論文里往往不會提到研究成本這些細節。也就是說,研究人員如果沒有足夠的資金預算來優化他們的優化器,就只能深陷「效果不佳」的泥潭。

Adam優化器主張使用梯度的一階矩和二階矩來自動調整學習率。研究也表明,運用Adam優化器所獲取的結果非常「魯棒」,且對超參數的調整不敏感。換句話說,Adam在大部分情況下無需太多調整就可以正常運行。就研究結果而言,目前一個被調整得很好的SGD表現更好,但Adam能幫助研究人員以較少成本進行研究。這是因為,如果實現的效果不好,研究者起碼知道並不是由於某個調整得不佳的優化器所造成的。

2014/2015年:生成對抗網絡(GAN)

相關論文:

  • Generative Adversarial Networks,https://arxiv.org/abs/1406.2661

  • Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks,https://arxiv.org/abs/1511.06434

具體實現:

  • 用PyTorch搭建DCGAN,https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html

  • 用TensorFlow搭建DCGAN,https://www.tensorflow.org/tutorials/generative/dcgan

圖源:https://developers.google.com/machine-learning/gan/gan_structure

生成模型(如變分自編器)必須對整個數據分布進行建模,圖像數據的像素極大,不像判別模型(discriminative model)一樣僅是區分貓貓與狗狗。生成模型的目標是建立看起來逼真的數據樣本,比如你可能在某處已經見過的人臉圖像。生成對抗網絡(GAN)就屬於這類生成模型。

GAN的基本內容是對生成器(generator)和判別器(discriminator)進行一前一後的訓練。判別器經過訓練來分辨真實圖像和生成圖像,而生成器的目標就是生成一些能夠騙過判別器的樣本。隨著訓練的深入,判別器識別偽造物體的能力會提高,但生成器也會越來越狡猾,並漸漸生成看起來更逼真的樣本。第一代GAN生成的圖像解析度低,模糊不清,並且訓練起來十分不穩定。但隨著時間的推移,研究者發明了許多改良版本,包括深度卷積生成對抗網絡(DCGAN)、CycleGAN、StyleGAN(v2)等等。這些改良版本基於第一代 GAN 的思路,成功生成高解析度的、擬真的圖像和視頻。

2015年:殘差網絡(ResNet)

相關論文:

  • Deep Residual Learning for Image Recognition,https://arxiv.org/abs/1512.03385

具體實現:

用PyTorch搭建ResNet,https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py

用TensorFlow搭建ResNet,https://github.com/tensorflow/tensorflow/blob/v2.2.0/tensorflow/python/keras/applications/resnet.py

研究人員基於AlexNet 的突破進行了一段時間的深入研究,提出了一系列基於卷積神經網絡的性能更佳的架構,如VGGNet、Inception等等。而ResNet 就是緊接這一波迅速發展的新架構的下一代神經網絡架構。迄今為止,ResNet的變體被視為各類任務的基準模型架構和更複雜架構的基本構建要素,並得到廣泛應用。

ResNet的出眾,不僅是因為它在ILSVRC 2015的分類挑戰賽中取得了第一名的好成績,還因為與其他網絡架構相比,它具有明顯的深度優勢。論文《Deep Residual Learning for Image Recognition》里介紹到該網絡最深的層數可以達到1000層,而且,雖然該網絡在基準任務上的表現略遜於101層和152層的網絡,但總體表現依然十分優秀。這類深度網絡的訓練是一個非常有挑戰性的優化問題,這是因為在訓練深層網絡的過程中,梯度會隨著層數的增加而遞減直至消失,這使得網絡優化異常艱難。梯度消失的問題在序列模型(sequence model)中也有出現。極少研究人員相信訓練層數如此深的網絡能達到出色而穩定的表現結果。

ResNet應用恆等快捷連接(identity shortcut connections)來促進梯度的流動。ResNet只需要逐層學習「變化量(Δ)」,難度較低,往往比學習整個變化量容易。這種恆等連接是「高速網絡」(Highway Network)里所提到的連接特例,反過來又受到長短期記憶網絡(LSTM)的門控機制(gating mechanism)的啟發。

2017年:Transformer模型

相關論文:

  • Attention is All You Need,https://arxiv.org/abs/1706.03762

具體實現:

PyTorch: 應用nn.Transformer和TorchText的序列到序列模型,https://pytorch.org/tutorials/beginner/transformer_tutorial.html

Tensorflow: 用於語言理解的Transformer模型,https://www.tensorflow.org/tutorials/text/transformer

HuggingFace的Transformers開發庫,https://github.com/huggingface/transformers

圖源:https://arxiv.org/abs/1706.03762

上文提到,具有注意力的序列到序列模表現地非常好,但由於該模型的循環特性需要用到序列算法,所以還存在一些缺點。它們很難並行處理,因為每次只運用一個步驟處理輸入。每個時間步都受到上一個時間步的影響。這也使得時間步很難擴展為長序列。即使具備了注意力機制,模型仍然在對複雜的長程依賴關係建模上面臨挑戰。大多數「工作」似乎都是在循環層中完成的。

http://jalammar.github.io/illustrated-transformer

Transformer模型的表現超出了所有人的期待。在接下來的幾年裡,Transfomer會成為大多數序列任務(如NLP)甚至是計算機視覺的架構標準。

2018年BERT和微調NLP模型

相關論文:

  • BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding,https://arxiv.org/abs/1810.04805

具體實現:

  • 具備Hugging Face的微調BERT,https://huggingface.co/transformers/training.html

預訓練指的是事先訓練一個模型來執行特定任務,然後將訓練過程中學到的參數作為初始值以繼續學習其他相關任務。直觀來說,就是如果一個模型已經學會進行圖像分類、區分貓貓和狗狗,也應當大概了解圖像和毛茸動物的一般特徵。當我們對這個能夠區分貓貓狗狗的模型進行微調,來對狐狸進行分類時,我們希望這個模型能夠比必須從頭開始訓練的模型表現得更好。同樣地,一個已經學會預測句子裡的下一個單詞的模型,也應該對人類語言模式有一定的了解。我們可能期望這個模型可以作為翻譯或情感分析等相關任務的好的初始化模型。

預訓練和微調在計算機視覺和自然語言處理中都已有了成功的應用。雖然預訓練和微調在計算機視覺領域中作為標準已有很長一段時間了,但要在 NLP 領域得到很好的應用,似乎還困難重重。NLP 中取得的 SOAT 結果,依舊還是由於使用了完全監督模型。

隨著Transformer的出現,研究者們終於可以在 NLP 任務中很好地應用預訓練模型,並隨之提出了ELMo、ULMFiT和OpenAI's GPT等方法。

BERT 便是預訓練模型在 NLP 領域取得的最新進展,許多人認為它開啟了NLP研究的新時代。BERT並不像其他大多數模型一樣進行預測下一個字的預訓練。它所接受的預訓練是預測整個句子被故意刪除/屏蔽的詞以及兩個句子之間是否有銜接關係。請注意:這些任務不需要用到標註的數據。它可以在任何文本上進行訓練,而且適用於篇幅長的文本。這個預訓練模型可能已學會語言的一些普遍特徵,之後可以微調來執行有監督的任務(比如回答問題和預測情緒)。

BERT在許多不同類型的任務中均有出色表現。之後BERT成為了XLNet、RoBERTa和ALBERT等先進技術的奠基之作。

2019/2020年及之後:BIG語言模型,自監督學習?

《慘痛的教訓》一文非常清晰地描述了深度學習發展史的趨勢。算法在並行化計算(更多數據)和更多模型參數方面所取得了進步,一次又一次地超越了所謂「更聰明的技術」。這個趨勢一直持續到2020年GPT-3的出現。GPT-3是一個由OpenAI創建的擁有1750億參數的巨大語言模型。儘管GPT-3的訓練目標和標準架構十分簡單,但卻展示了意料之外的良好泛化能力。

文章連結:http://www.incompleteideas.net/IncIdeas/BitterLesson.html

同樣的發展趨勢還包括對比性自監督學習(contrastive self-supervised learning,如SimCLR)等能更好利用未標記數據的方法。隨著模型變得越來越大,訓練速度變得越來越快,這些能夠高效利用網頁上的大量未標記數據以及能夠學習可遷移到其他任務上的通用知識的技術,將變得越來越具有價值,越來越普遍使用。

作者註:

  1. 本文不針對所提及的技術進行深入解析與代碼示例。我們主要介紹技術的歷史背景、相關論文連結和具體實現。建議有興趣的讀者能在不藉助現有代碼和高階開發庫的前提下將這些論文研究成果重新演示一遍,相信一定會有收穫。

  2. 本文聚焦於深度學習的主流領域,包括視覺、自然語言、語音和強化學習/遊戲等。

  3. 本文僅討論運行效果出色的官方或半官方開放原始碼實現。有些研究(比如Deep Mind的AlphaGo和OpenAI的Dota 2 AI)因為工程巨大、不容易被複製,所以在此沒有被重點介紹。

  4. 同一個時間段往往發布了許多相似的技術方法。但由於本文的主要目標是幫助初學者了解涵蓋多個領域的不同觀點,所以在每一類方法裡選取了一種技術作為重點。比方說,GAN模型有上百種,但如果你想學習GAN的整體概念,只需要學習任意一種GAN即可。

via https://dennybritz.com/blog/deep-learning-most-important-ideas/

如何加入?

關鍵字: