AlexNet 和 Dropout:AlexNet 直接打開了深度學習時代,奠定了之後 CV 裡面 CNN 模型基本結構,Dropout 也不用說,都成了基本配置。
深度強化學習的Atari:深度強化學習的開山之作,DQN 之後也是打開了一條新路,大家開始在各種遊戲上進行嘗試。
Seq2Seq+Atten:這個在 NLP 領域的影響沒得說,有段時間,甚至都在說任何 NLP 任務都能 Seq2Seq+Atten 來解決,而且這篇其實還為之後純 Attention 的 Transformer 打下了基礎。
Adam Optimizer:不多說,訓練模型的心頭好。
Generative Adversarial Networks (GANs):這個也是從14年開始幾年裡火得一塌糊塗,大家都在搞各種各樣的 GAN,直到去年 StyleGAN 這種集大成模型出來,才算是差不多消停。引起各種爭議的 Deepfake 是成果之一,最近都有看到人用它做假資料。
Residual Networks:和 Dropout,Adam 一樣變成了基本配置,模型要深全靠它。
Transformers:純 Attention 模型,直接給 NLP 裡的 LSTM 給取代了,而且在其他領域也慢慢取得很好效果,同時也為之後 BERT 預訓練模型打下基礎。
BERT and 精調 NLP 模型:利用可擴展性非常強大的 Transformer,加上大量數據,加上一個簡單的自監督訓練目標,就能夠獲得非常強大的預訓練模型,橫掃各種任務。最近的一個是 GPT3,自從給出 API 後,網絡上展現出了各種特別 fancy 的demo,簡直了,各種自動補全。
作者會在這裡回顧深度學習領域經歷時間考驗被廣泛應用的一些想法,當然不能全面覆蓋。即使這樣,下面介紹到的深度學習技術,也已經涵蓋了理解現代深度學習研究所需的基本知識。如果你是該領域的萌新,那麼很好,這會是你一個非常好的起點。深度學習是個瞬息萬變的領域,海量的研究論文和想法可能會令人感覺有點跟不上。就算是經驗豐富的研究人員,有時也會很懵圈,很難告訴公司PR真正的突破是哪些。
按照「時間是檢驗真理的唯一標準」,作者在這篇文章回顧了那些經受住時間考驗的研究,它們或它們的改進已被反覆用在各種研究和應用上,效果也有目共睹。
如果你想看完這篇文章之後就馬上入門,那你就想多了。最好的方法是,搞明白和復現下面提到的經典論文,這可以給你打下非常好的基礎,而且對你之後看懂最新研究和開展自己項目也會很有幫助。
此外,按下面這樣時間順序瀏覽論文也很有用,可以幫你了解當前的技術從何而來,以及它們最初為何被發明出來。
簡單來說,作者在這篇文章會總結出儘量少,但涵蓋了理解現代深度學習研究所需的大部分基本知識的研究。
關於深度學習,一個特點就是其應用領域,包含了機器視覺、自然語言、語音和強化學習等。而這些領域都用著差不多的技術,比如:一個曾用深度學習搞計算機視覺的人,能很快就在NLP研究中取得成果。
即使特定的網絡架構有些不同,但概念、方法和代碼都是相通的。本文將介紹來自不同領域的一些研究,但進入正題前,需要聲明一下:
這篇文章不是為下面提到的研究提供深入詳解或代碼示例,因為長篇複雜的論文其實很難被總結成一個簡短的段落。相反,作者只會簡要概述這些技術和相關歷史背景,並提供其論文和實現連結。
如果你想學有所得,最好在不用現有代碼庫或高級庫的情況下,從頭開始用PyTorch復現一遍論文中的實驗。
受作者個人知識和熟悉領域的影響,這個列表可能不夠全面,因為很多非常值得一提的子領域都沒有提到。但大多數人認可的主流領域,包括機器視覺、自然語言、語音和強化學習等就都包括在內了。而且作者只討論有可以跑的官方或半官方開源實現的研究。有些工程量龐大而不容易被復現的研究,例如DeepMind的AlphaGo或OpenAI的Dota 2 AI,就不說啦。一些研究的選擇可能有些隨意。因為總會有些相似技術在相近時間內被發布出來,而本文目的也不是對其進行全面回顧,而是要向萌新介紹各個領域的各種研究。
例如,GAN可能有幾百種變體,但無論你要研究哪種,GAN的基本概念都是不可不知的。
一般認為,是AlexNet開啟了近年來深度學習和人工智慧研究的大浪潮。而AlexNet其實就是個基於Yann LeCun早年提出的LeNet 的深度卷積網絡。
獨特之處在於,AlexNet通過結合GPU強大性能和其算法優越而獲得了非常大的提升,遠遠超越之前對ImageNet數據集進行分類的其他方法。它也證明了神經網絡的確是有效的!
AlexNet也是最早用Dropout[2]的算法之一,也是自此Dropout成為提高各種深度學習模型泛化能力的關鍵組件。
AlexNet架構是由卷積層,非線性ReLU和最大池化串成的一系列模塊,而現在這些都已被大家接受,成為了標準機器視覺的網絡結構了。
如今,由於像PyTorch這樣的庫已非常強大,跟最新一些架構相比,AlexNet實現已經非常簡單了,現在用幾行代碼就能實現。
值得注意的是,AlexNet的許多實現都用的是它的一個變種,加入了這篇論文One weird trick for parallelizing convolutional neural networks中提到的一個技巧。
Playing Atari with Deep Reinforcement Learning [7]:https://arxiv.org/abs/1312.5602https://pytorch.org/tutorials/intermediate/reinforcement_q_learning.htmlhttps://www.tensorflow.org/agents/tutorials/1_dqn_tutorial基於最近圖像識別和GPU的發展,DeepMind成功訓練了一個可基於原始像素輸入來打Atari遊戲的神經網絡。而且,同一個神經網絡能在不設置任何遊戲規則的前提下學會打七種不同的遊戲,這也證明了該方法的通用性。https://www.youtube.com/watch?v=V1eYniJ0Rnk其中,強化學習與監督學習(如圖像分類)的不同之處在於,強化學習的智能體必須在一段時間步(如一盤遊戲)中學習最大化獎勵總和,而不僅僅是預測標籤。
由於其智能體是能直接與環境交互的,而且每個行動都會影響下一個行動,因此,訓練其數據並不是獨立同分布的。
這也使得許多強化學習模型的訓練很不穩定,但這個問題可以用經驗重播(experience replay)等技術來解決。
儘管沒有明顯的算法創新,但這項研究巧妙結合了各種現有技術,比如在GPU上訓練卷積神經網絡和經驗重播,以及一些數據處理技巧,從而取得了超出大家預期令人印象深刻的結果。
這也讓人們更有信心去擴展深度強化學習技術,以解決更複雜的任務,比如:圍棋,多塔2,星際爭霸2等。
而且從這篇論文後,Atari遊戲也變成了強化學習研究的測試標準。最初的方法儘管超過了人類的表現,但只能在7種遊戲取得這樣的表現。
而之後幾年,這些想法被不斷拓展,在越來越多的遊戲中擊敗人類。直到最近,技術才攻克了全部57款遊戲並超過了所有人類水平,其中的《蒙特祖瑪的復仇》以其需要長期規划著稱,被認為是最難攻克的遊戲之一。
2014年:編碼器-解碼器網絡加注意力機制(Seq2Seq+Atten模型)Sequence to Sequence Learning with Neural Networks [4]:https://arxiv.org/abs/1409.3215Neural Machine Translation by Jointly Learning to Align and Translate [3]:https://arxiv.org/abs/1409.0473https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html
https://www.tensorflow.org/addons/tutorials/networks_seq2seq_nmt深度學習中很多最讓人印象深刻的結果都是和視覺相關的任務,而且由卷積神經網絡驅動。
儘管NLP領域有通過用LSTM以及編碼器-解碼器架構在語言模型和翻譯上並取得一些成功,但直到注意力機制的出現,該領域才取得真正令人矚目的成就。
在處理語言時,每個token(可以是一個字符,單詞或介於兩者之間)都會被餵入一個循環網絡(如LSTM)中,該網絡會存儲先前處理過的輸入。
換句話說,這就像一個時間序列的句子,每個token代表一個時間步。而這些循環模型在處理序列時很容易「忘記」較早的輸入,因此很難處理長距離依賴關係。
由於其中梯度要通過很多時間步來傳播,這會導致梯度爆炸和梯度消失等問題,所以用梯度下降來優化循環模型也變得困難。
而引入注意力機制有助於緩解該問題,通過直接連接,它為網絡提供了一種自適應的能「回顧」較早時間步的方法。這些連接使網絡可以決定在生成特定輸出時,重要的輸入有哪些。
簡單用翻譯來舉例子:當生成一個輸出詞時,通常有一個或多個特定的輸入單詞被注意力機制選中,作為輸出參考。
Adam: A Method for Stochastic Optimization [12]:https://arxiv.org/abs/1412.6980https://d2l.ai/chapter_optimization/adam.htmlhttps://pytorch.org/docs/master/_modules/torch/optim/adam.htmlhttps://github.com/tensorflow/tensorflow/blob/v2.2.0/tensorflow/python/keras/optimizer_v2/adam.py#L32-L281神經網絡一般是通過用優化器最小化損失函數來進行訓練的,而優化器的作用則是搞明白怎麼調節網絡參數使其能學習到指定目標。
大部分優化器都是基於隨機梯度下降法(SGD)(https://ruder.io/optimizing-gradient-descent/)來改進。
但要指出的是,很多優化器本身還包含可調參數,如學習率。所以,為特定問題找到正確的設置,不光能減少訓練時間,而且還能找到更好的損失函數局部最優,這往往也能使模型獲得更好結果。
之前,財大氣粗的研究室通常要跑特燒錢的超參搜索,來弄出一套給SGD用的學習率調節方案。雖然它能超過之前最好的表現,但往往也意味著要花大量的錢來調節優化器。
這些細節在論文裡一般不會提的,所以那些沒有相同預算來調優化器的貧窮研究員們,就總會被較差的結果卡住,還沒辦法。
而Adam給這些研究員帶了福音,它能通過梯度的一階和二階矩來自動調整學習率。而且實驗結果證明其非常可靠,對超參的選擇也不太敏感。
換句話說,Adam拿來就能用,不用像其它優化器那樣要進行大量調參。儘管調優後的SGD可能獲得更好的結果,但Adam卻使研究變得更容易了。
因為一旦出現問題時,你就知道應該不太可能是調參引起的問題。
Generative Adversarial Networks [6] :https://arxiv.org/abs/1406.2661Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks [17]:https://arxiv.org/abs/1511.06434https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.htmlhttps://www.tensorflow.org/tutorials/generative/dcgan圖2:模型樣本的可視化。最右邊的列顯示了最接近訓練示例的鄰近樣本,以證明模型並不是記住訓練集。樣本是隨機抽取的而不是精心挑選的。與深層生成模型的大多數其他可視化不同,這些圖像顯示的是模型分布中的實際樣本,而不是給定隱單元樣本的條件均值。而且這些樣本是不相關的,因為其採樣過程不依賴於馬爾可夫鏈混合,a)MNIST b)TFD c)CIFAR-10(全連接模型) d)CIFAR-IO(卷積判別器和反卷積生成器)生成模型(例如變分自動編碼器,VAE)的目標是生成以假亂真的數據樣品,比如不存在的人臉。這裡,模型必須對整個數據分布進行建模(很多像素!),而不僅僅是像判別模型一樣給貓或狗分類,所以此類模型很難訓練。生成對抗網絡(GAN)就是這樣一種模型。GAN的基本思想是同時訓練兩個網絡,生成器和判別器。生成器的目標是產生能欺騙判別器的樣本,而判別器經過訓練,則要分辨真實圖像和生成圖像。
隨著訓練進行,判別器將變得更善於識別假圖片,而生成器也將變得更善於欺騙判別器,產生更逼真的樣本,這就是對抗網絡之為對抗所在。剛開始的GAN產生的還是模糊低解析度的圖像,而且訓練起來相當不穩定。
但隨著技術進步,類似於DCGAN[17]、Wasserstein GAN[25]、CycleGAN[26]、StyleGAN(v2)[27]等變體和改進都能產生更高解析度的逼真圖像和視頻。
Deep Residual Learning for Image Recognition [13]:https://arxiv.org/abs/1512.03385https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.pyhttps://github.com/tensorflow/tensorflow/blob/v2.2.0/tensorflow/python/keras/applications/resnet.py研究者們在AlexNet的基礎上,又發明了基於卷積神經網絡的性能更好的架構,如VGGNet[28]、Inception[29]等。
而ResNet則是這一系列進展中的最重要的突破所在。時至今日,ResNet變體已被用作各種任務的基準模型架構,也被用於更複雜架構的基礎。
RseNet之所以特別,除了其在ILSVRC 2015分類挑戰賽中獲得冠軍外,更在於其相比於其他網絡架構的深度。
論文中提到的網絡最深的有1000層,儘管在基準任務上比101和152層的略差些,但仍然表現出色。因為梯度消失問題,訓練這樣一個深度的網絡其實是非常具有挑戰的,序列模型也有同樣的問題。
在此之前,很少有研究者認為訓練如此深的網絡還能有這麼穩定的結果。
ResNet使用捷徑連接的方式來幫助梯度傳遞。一種理解是,ResNet僅需要學習從一層到另一層的「差分」,這比學習一個完全轉換要簡單些。
此外,ResNet中的殘差連接算是Highway Networks[30]的一種特殊情況,而Highway Networks 又受到了LSTM裡門控機制的啟發。
Attention is All You Need [5] :https://arxiv.org/abs/1706.03762https://pytorch.org/tutorials/beginner/transformer_tutorial.htmlhttps://www.tensorflow.org/tutorials/text/transformerHuggingFace Transformers庫:https://github.com/huggingface/transformersTransformer – 模型架構
Seq2Seq+Atten模型(前面已經介紹過了)性能很好,但由於它的遞歸特性,導致需要按時序計算。所以很難並行,一次只能處理一步,而每一步又取決於前一個。
這也使得它很難用在長序列數據上,即使有注意力機制,仍然難以對複雜的長距離依賴關係進行建模,而且其大部分工作還是在遞歸層裡實現的。
Transformers直接解決了這些問題,丟掉了遞歸部分,取而代之的是多個前饋的自注意力層,並行處理所有輸入,並在輸入與輸出之間找到相對較短(容易用梯度下降優化)的路徑。
這使得它的訓練速度非常快,易於擴展,並且能夠處理更多的數據。為了加入輸入位置信息(在遞歸模型中是隱式的),Transformers還用了位置編碼。
要了解有關Transformer工作原理的更多信息,建議閱讀這個圖解博客。
(http://jalammar.github.io/illustrated-transformer/)如果僅僅只是說Transformers比幾乎所有人預期的表現都要好,那簡直就是對它的侮辱。
因為在接下來的幾年裡,它不光表現更好,而且還直接幹掉了RNN,成為了絕大多數NLP和其他序列任務標準架構,甚至還用在了機器視覺上。
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding [9]:https://arxiv.org/abs/1810.04805https://huggingface.co/transformers/training.html預訓練指訓練一個模型來執行某個任務,之後用學到的參數來作為初始化參數來學習一個相關任務。
這個其實很直觀,一個已經學會分類貓或狗圖像的模型,應該已經學會了一些關於圖像和毛茸茸動物的基礎知識。
當這個模型被微調用來對狐狸進行分類時,可以預計它比一個從頭開始學習的模型更好。同樣,一個學會了預測句子中下一個詞的模型,應該已經學會了一些關於人類語言模型的知識。
那麼它的參數對於相關任務(如翻譯或情感分析)也會是一個很好的初始化。
預訓練和微調已經在計算機視覺和NLP領域取得了成功,雖然在計算機視覺中其早已成為標準,但如何在NLP領域更好的發揮作用似乎還有些挑戰。大多數最佳結果仍然出自完全監督模型。
隨著ELMo [34], ULMFiT [35]等方法出現,NLP研究者終於也能開始做預訓練的工作了(之前詞向量其實也算),特別是對Transformer的應用,更是產生了一系列如 GPT和BERT的方法。
BERT算是預訓練比較新的成果,很多人認為它開創了NLP研究新紀元。它沒有像大多數預訓練模型一樣,訓練預測下一個單詞,而是預測句子中被掩蓋(故意刪除)的單詞,以及兩個句子是否相鄰。
注意,這些任務不需要標註數據,它可以在任何文本上進行訓練,而且可以是一大堆文本! 於是預訓練好的模型,就能學會了一些語言的一般屬性,之後就可以進行微調了,用來解決監督任務,如問答或情感預測。
BERT在各種任務中的表現都非常好,出來就屠榜。而像HuggingFace這樣的公司也坐上浪頭,讓用於NLP任務的微調BERT模型變得容易下載和使用。
之後,BERT又被XLNet[31]和RoBERTa[32]以及ALBERT[33]等新模型不斷傳頌,現在基本上整個領域人都知道了。
縱觀整個深度學習的歷史,最明顯的趨勢或許就是 Sutton 說的 the bitter lesson(苦痛的一課)。如裡面說的,能夠利用更好並行(更多數據)並且有更多模型參數的算法,能一次又一次地戰勝一些所謂 "更聰明的技術"。
這種趨勢似乎到2020年還在持續,OpenAI的GPT-3模型,一個擁有1750億參數的龐大語言模型,儘管其訓練目標和架構都很簡單,但卻表現出了意想不到的泛化性(各種效果非常好的demo)。
有著同樣趨勢的還有contrastive self-supervised learning等方法,如SimCLR(https://arxiv.org/abs/2002.05709),它能更好的利用無標籤數據。
隨著模型變得越來越大,訓練速度越來越快,也讓能有效利用網上的大量無標註數據集,學習可遷移通用知識的技術正變得越來越有價值。
https://dennybritz.com/blog/deep-learning-most-important-ideas/
參考文獻:
[1] ImageNet Classification with Deep Convolutional Neural Networks
Alex Krizhevsky, Ilya Sutskever, Geoffrey E Hinton (2012)
Advances in Neural Information Processing Systems 25
[http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf] [Semantic Scholar] [Google Scholar]
[2] Improving neural networks by preventing co-adaptation of feature detectors
Geoffrey E. Hinton, Nitish Srivastava, Alex Krizhevsky, Ilya Sutskever, Ruslan R. Salakhutdinov (2012)
arXiv:1207.0580 \[cs\]
[http://arxiv.org/abs/1207.0580] [Semantic Scholar] [Google Scholar]
[3] Neural Machine Translation by Jointly Learning to Align and Translate
Dzmitry Bahdanau, Kyunghyun Cho, Yoshua Bengio (2016)
arXiv:1409.0473 \[cs, stat\]
[http://arxiv.org/abs/1409.0473] [Semantic Scholar] [Google Scholar]
[4] Sequence to Sequence Learning with Neural Networks
Ilya Sutskever, Oriol Vinyals, Quoc V. Le (2014)
arXiv:1409.3215 \[cs\]
[http://arxiv.org/abs/1409.3215] [Semantic Scholar] [Google Scholar]
[5] Attention Is All You Need
Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin (2017)
arXiv:1706.03762 \[cs\]
[http://arxiv.org/abs/1706.03762] [Semantic Scholar] [Google Scholar]
[6] Generative Adversarial Networks
Ian J. Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, Yoshua Bengio (2014)
arXiv:1406.2661 \[cs, stat\]
[http://arxiv.org/abs/1406.2661] [Semantic Scholar] [Google Scholar]
[7] Playing Atari with Deep Reinforcement Learning
Volodymyr Mnih, Koray Kavukcuoglu, David Silver, Alex Graves, Ioannis Antonoglou, Daan Wierstra, Martin Riedmiller (2013)
arXiv:1312.5602 \[cs\]
[http://arxiv.org/abs/1312.5602] [Semantic Scholar] [Google Scholar]
[8] The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks
Jonathan Frankle, Michael Carbin (2019)
arXiv:1803.03635 \[cs\]
[http://arxiv.org/abs/1803.03635] [Semantic Scholar] [Google Scholar]
[9] BERT: Pre-training of Deep Bi