深度学习这些年那些超重要的idea回顾总结
轉載:DASOU
本文作者Denny Britz按時間總結的深度學習比較重要的idea集錦,推薦新人看,幾乎給自12年以來最重要的idea 都列了出來,這些 idea 可以說得上是養活了無數人,大家都基于這些發了無數的論文,它們依次是:
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,簡直了,各種自動補全。
作者會在這里回顧深度學習領域經歷時間考驗被廣泛應用的一些想法,當然不能全面覆蓋。即使這樣,下面介紹到的深度學習技術,也已經涵蓋了理解現代深度學習研究所需的基本知識。如果你是該領域的萌新,那么很好,這會是你一個非常好的起點。
受作者個人知識和熟悉領域的影響,這個列表可能不夠全面,因為很多非常值得一提的子領域都沒有提到。但大多數人認可的主流領域,包括機器視覺、自然語言、語音和強化學習等就都包括在內了。
而且作者只討論有可以跑的官方或半官方開源實現的研究。有些工程量龐大而不容易被復現的研究,例如DeepMind的AlphaGo或OpenAI的Dota 2 AI,就不說啦。
2012年:用AlexNet和Dropout處理ImageNet數據集
相關論文:
ImageNet Classification with Deep Convolutional Neural Networks [1]:
https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks
Improving neural networks by preventing co-adaptation of feature detectors[2]:
https://arxiv.org/abs/1207.0580
One weird trick for parallelizing convolutional neural networks [14]:
https://arxiv.org/abs/1404.5997
實現代碼:
Pytorch版:
https://pytorch.org/hub/pytorch_vision_alexnet/
TensorFlow版:
https://github.com/tensorflow/models/blob/master/research/slim/nets/alexnet.py
?
插圖源:[1]
一般認為,是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中提到的一個技巧。
2013年:用深度強化學習來打Atari游戲
相關論文:
Playing Atari with Deep Reinforcement Learning [7]:
https://arxiv.org/abs/1312.5602
實現代碼:
PyTorch版:
https://pytorch.org/tutorials/intermediate/reinforcement_q_learning.html
TensorFlow版:
https://www.tensorflow.org/agents/tutorials/1_dqn_tutorial
插圖源:
https://deepmind.com/research/publications/human-level-control-through-deep-reinforcement-learning
基于最近圖像識別和GPU的發展,DeepMind成功訓練了一個可基于原始像素輸入來打Atari游戲的神經網絡。而且,同一個神經網絡能在不設置任何游戲規則的前提下學會打七種不同的游戲,這也證明了該方法的通用性。
Youtube 視頻:
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.3215
Neural Machine Translation by Jointly Learning to Align and Translate [3]:
https://arxiv.org/abs/1409.0473
代碼實現:
PyTorch版:
https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html
TensorFlow版:
https://www.tensorflow.org/addons/tutorials/networks_seq2seq_nmt
插圖源:Tensorflow中的開源Seq2Seq框架:
https://ai.googleblog.com/2017/04/introducing-tf-seq2seq-open-source.html
深度學習中很多最讓人印象深刻的結果都是和視覺相關的任務,而且由卷積神經網絡驅動。盡管NLP領域有通過用LSTM以及編碼器-解碼器架構在語言模型和翻譯上并取得一些成功,但直到注意力機制的出現,該領域才取得真正令人矚目的成就。
在處理語言時,每個token(可以是一個字符,單詞或介于兩者之間)都會被喂入一個循環網絡(如LSTM)中,該網絡會存儲先前處理過的輸入。換句話說,這就像一個時間序列的句子,每個token代表一個時間步。而這些循環模型在處理序列時很容易“忘記”較早的輸入,因此很難處理長距離依賴關系。由于其中梯度要通過很多時間步來傳播,這會導致梯度爆炸和梯度消失等問題,所以用梯度下降來優化循環模型也變得困難。
而引入注意力機制有助于緩解該問題,通過直接連接,它為網絡提供了一種自適應的能“回顧”較早時間步的方法。這些連接使網絡可以決定在生成特定輸出時,重要的輸入有哪些。簡單用翻譯來舉例子:當生成一個輸出詞時,通常有一個或多個特定的輸入單詞被注意力機制選中,作為輸出參考。
2014 – Adam?優化器
相關論文:
Adam: A Method for Stochastic Optimization ?[12]:
https://arxiv.org/abs/1412.6980
代碼實現:
Python版:
https://d2l.ai/chapter_optimization/adam.html
PyTorch版:
https://pytorch.org/docs/master/_modules/torch/optim/adam.html
TensorFlow版:
https://github.com/tensorflow/tensorflow/blob/v2.2.0/tensorflow/python/keras/optimizer_v2/adam.py#L32-L281
Y軸 – 最優解的概率
X軸 – 超參數優化的預算(#模型訓練)
來源:?http://arxiv.org/abs/1910.11758
神經網絡一般是通過用優化器最小化損失函數來進行訓練的,而優化器的作用則是搞明白怎么調節網絡參數使其能學習到指定目標。大部分優化器都是基于隨機梯度下降法(SGD)(https://ruder.io/optimizing-gradient-descent/)來改進。但要指出的是,很多優化器本身還包含可調參數,如學習率。所以,為特定問題找到正確的設置,不光能減少訓練時間,而且還能找到更好的損失函數局部最優,這往往也能使模型獲得更好結果。
之前,財大氣粗的研究室通常要跑特燒錢的超參搜索,來弄出一套給SGD用的學習率調節方案。雖然它能超過之前最好的表現,但往往也意味著要花大量的錢來調節優化器。這些細節在論文里一般不會提的,所以那些沒有相同預算來調優化器的貧窮研究員們,就總會被較差的結果卡住,還沒辦法。
而Adam給這些研究員帶了福音,它能通過梯度的一階和二階矩來自動調整學習率。而且實驗結果證明其非常可靠,對超參的選擇也不太敏感。換句話說,Adam拿來就能用,不用像其它優化器那樣要進行大量調參。盡管調優后的SGD可能獲得更好的結果,但Adam卻使研究變得更容易了。因為一旦出現問題時,你就知道應該不太可能是調參引起的問題。
2014/2015- 生成對抗網絡(GAN)
相關論文:
Generative Adversarial Networks [6] :
https://arxiv.org/abs/1406.2661
Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks [17]:
https://arxiv.org/abs/1511.06434
代碼實現:
PyTorch版:
https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html
TensorFlow版:
https://www.tensorflow.org/tutorials/generative/dcgan
圖2:模型樣本的可視化。最右邊的列顯示了最接近訓練示例的鄰近樣本,以證明模型并不是記住訓練集。樣本是隨機抽取的而不是精心挑選的。與深層生成模型的大多數其他可視化不同,這些圖像顯示的是模型分布中的實際樣本,而不是給定隱單元樣本的條件均值。而且這些樣本是不相關的,因為其采樣過程不依賴于馬爾可夫鏈混合,a)MNIST b)TFD c)CIFAR-10(全連接模型) d)CIFAR-IO(卷積判別器和反卷積生成器)
來源:https://developers.google.com/machine-learning/gan/gan_structure
生成模型(例如變分自動編碼器,VAE)的目標是生成以假亂真的數據樣品,比如不存在的人臉。這里,模型必須對整個數據分布進行建模(很多像素!),而不僅僅是像判別模型一樣給貓或狗分類,所以此類模型很難訓練。生成對抗網絡(GAN)就是這樣一種模型。
GAN的基本思想是同時訓練兩個網絡,生成器和判別器。生成器的目標是產生能欺騙判別器的樣本,而判別器經過訓練,則要分辨真實圖像和生成圖像。隨著訓練進行,判別器將變得更善于識別假圖片,而生成器也將變得更善于欺騙判別器,產生更逼真的樣本,這就是對抗網絡之為對抗所在。剛開始的GAN產生的還是模糊低分辨率的圖像,而且訓練起來相當不穩定。但隨著技術進步,類似于DCGAN[17]、Wasserstein GAN[25]、CycleGAN[26]、StyleGAN(v2)[27]等變體和改進都能產生更高分辨率的逼真圖像和視頻。
2015 –?殘差網絡(ResNet)
相關論文:
Deep Residual Learning for Image Recognition [13]:
https://arxiv.org/abs/1512.03385
代碼實現:
PyTorch版:
https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py
TensorFlow版:
https://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里門控機制的啟發。
2017 - Transformers
相關論文:
Attention is All You Need [5] :
https://arxiv.org/abs/1706.03762
代碼實現:
PyTorch版:
https://pytorch.org/tutorials/beginner/transformer_tutorial.html
TensorFlow版:
https://www.tensorflow.org/tutorials/text/transformer
HuggingFace Transformers庫:
https://github.com/huggingface/transformers
圖1:Transformer – 模型架構
來源:https://arxiv.org/abs/1706.03762
Seq2Seq+Atten模型(前面已經介紹過了)性能很好,但由于它的遞歸特性,導致需要按時序計算。所以很難并行,一次只能處理一步,而每一步又取決于前一個。這也使得它很難用在長序列數據上,即使有注意力機制,仍然難以對復雜的長距離依賴關系進行建模,而且其大部分工作還是在遞歸層里實現的。
Transformers直接解決了這些問題,丟掉了遞歸部分,取而代之的是多個前饋的自注意力層,并行處理所有輸入,并在輸入與輸出之間找到相對較短(容易用梯度下降優化)的路徑。這使得它的訓練速度非常快,易于擴展,并且能夠處理更多的數據。為了加入輸入位置信息(在遞歸模型中是隱式的),Transformers還用了位置編碼。要了解有關Transformer工作原理的更多信息,建議閱讀這個圖解博客。
(http://jalammar.github.io/illustrated-transformer/)
如果僅僅只是說Transformers比幾乎所有人預期的表現都要好,那簡直就是對它的侮辱。因為在接下來的幾年里,它不光表現更好,而且還直接干掉了RNN,成為了絕大多數NLP和其他序列任務標準架構,甚至還用在了機器視覺上。
2018 – BERT和精調的NLP模型
相關論文:
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding [9]:
https://arxiv.org/abs/1810.04805
代碼實現:
微調BERT的HuggingFace實現:
https://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]等新模型不斷傳頌,現在基本上整個領域人都知道了。
2019/2020及未來 –BIG語言模型,自監督學習
縱觀整個深度學習的歷史,最明顯的趨勢或許就是 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
推薦閱讀:
我的2022屆互聯網校招分享
我的2021總結
淺談算法崗和開發崗的區別
互聯網校招研發薪資匯總
對于時間序列,你所能做的一切.
什么是時空序列問題?這類問題主要應用了哪些模型?主要應用在哪些領域?
公眾號:AI蝸牛車
保持謙遜、保持自律、保持進步
發送【蝸牛】獲取一份《手把手AI項目》(AI蝸牛車著)
發送【1222】獲取一份不錯的leetcode刷題筆記
發送【AI四大名著】獲取四本經典AI電子書
總結
以上是生活随笔為你收集整理的深度学习这些年那些超重要的idea回顾总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7 matlab 7.0,win7
- 下一篇: 深度学习基础----GAE和VGAE