深度学习算法简要综述(下)
點擊上方“算法猿的成長“,關(guān)注公眾號,選擇加“星標(biāo)“或“置頂”
總第 124 篇文章,本文大約 3731 字,閱讀大約需要 10 分鐘
原文:https://theaisummer.com/Deep-Learning-Algorithms/
作者:Sergios Karagiannakos
因為文章有些長,所以會分成上下兩篇文章,分開發(fā)。
上一篇文章的鏈接:
深度學(xué)習(xí)算法簡要綜述(上)
本文目錄如下:
深度學(xué)習(xí)是什么?
神經(jīng)網(wǎng)絡(luò)(Neural Networks)
前向神經(jīng)網(wǎng)絡(luò)(Feedforward Neural Networks, FNN)
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNN)
循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks ,RNN)
遞歸神經(jīng)網(wǎng)絡(luò)(Recursive Neural Network )
自動編碼器(AutoEncoders)
深度信念網(wǎng)絡(luò)(Deep Belief Networks)和受限制玻爾茲曼機(Restricted Boltzmann Machines)
生成對抗網(wǎng)絡(luò)(Generative Adversarial Networks)
Transformers
圖神經(jīng)網(wǎng)絡(luò)(Graph Neural Networks)
基于深度學(xué)習(xí)的自然語言處理
詞嵌入(Word Embedding)
序列模型(Sequence Modeling)
基于深度學(xué)習(xí)的計算機視覺
定位和目標(biāo)檢測(Localization and Object Detection)
Single shot detectors(SSD)
語義分割(Semantic Segmentation)
姿勢估計(Pose Estimation)
上一篇文章介紹了前面 6 小節(jié),從深度學(xué)習(xí)的定義到介紹了神經(jīng)網(wǎng)絡(luò)、前向神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)以及遞歸神經(jīng)網(wǎng)絡(luò),接下來會介紹剩余的幾個算法以及兩大應(yīng)用方向。
7. 自動編碼器(AutoEncoders)
自動編碼器[11] 通常是作為一個非監(jiān)督算法使用,并且主要應(yīng)用在降維和壓縮。它們的技巧就是嘗試讓輸出等于輸入,另外,在其他工作中,也有嘗試重構(gòu)數(shù)據(jù)的做法。
自動編碼器包括一個編碼器和一個解碼器。編碼器接收一個輸入,然后將其編碼成一個低維的隱空間中的向量,然后解碼器負(fù)責(zé)將該向量進行解碼得到原始的輸入。結(jié)構(gòu)如下圖所示:
從上圖中我們可以知道,能從網(wǎng)絡(luò)中間的輸出(圖中 code 部分)得到一個更少維度的輸入的特征表示,這就是實現(xiàn)了降維和壓縮的工作。
另外,也可以根據(jù)這個思路來重新得到略微有些不同的輸入數(shù)據(jù),甚至是更好的數(shù)據(jù),這可以用于訓(xùn)練數(shù)據(jù)的增強,數(shù)據(jù)的去噪等
8. 深度信念網(wǎng)絡(luò)(Deep Belief Networks)和受限制玻爾茲曼機(Restricted Boltzmann Machines)
受限制玻爾茲曼機[12] 是帶有生成能力的隨機神經(jīng)網(wǎng)絡(luò),也就是它可以通過輸入來學(xué)習(xí)到一個概率分布。相比其他網(wǎng)絡(luò),它的最大特點就是只有輸入和隱藏層,不包含輸出。
在訓(xùn)練的前向部分,傳入一個輸入并產(chǎn)生一個對應(yīng)的特征表示,然后在反向傳播中,則從這個特征表示重構(gòu)原始的輸入(這個過程非常類似自動編碼器,但是它在單個網(wǎng)絡(luò)中實現(xiàn)的)。具體網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示:
用于協(xié)同過濾的受限制玻爾茲曼機多個受限制玻爾茲曼機(RBMs)疊加在一起就可以組成一個深度信念網(wǎng)絡(luò)[13]。它們看起來和全連接層非常相似,但不同點在于訓(xùn)練的方式。深度信念網(wǎng)絡(luò)的訓(xùn)練是根據(jù) RBMs 的訓(xùn)練過程來以成對的方式訓(xùn)練其網(wǎng)絡(luò)層。
然而最近深度信念網(wǎng)絡(luò)和受限制玻爾茲曼機的使用者越來越少,因為出現(xiàn)了生成對抗網(wǎng)絡(luò)(GANs)以及變異的自動編碼器。
9. 生成對抗網(wǎng)絡(luò)(Generative Adversarial Networks)
生成對抗網(wǎng)絡(luò)[14]是在 2016 年由 Ian Goodfellow 提出的一個算法,它基于這樣一個簡單但優(yōu)雅的想法:如果你想生成圖片數(shù)據(jù),你會怎么做呢?
做法可能是先創(chuàng)建兩個模型,首先訓(xùn)練第一個模型來生成假的數(shù)據(jù)(生成器),然后訓(xùn)練第二個模型來辨別真假數(shù)據(jù)(判別器),然后將它們放在一起訓(xùn)練,從而相互競爭。
隨著訓(xùn)練,生成器會越來越擅長生成圖片數(shù)據(jù),它的終極目標(biāo)就是成功欺騙判別器。判別器則具有越來越強的辨別真假數(shù)據(jù)的能力,它的終極目標(biāo)就是不會被欺騙。結(jié)果就是判別器會得到非常真實的假數(shù)據(jù),網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示:
生成對抗網(wǎng)絡(luò)的應(yīng)用包括視頻游戲、天文學(xué)圖片,時尚等。基本上,只要是圖片數(shù)據(jù),都可能會用到生成對抗網(wǎng)絡(luò),比如非常有名的 Deep Fakes,才有的就是生成對抗網(wǎng)絡(luò)。
10. Transformers
Transformers [15] 也是一個非常新的算法,主要應(yīng)用在語言類的應(yīng)用,并且逐漸替代了循環(huán)神經(jīng)網(wǎng)絡(luò)。它主要基于注意力(attention)機制,即強制讓網(wǎng)絡(luò)關(guān)注一個特定的數(shù)據(jù)點。
相比于擁有復(fù)雜的 LSTM 單元,注意力機制是根據(jù)輸入數(shù)據(jù)不同部分的重要性來賦予權(quán)重。注意力機制[16]也是一種權(quán)重層,它的目的是通過調(diào)整權(quán)重來優(yōu)先關(guān)注輸入的特定部分,而暫時不關(guān)注不重要的其他部分區(qū)域。
Transformers 實際上包含了一些堆疊的編碼器(組成了編碼層),一些堆疊的解碼器(解碼層)以及很多注意力網(wǎng)絡(luò)層(self-attentions 和 encoder-decoder attentions),如下圖所示:
http://jalammar.github.io/illustrated-transformer/Transformers 主要是用于解決有序序列數(shù)據(jù),比如自然語言處理的一些任務(wù),包括機器翻譯和文本摘要。目前 BERT 和 GPT-2 是兩個性能最好的預(yù)訓(xùn)練自然語言系統(tǒng),應(yīng)用在很多的自然語言處理任務(wù),它們也都是基于 Transformers 的。
11. 圖神經(jīng)網(wǎng)絡(luò)(Graph Neural Networks)
一般來說非結(jié)構(gòu)化的數(shù)據(jù)并不是非常適合使用深度學(xué)習(xí)的算法。實際上現(xiàn)實生活中確實有很多應(yīng)用的數(shù)據(jù)都是非結(jié)構(gòu)化的,然后以圖的格式組織起來的。比如社交網(wǎng)絡(luò)、化學(xué)混合物、知識圖譜、空間數(shù)據(jù)等。
圖神經(jīng)網(wǎng)絡(luò)[17]的目標(biāo)就是建模圖數(shù)據(jù),也就是可以識別到一個圖里結(jié)點之間的關(guān)系并生成一個數(shù)值型的表征數(shù)據(jù),類似于一個嵌入向量(embedding)。因此,它們可以應(yīng)用到其他的機器學(xué)習(xí)模型中,用于所有類型的任務(wù),比如聚類、分類等。
12. 基于深度學(xué)習(xí)的自然語言處理
詞嵌入(Word Embedding)
詞嵌入是通過將單詞轉(zhuǎn)成數(shù)值向量表示來獲取單詞之間的語義和語法的相似性。這個做法是很有必要的,因為神經(jīng)網(wǎng)絡(luò)只能接受數(shù)值類型的數(shù)據(jù),所以必須將單詞和文本編碼為數(shù)值。
Word2Vec [18] ?是最常用的一種方法,它嘗試學(xué)習(xí)嵌入向量(embedding)并且可以通過上下文預(yù)測當(dāng)前的單詞(CBOW)或者是基于單詞來預(yù)測上下文的單詞(Skip-Gram)。實際上 Word2Vec 也是一個兩層的神經(jīng)網(wǎng)絡(luò),并且輸入和輸出都是單詞。單詞將通過獨熱編碼(one-hot encoding)的方式輸入到神經(jīng)網(wǎng)絡(luò)中。在 CBOW 的例子中,輸入是相鄰的單詞,輸出是期望的單詞,而在 Skip-Gram 的例子中,輸入和輸出正好相反,輸入是單詞,輸出是上下文單詞。
Glove[19] 是另一種模型,它在 Word2Vec 的基礎(chǔ)上結(jié)合了矩陣分解的方法,比如隱藏語義分析(Latent Semantic Analysis),這是一個被證明在全局文本分析上效果很好,但不能捕捉到局部的上下文信息。通過結(jié)合Word2Vec 和矩陣分解,可以很好利用它們各自的優(yōu)勢。
FastText[20] 是 Facebook 提出的算法,它采用字符級別的表示,而不是單詞。
上下文單詞嵌入(Contextual Word Embeddings)通過采用循環(huán)神經(jīng)網(wǎng)絡(luò)來替代 Word2Vec,用于預(yù)測一個序列中某個單詞的下一個單詞。這個方法可以捕捉到單詞之間的長期獨立性,并且每個向量都包含著當(dāng)前單詞和歷史單詞的信息。最有名的一個版本是 ELMo[21],它是一個兩層雙向 LSTM 網(wǎng)絡(luò)。
注意力機制[22] 和 Transformers 正如之前介紹 Transformers 所說,逐漸替代了 RNN 的作用,它們可以實現(xiàn)賦予最相關(guān)的單詞的權(quán)重,并遺忘掉不重要的單詞
序列模型(Sequence Modeling)
序列模型是自然語言處理中不可分割的一部分,因為它在大量常見的應(yīng)用中都會出現(xiàn),比如機器翻譯[23],語音識別,自動完成以及情感分類。序列模型可以處理序列輸入,比如一篇文檔的所有單詞。
舉例說明一下,假設(shè)你想將一句話從英文翻譯為法文。
為了實現(xiàn)這個翻譯,你需要一個序列模型(seq2seq)[24]。Seq2seq 模型包括一個編碼器和一個解碼器,編碼器將序列(本例子中的英語句子)作為輸入,然后將輸入在隱空間的表示作為輸出,這個表示會輸入到解碼器中,并輸出一個新的序列(也就是法語句子)。
最常見的編碼器和解碼器結(jié)構(gòu)是循環(huán)神經(jīng)網(wǎng)絡(luò)(大部分是 LSTMs),因為它們非常擅長捕捉到長期獨立性,而 Transformers 模型會更快并且更容易實現(xiàn)并行化。有時候,還會結(jié)合卷積神經(jīng)網(wǎng)絡(luò)來提升準(zhǔn)確率。
BERT[25] 和 GPT-2 [26] 被認(rèn)為是目前最好的兩個語言模型,它們實際上都是基于序列模型的 Transformers
13. 基于深度學(xué)習(xí)的計算機視覺
定位和目標(biāo)檢測(Localization and Object Detection)
圖片定位[27] 是指在一張圖片中定位到一個物體,并且用一個邊界框?qū)⑵溥M行標(biāo)記的任務(wù),而在目標(biāo)檢測中還包括了對物體的分類工作。
這幾個相關(guān)聯(lián)的工作都是通過一個基礎(chǔ)的模型(以及其升級版本)來進行處理,這個模型就是 RCNN。R-CNN以及它的升級版本 Fast RCNN,Faster RCNN 采用了候補區(qū)域(region proposals)和卷積神經(jīng)網(wǎng)絡(luò)。
以 Faster RCNN 為例,網(wǎng)絡(luò)的一個外部系統(tǒng)會給出一些以固定大小的邊界框形式展現(xiàn)的候補區(qū)域,這些區(qū)域可能包含目標(biāo)物體。這些邊界框會通過一個 CNN (比如 AlexNet)進行分類和糾正,從而判斷該區(qū)域是否包含物體,物體是什么類別,并且修正邊界框的大小。
Single shot detectors(SSD)
https://github.com/karolmajek/darknet-pjreddieSingle-shot detectors 以及其最著名的代表成員-- YOLO(You Only Look Once)[28] 并沒有采用候補區(qū)域的想法,它們采用的是一組預(yù)定義好的邊界框。
這些邊界框會傳給 CNN 并分別預(yù)測得到一個置信度分?jǐn)?shù),同時檢測每個框居中的物體,并進行分類,最終會僅保留分?jǐn)?shù)最高的一個邊界框。
這些年,YOLO 也有了好幾個升級版本--YOLOv2,YOLOv3,YOLO900 分別在速度和準(zhǔn)確率上都得到了提升。
語義分割(Semantic Segmentation)
計算機視覺中一個基礎(chǔ)的工作就是基于上下文來將一張圖片中每個像素都進行分類,也就是語義分割[29]。在這個領(lǐng)域里,最常用的兩個模型就是全卷積網(wǎng)絡(luò)(Fully Convolutional Networks, FCN)和 U-Nets。
**Fully Convolutional Networks(FCN)**是一個編碼器-解碼器的網(wǎng)絡(luò)結(jié)構(gòu),也就是包含了卷積和反卷積的網(wǎng)絡(luò)。編碼器先將輸入圖片進行下采樣來捕捉語義和上下文信息,而解碼器是進行上采樣操作來恢復(fù)空間信息。通過這種方法可以使用更小的時間和空間復(fù)雜度來實現(xiàn)恢復(fù)圖片的上下文。
U-Nets 是基于一個獨特的想法--跨層連接(skip-connections)。它的編碼器和解碼器有相同的大小,skip-connections 可以將信息從第一層傳遞到最后一層,從而增加了最終輸出的維度大小。
姿勢估計(Pose Estimation)
姿勢估計[30] 是指定位圖片或者視頻中人物的關(guān)節(jié)點,它可以是 2D 或者是 3D 的。在 2D 中,我們估計的就是每個關(guān)節(jié)點的坐標(biāo) (x, y),而 3D 中,坐標(biāo)就是 (x, y, z)。
PoseNet[31] 是該領(lǐng)域[31]中最常用的模型,它使用的也是卷積神經(jīng)網(wǎng)絡(luò)。將圖片輸入到 CNN 中,然后采用單姿勢或者多姿勢算法來檢測姿勢,每個姿勢都會得到一個置信度分?jǐn)?shù)和一些關(guān)鍵點坐標(biāo),最終是僅保留一個分?jǐn)?shù)最高的。
總結(jié)
上述就是本文的所有內(nèi)容,非常簡單的介紹了深度學(xué)習(xí)中幾個常用的算法模型,包括了卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)、自動編碼器,也有最近幾年才提出的生成對抗網(wǎng)絡(luò)、Tranformers,另外也分別介紹了深度學(xué)習(xí)的兩大應(yīng)用,自然語言處理和計算機視覺中常見的方向。
當(dāng)然,本文也僅僅是非常簡單的科普了這些算法和應(yīng)用方向的情況,后續(xù)如果想繼續(xù)深入了解,可以查看參考的鏈接,會更詳細(xì)介紹每個具體的算法模型。
參考
https://en.wikipedia.org/wiki/Deep_learning
http://karpathy.github.io/neuralnets/
https://brilliant.org/wiki/backpropagation/
https://ruder.io/optimizing-gradient-descent/
https://theaisummer.com/Neural_Network_from_scratch/
https://theaisummer.com/Neural_Network_from_scratch_part2/
https://theaisummer.com/Self_driving_cars/
https://theaisummer.com/Sign-Language-Recognition-with-PyTorch/
https://www.coursera.org/lecture/nlp-sequence-models/gated-recurrent-unit-gru-agZiL
https://theaisummer.com/Bitcon_prediction_LSTM/
https://theaisummer.com/Autoencoder/
https://towardsdatascience.com/restricted-boltzmann-machines-simplified-eab1e5878976
http://deeplearning.net/tutorial/DBN.html
https://theaisummer.com/Generative_Artificial_Intelligence/
https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html
https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html
https://theaisummer.com/Graph_Neural_Networks/
https://pathmind.com/wiki/word2vec
https://medium.com/@jonathan_hui/nlp-word-embedding-glove-5e7f523999f6
https://research.fb.com/blog/2016/08/fasttext/
https://allennlp.org/elmo
https://blog.floydhub.com/attention-mechanism/
https://www.tensorflow.org/tutorials/text/nmt_with_attention
https://blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html
https://github.com/google-research/bert
https://openai.com/blog/better-language-models/
https://theaisummer.com/Localization_and_Object_Detection/
https://theaisummer.com/YOLO/
https://theaisummer.com/Semantic_Segmentation/
https://theaisummer.com/Human-Pose-Estimation/
https://github.com/tensorflow/tfjs-models/tree/master/posenet
https://www.fritz.ai/pose-estimation/
精選AI文章
1.?RS(1)--10分鐘了解什么是推薦系統(tǒng)
2.RS(2)--從文本數(shù)據(jù)到用戶畫像
3.深度學(xué)習(xí)算法簡要綜述(上)
4.常見的數(shù)據(jù)增強項目和論文介紹
5.實戰(zhàn)|手把手教你訓(xùn)練一個基于Keras的多標(biāo)簽圖像分類器
精選python文章
1.?Python 基礎(chǔ)入門--簡介和環(huán)境配置
2.?python版代碼整潔之道
3.?快速入門 Jupyter notebook
4.?Jupyter 進階教程
5.?10個高效的pandas技巧
精選教程資源文章
1.?[資源分享] TensorFlow 官方中文版教程來了
2.?[資源]推薦一些Python書籍和教程,入門和進階的都有!
3.?[Github項目推薦] 推薦三個助你更好利用Github的工具
4.?Github上的各大高校資料以及國外公開課視頻
5.?GitHub上有哪些比較好的計算機視覺/機器視覺的項目?
歡迎關(guān)注我的微信公眾號--算法猿的成長,或者掃描下方的二維碼,大家一起交流,學(xué)習(xí)和進步!
?如果覺得不錯,在看、轉(zhuǎn)發(fā)就是對小編的一個支持!
總結(jié)
以上是生活随笔為你收集整理的深度学习算法简要综述(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微服务框架Jersey:快速入门
- 下一篇: [资源分享] Github上八千Star