2012年至今,細數深度學習領域這些年取得的經典成果
自2006年Hinton發表經典論文以來,深度學習領域又取得了哪些突破性成果呢?
Google Brain前員工Denny Britz 在本文中進行了回顧整理,按時間順序介紹了從2012年到2020年深度學習領域的數項關鍵性科研成就。
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.3215Neural
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
上文提到,具有注意力的序列到序列模表現地非常好,但由于該模型的循環特性需要用到序列算法,所以還存在一些缺點。它們很難并行處理,因為每次只運用一個步驟處理輸入。每個時間步都受到上一個時間步的影響。這也使得時間步很難擴展為長序列。即使具備了注意力機制,模型仍然在對復雜的長程依賴關系建模上面臨挑戰。大多數“工作”似乎都是在循環層中完成的。
Transformer模型有效解決了上述問題。模型應用多個前饋自注意層(feed-forward self-attention layers)取代循環層(recurrence),從而完全消除循環過程,從而能夠平行處理所有輸入并且生成輸入和輸出間相對較短的路徑(這就意味著梯度下降更易于優化)。在這種情況下,模型能夠進行快速訓練,易于擴展并處理更多數據。此外,Transformer模型使用了位置編碼來向網絡傳遞輸入順序(這是循環模型無法做到的)。一開始學習Transformer模型也許有些摸不著頭腦,但如果想了解更多Transformer模型的應用原理,可以參考以下鏈接里的講解: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)等能更好利用未標記數據的方法。隨著模型變得越來越大,訓練速度變得越來越快,這些能夠高效利用網頁上的大量未標記數據以及能夠學習可遷移到其他任務上的通用知識的技術,將變得越來越具有價值,越來越普遍使用。雷鋒網(公眾號:雷鋒網)