深度學習算法簡要綜述(上)

點擊上方“算法猿的成長“,關注公衆號,選擇加“星標“或“置頂”

總第 123 篇文章,本文大約 2300 字,閱讀大約需要  7 分鐘

原文:https://theaisummer.com/Deep-Learning-Algorithms/

作者:Sergios Karagiannakos

因爲文章有些長,所以會分成上下兩篇文章,分開發。

簡介

自從 2012 年在一個圖像識別比賽上,一個神經網絡的性能超過人類後,深度學習就火了起來,但當時只有少數人會預料到接下來會發生什麼。

在過去的十年裏,有越來越多的算法面世,也有越來越多的公司開始將這些算法應用到他們的日常業務中。

本文將嘗試介紹這些年裏,所有重要的深度學習算法和網絡結構,包括在計算機視覺和自然語言處理相關的應用中採用的算法。它們之中有的應用非常廣泛,但每個算法都有各自的優缺點。

本文的主要目標是讓你可以對該領域有一個通用的認識,並讓你知道在不同的特定場合裏應該採用哪種算法,因爲有的人可能對於從零開始學習感到迷茫和困惑。在閱讀完本文後,相信你一定能知道這些算法的定義以及如何使用。

目錄

本文目錄如下:

  1. 深度學習是什麼?

  2. 神經網絡(Neural Networks)

  3. 前向神經網絡(Feedforward Neural Networks, FNN)

  4. 卷積神經網絡(Convolutional Neural Networks, CNN)

  5. 循環神經網絡(Recurrent Neural Networks ,RNN)

  6. 遞歸神經網絡(Recursive Neural Network )

  7. 自動編碼器(AutoEncoders)

  8. 深度信念網絡(Deep Belief Networks)和受限制玻爾茲曼機(Restricted Boltzmann Machines)

  9. 生成對抗網絡(Generative Adversarial Networks)

  10. Transformers

  11. 圖神經網絡(Graph Neural Networks)

  12. 基於深度學習的自然語言處理

  • 詞嵌入(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 )

    遞歸神經網絡是另一種形式的循環神經網絡,不同點在於遞歸神經網絡是樹狀的結構,所以它可以在訓練集中建模層次結構。

    一般會應用在自然語言處理中的語音轉文本和語義分析,因爲這些任務和二叉樹、上下文還有基於自然語言的分析相關聯,但是遞歸神經網絡的速度會比循環神經網絡更慢。


    參考

    1. https://en.wikipedia.org/wiki/Deep_learning

    2. http://karpathy.github.io/neuralnets/

    3. https://brilliant.org/wiki/backpropagation/

    4. https://ruder.io/optimizing-gradient-descent/

    5. https://theaisummer.com/Neural_Network_from_scratch/

    6. https://theaisummer.com/Neural_Network_from_scratch_part2/

    7. https://theaisummer.com/Self_driving_cars/

    8. https://theaisummer.com/Sign-Language-Recognition-with-PyTorch/

    9. https://www.coursera.org/lecture/nlp-sequence-models/gated-recurrent-unit-gru-agZiL

    10. 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上有哪些比較好的計算機視覺/機器視覺的項目?


    歡迎關注我的微信公衆號--算法猿的成長,或者掃描下方的二維碼,大家一起交流,學習和進步!

     

    如果覺得不錯,在看、轉發就是對小編的一個支持!

    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章