深度学习算法简要综述(上)
點擊上方“算法猿的成長“,關注公眾號,選擇加“星標“或“置頂”
總第 123 篇文章,本文大約 2300 字,閱讀大約需要 ?7 分鐘
原文:https://theaisummer.com/Deep-Learning-Algorithms/
作者:Sergios Karagiannakos
因為文章有些長,所以會分成上下兩篇文章,分開發。
簡介
自從 2012 年在一個圖像識別比賽上,一個神經網絡的性能超過人類后,深度學習就火了起來,但當時只有少數人會預料到接下來會發生什么。
在過去的十年里,有越來越多的算法面世,也有越來越多的公司開始將這些算法應用到他們的日常業務中。
本文將嘗試介紹這些年里,所有重要的深度學習算法和網絡結構,包括在計算機視覺和自然語言處理相關的應用中采用的算法。它們之中有的應用非常廣泛,但每個算法都有各自的優缺點。
本文的主要目標是讓你可以對該領域有一個通用的認識,并讓你知道在不同的特定場合里應該采用哪種算法,因為有的人可能對于從零開始學習感到迷茫和困惑。在閱讀完本文后,相信你一定能知道這些算法的定義以及如何使用。
目錄
本文目錄如下:
深度學習是什么?
神經網絡(Neural Networks)
前向神經網絡(Feedforward Neural Networks, FNN)
卷積神經網絡(Convolutional Neural Networks, CNN)
循環神經網絡(Recurrent Neural Networks ,RNN)
遞歸神經網絡(Recursive Neural Network )
自動編碼器(AutoEncoders)
深度信念網絡(Deep Belief Networks)和受限制玻爾茲曼機(Restricted Boltzmann Machines)
生成對抗網絡(Generative Adversarial Networks)
Transformers
圖神經網絡(Graph Neural Networks)
基于深度學習的自然語言處理
詞嵌入(Word Embedding)
序列模型(Sequence Modeling)
基于深度學習的計算機視覺
定位和目標檢測(Localization and Object Detection)
Single shot detectors(SSD)
語義分割(Semantic Segmentation)
姿勢預估(Pose Estimation)
在這篇文章將介紹深度學習是什么到遞歸神經網絡部分的內容,下一篇則介紹剩余的幾種網絡模型、計算機視覺以及自然語言處理在深度學習方面的應用。
1. 深度學習是什么?
根據維基百科的定義[1]:
深度學習(也稱為深度結構化學習或者微分編程)是機器學習算法這個大家庭的一個成員,它是基于人工神經網絡和表示學習,并且它的學習可以是有監督的、半監督或者無監督。
在我看來,深度學習是受到人類大腦處理數據和創造用于制定決策的模式而誕生的一系列算法,并拓展和提升一個叫做人工神經網絡的單模型結構。
2. 神經網絡(Neural Networks)
和人類的大腦一樣,神經網絡[2] 也包括了很多神經元。每個神經元接受輸入的信號,然后乘以對應的權重,并求和然后輸入到一個非線性函數。這些神經元相互堆積在一起,并按照層進行組織。如下圖左所示:
如果按照大腦神經元的方式來實現呢?結果如上圖右所示,神經網絡是一個優秀的函數近似者。
假設每個行為和每個系統最終都可以用一個數學函數來表示(有的可能是非常復雜的函數),如果能找到這樣一個函數,我們就可以了解系統的一切,但尋找這一個函數是非常困難的,所以我們需要對神經網絡進行評估。
反向傳播
神經網絡通過大量的數據以及**反向傳播[3]**這樣一個迭代算法來學習到目標函數。我們將數據傳入網絡中,然后它輸出結果,接著我們將輸出的結果和預期結果進行比較(通過一個損失函數),然后根據兩者的差異來調整權重。
不斷重復這個過程。調整權重的辦法是通過一個非線性優化技術--隨機梯度下降[4]來實現的。
在訓練一段時間后,網絡將可以輸出非常好的結果,因此,訓練到此結束。也就是說我們得到了一個近似的函數,當給網絡一個未知結果的輸入數據,網絡會根據學習到的近似函數輸出結果。
這里舉個例子來更好說明這個過程。比如我們現在有個任務是需要識別帶有樹的圖片。我們將任意類別的圖片(也就是訓練圖片)都傳給網絡,然后網絡會輸出一個結果,因為我們已經知道圖片中是否有樹,所以我們只需要將網絡的結果和該圖片的真實類別(是否有樹)進行比較,然后調整網絡。
隨著訓練圖片的增加,網絡犯的錯誤會越來越少。現在我們可以傳給網絡一張未知的圖片(非訓練圖片),然后網絡會告訴我們這張圖片是否包含了樹。
在過去這些年里,研究人員對這個原始的想法提出了很多非常令人驚訝的改進和提升,每種新的網絡結構都是對應特定的某些問題,并且得到更好的準確率和運算速度。接下來我們將逐一分類介紹這些模型。
3. 前向神經網絡(Feedforward Neural Networks, FNN)
前向神經網絡通常采用的都是全連接層[5],也就是說每一層的神經元都和下一層的所有神經元連接在一起。這個結構也被叫做多層感知器,最初誕生于 1958 年,如下圖所示。單層的感知器只能學習到線性分離模型,但是一個多層感知器能夠學習到數據之間的非線性關系。
http://www.sci.utah.edu/多層感知器在分類和回歸任務上有不錯的表現,但相比其他的機器學習算法,多層感知器并不容易收斂。另外,訓練數據越多,多層感知器的準確率也越高。
4. 卷積神經網絡(Convolutional Neural Networks, CNN)
卷積神經網絡采用了一個卷積函數[6]。沒有采用層與層之間的神經元都全部進行連接,卷積層只讓兩層之間部分的神經元進行連接(也就是感受野)。
在某種程度上,CNN 是嘗試在 FNN 的基礎上進行正則化來防止過擬合(也就是訓練得到的模型泛化能力差),并且也能很好的識別數據之間的空間關系。一個簡單的 CNN 的網絡結構如下圖所示
因為能夠很好識別數據之間的空間關系,所以 CNN 主要用于計算機視覺方面的應用,比如圖像分類、視頻識別、醫學圖像分析以及自動駕駛[7],在這些領域上都取得超過人類的識別精度。
此外,CNN 也可以和其他類型的模型很好的結合在一起使用,比如循環神經網絡和自動編碼器,其中一個應用例子就是符號語言識別[8]。
5. 循環神經網絡(Recurrent Neural Networks ,RNN)
循環神經網絡非常適合時間相關的數據,并且應用于時間序列的預測。該網絡模型會采用反饋的形式,也就是將輸出返回到輸入中。你可以把它看成是一個循環,從輸出回到輸入,將信息傳遞回網絡,因此,網絡模型具有記住歷史數據并應用到預測中的能力。
為了提高模型的性能,研究者修改了原始的神經元,創造了更復雜的結構,比如 GRU 單元[9] 和 LSTM 單元[11],分別如下圖所示。LSTM 在自然語言處理的任務中應用得非常廣泛,包括翻譯、語音生成、從文本生成語音等。
6. 遞歸神經網絡(Recursive Neural Network )
遞歸神經網絡是另一種形式的循環神經網絡,不同點在于遞歸神經網絡是樹狀的結構,所以它可以在訓練集中建模層次結構。
一般會應用在自然語言處理中的語音轉文本和語義分析,因為這些任務和二叉樹、上下文還有基于自然語言的分析相關聯,但是遞歸神經網絡的速度會比循環神經網絡更慢。
參考
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/
精選AI文章
1.??RS(1)--10分鐘了解什么是推薦系統
2.?RS(2)--從文本數據到用戶畫像
3.?常見的數據增強項目和論文介紹
4.?機器學習入門學習資料推薦
5.初學者的機器學習入門實戰教程!
精選python文章
1.?Python 基礎入門--簡介和環境配置
2.?python版代碼整潔之道
3.?快速入門 Jupyter notebook
4.?Jupyter 進階教程
5.?10個高效的pandas技巧
精選教程資源文章
1.?[資源分享] TensorFlow 官方中文版教程來了
2.?[資源]推薦一些Python書籍和教程,入門和進階的都有!
3.?[Github項目推薦] 推薦三個助你更好利用Github的工具
4.?Github上的各大高校資料以及國外公開課視頻
5.?GitHub上有哪些比較好的計算機視覺/機器視覺的項目?
歡迎關注我的微信公眾號--算法猿的成長,或者掃描下方的二維碼,大家一起交流,學習和進步!
如果覺得不錯,在看、轉發就是對小編的一個支持!
總結
以上是生活随笔為你收集整理的深度学习算法简要综述(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WAP PUSH解析(2)——WSP以及
- 下一篇: 程序人生:给所有程序员的27个建议,抽空