理解神經網絡:從神經元到RNN、CNN、深度學習

2020-12-11 手機鳳凰網

本文為 AI 研習社編譯的技術博客,原標題 :

Understanding Neural Networks. From neuron to RNN, CNN, and Deep Learning

作者 |vibhor nigam

翻譯 | gezp123、Dylan的琴

校對 | 鄧普斯•傑弗 審核 | 醬番梨 整理 | 立魚王

原文連結:

https://towardsdatascience.com/understanding-neural-networks-from-neuron-to-rnn-cnn-and-deep-learning-cd88e90e0a90


神經網絡是目前最流行的機器學習算法之一。隨著時間的推移,證明了神經網絡在精度和速度方面,比其他的算法性能更好。並且形成了很多種類,像CNN(卷積神經網絡),RNN,自編碼,深度學習等等。神經網絡對於數據科學和或者機器學習從業者,就像線性回歸對於統計學家一樣。因此,對神經網絡是什麼有一個基本的理解是有必要的,比如,它是怎麼構成的,它能處理問題的範圍以及它的局限性是什麼。這篇文章嘗試去介紹神經網絡,從一個最基礎的構件,即一個神經元,深入到它的各種流行的種類,像CNN,RNN等。

神經元是什麼?

正如其名字所表明,神經網絡的靈感來源於人類大腦的神經結構,像在一個人類大腦中,最基本的構件就叫做神經元。它的功能和人的神經元很相似,換句話說,它有一些輸入,然後給一個輸出。在數學上,在機器學習中的神經元就是一個數學函數的佔位符,它僅有的工作就是對輸入使用一個函數,然後給一個輸出。


這種神經元中使用的函數,在術語上通常叫做激活函數。主要的激活函數有5種,date,step,sigmoid,tanh和ReLU。這些都將在接下來進行詳細地描述。

激活函數

階躍函數

階躍函數定義為


其中,如果x的值大於等於零,則輸出為1;如果x的值小於零,則輸出為0。我們可以看到階躍函數在零點是不可微的。目前,神經網絡採用反向傳播法和梯度下降法來計算不同層的權重。由於階躍函數在零處是不可微的,因此它並不適用於梯度下降法,並且也不能應用在更新權重的任務上。

為了克服這個問題,我們引入了sigmoid函數。

Sigmoid函數

一個Sigmoid函數或者logistic函數的數學定義如下:


當z或自變量趨於負無窮大時,函數的值趨於零;當z趨於正無窮大時,函數的值趨於1。需要記住的是,該函數表示因變量行為的近似值,並且是一個假設。現在問題來了,為什麼我們要用Sigmoid函數作為近似函數之一。這有一些簡單的原因。

1. 它在可以捕獲數據的非線性。雖然是一個近似的形式,但非線性的概念是模型精確的重要本質。

2. sigmoid函數在整個過程中是可微的,因此可以與梯度下降和反向傳播方法一起使用,以計算不同層的權重。

3. 假設一個因變量服從一個sigmoid函數的固有假設的高斯分布的自變量,這是一個一般分布,我們可以獲得許多隨機發生的事件,這是一個好的的一般分布開始。

然而,sigmoid函數也面臨著梯度消失的問題。從圖中可以看出,一個sigmoid函數將其輸入壓縮到一個非常小的輸出範圍[0,1],並具有非常陡峭的漸變。因此,輸入空間中仍然有很大的區域,即使是很大的變化也會在輸出中產生很小的變化。這被稱為梯度消失問題。這個問題隨著層數的增加而增加,從而使神經網絡的學習停留在一定的水平上。

Tanh函數

Tanh(z)函數是sigmoid函數的縮放版本,它的輸出範圍變成了[-1,1],而不是[0,1].


在某些地方使用Tanh函數代替sigmoid函數的原因,通常是因為當數據分布在0周圍時,其導數值更高。一個更高的梯度對於更好的學習速率更有幫助。下圖展示了兩個函數Tanh和sigmoid的梯度值圖像。

對於Tanh函數,當輸入在[-1,1]之間時,得到導數值在[0.42,1]之間。


另一方面,對於sigmoid函數,當輸入在[-1,1]之間時,得到導數值在[0.20,0.25]之間。


正如我們從上圖看到的,Tanh函數比Sigmoid函數具有更大範圍的導數,因此具有一個更好的學習速率。然而在Tanh函數中,依然會出現梯度消失的問題。

ReLU函數

在深度學習模型中,修正線性單元(ReLU)是最常用的激活函數。當函數輸入負數時,函數輸出0,對於任意正數x,函數輸出本身。因此它可以寫成f(x)=max(0,x)

其圖像看起來如下:


Leaky ReLU是一個其中最出名的一種變形,對於正數輸入,其輸出和ReLU一樣,但是對於所有負數輸出,不再是0,而是具有一個常數斜率(小於1).

  • 這個斜率是在構建模型時,需要使用者設置的參數。它通常被叫做alpha,例如,使用者設置alpha=0.3.這個激活函數則表示為f(x)=max(0.3x,x)。這具有一個理論優點,通過x在所有值處都能有一個影響,使得在x中包含的信息被充分利用。

    激活函數還有有其他可以替代的選擇,但是對於從業者和研究人員,發現一般情況通過改變使用其他激活函數代替ReLU,並不能帶來足夠的收益。在平常實踐中,ReLU比Sigmoid或者tanh函數表現的更好。

    神經網絡

    到目前為止,我們已經介紹完了神經元和激活函數,它們一起是構建任意神經網絡的基本構件。現在,我們更深入的了解什麼是神經網絡,以及它們不同的種類。我強烈的建議你,如果對於神經元和激活函數有任何的疑惑,回過頭去複習一下它們。

    在理解一個神經網絡之前,有必要去理解神經網絡中的Layer(層),一層Layer是一組有輸入輸出的神經元。每一個神經元的輸入通過其所屬的激活函數處理,例如,這是一個小型神經網絡。


    網絡的最左邊的layer叫做輸入層,最右邊的layer叫做輸出層(在這個例子中,只有一個節點)。中間的layer叫做隱藏層,因為其值不能在訓練集中觀察到。我們也可以說,我們的神經網絡例子,具有3個輸入單元(不包括偏置單元),3個隱藏單元,1個輸出單元。

    任何神經網絡都至少包含1個輸入層和1個輸出層。隱藏層的數量在不同的網絡中不同,取決於待解決問題的複雜度。

    另一個需要做筆記的重點是每一個隱藏層可以有一個不同的激活函數,例如,在同一個神經網絡中,隱藏層layer1可能使用sigmoid函數,隱藏層layer2可能使用ReLU,後續的隱藏層layer3使用Tanh。激活函數的選擇取決於待解決的問題以及使用的數據的類型。

    現在對於一個可以做精確預測的神經網絡,在其中每一層的每一個神經元都學習到了確定的權值。學習權值的算法叫做反向傳播,其中的細節超過了本文的範圍。

    具有超過一個隱藏層的神經網絡通常被叫做深度神經網絡。

    卷積神經網絡(CNN)

    卷積神經網絡(CNN)是神經網絡的一種,在計算機視覺領域應用非常廣泛。它的名字來源於組成其隱藏層的種類。CNN的隱藏層通常包含卷積層,池化層,全連接層,以及歸一化層。這些層的名字簡潔的表明了,使用了卷積和池化函數等作為激活函數,而不是使用之前定義的普通激活函數。


    想要詳細的了解CNN,需要先理解什麼是卷積和池化。這些概念都來源於計算機視覺領域,定義如下:

    • 卷積:卷積作用在兩個信號(1維)或者兩張圖片(2維)上:你可以認為其中一個作為"輸入"信號(或圖片),另一個作為一個"濾波器"(也叫作kernel,核),然後生成第三個信號作為輸出。

      用非專業的表述,就是在輸入信號上使用一個濾波器。本質上,使用一個kernel(核)乘以輸入信號,得到調整後的輸出信號。數學上,兩個函數f和g的卷積定義如下:


      這就是輸出函數和kernel(核)函數的點乘運算。

      在圖像處理案例中,可視化一個卷積核在整個圖片上滑動是非常簡單的,每個像素的值都是在這個過程中改變的。


      池化(pooling):池化是一個基於採樣的離散化處理。它的目標是對輸入(圖片,隱藏層,輸出矩陣等)進行下採樣,來減小輸入的維度,並且包含局部區域的特徵。

      • 有兩個主要的池化種類,max和min pooling。正如其名字表明的,max pooling是在選擇區域選擇中最大值,min pooling是在選擇區域中選擇最小值。


        因此,正如我們所看到的,卷積神經網絡CNN是一個基本的深度神經網絡,它包含多個隱藏層,除之前介紹的非線性激活函數之外,這些層還使用了卷積和池化函數。

        更多詳情可以在以下網站找到:

        http://colah.github.io/posts/2014-07-Conv-Nets-Modular/

        循環神經網絡(RNN)

        循環神經網絡RNN,正如其名,是一個非常重要的神經網絡種類,在自然語言處理領域應用非常廣泛。在一個普通的神經網絡中,一個輸入通過很多層的處理後,得到一個輸出,假設了兩個連續的輸入是互相獨立不相關的。

        然而這個假設在許多生活中的情節並不成立。例如,如果一個人相應預測一個給定時間的股票的價格,或者相應預測一個句子中的下一個單詞,考慮與之前觀測信息的依賴是有必要的。

        RNNs被叫做循環,因為它們對於一個序列中的每一個元素執行相同的任務,它們的輸出依賴於之前的計算。另一個理解RNN的角度是,認為它們有"記憶",能夠捕捉到到目前為止的計算信息。理論上,RNN能夠充分利用任意長序列中的信息,但是實踐上,它們被限制在可以回顧僅僅一些步驟。

        結構展示,一個RNN如下圖所示。它可以想像成一個多層神經網絡,每一層代表每一個確定時刻t的觀測。


        RNN在自然語言處理上展現了非常巨大的成功,尤其是它們的變種LSTM,它可以比RNN回顧得更多的。如果你對LSTM感興趣,我建議你參考一下文章:

        http://colah.github.io/posts/2015-08-Understanding-LSTMs/

        在這篇文章中,我嘗試去全面的介紹神經網絡,從最基本的結構,一個神經元,到最有效的神經網絡類型。這篇文章的目標是使更多的的讀者了解神經網絡如何從0開始構建,它被應用在哪一些領域,以及它的一些最成功的種類有哪些。

        我明白有還有很多其他流行的神經網絡種類,將打算在下一篇文章中涉及,如果你想要早一點覆蓋到某些主題,請向我建議。雷鋒網雷鋒網雷鋒網

        參考:

        • http://ufldl.stanford.edu/wiki/index.php/Neural_Networks

          https://stats.stackexchange.com/questions/101560/tanh-activation-function-vs-sigmoid-activation-function

          https://www.kaggle.com/dansbecker/rectified-linear-units-relu-in-deep-learning

          http://ufldl.stanford.edu/tutorial/supervised/MultiLayerNeuralNetworks/

          https://www.cs.cornell.edu/courses/cs1114/2013sp/sections/S06_convolution.pdf

          http://machinelearninguru.com/computer_vision/basics/convolution/image_convolution_1.html

          http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/

          想要繼續查看該篇文章相關連結和參考文獻?

          點擊理解神經網絡:從神經元到RNN、CNN、深度學習】即可訪問:

          https://ai.yanxishe.com/page/TextTranslation/1580

          AI入門、大數據、機器學習免費教程

          35本世界頂級原本教程限時開放,這類書單由知名數據科學網站 KDnuggets 的副主編,同時也是資深的數據科學家、深度學習技術愛好者的Matthew Mayo推薦,他在機器學習和數據科學領域具有豐富的科研和從業經驗。

          點擊連結即可獲取:https://ai.yanxishe.com/page/resourceDetail/417

相關焦點

  • 循環神經網絡(RNN)入門帖:向量到序列,序列到序列,雙向RNN,馬爾科夫化
    作者:David 9地址:http://nooverfit.com/rnn似乎更擅長信息的保存和更新,而cnn似乎更擅長精確的特徵提取;rnn輸入輸出尺寸靈活,而cnn尺寸相對刻板。聊到循環神經網絡RNN,我們第一反應可能是:時間序列 (time sequence)。
  • 深度學習之CNN簡介
    深度學習概述傳統的機器學習和深度學習一個很重要的差別就是特徵的自動提取。深度學習現在更適合處理一些原始信息的特徵,比如圖片識別,音頻,視頻等。比如圖片可以通過像素作為原始的特徵,通過卷積神經網絡不斷的提取特徵,最後再在這些特徵上進行學習。對於音頻就是通過聲音的聲波作為特徵。
  • 零基礎入門深度學習 |最終篇:遞歸神經網絡
    循環神經網絡實現了前者,通過將長度不定的輸入分割為等長度的小塊,然後再依次的輸入到網絡中,從而實現了神經網絡對變長輸入的處理。遞歸神經網絡是一種表示學習,它可以將詞、句、段、篇按照他們的語義映射到同一個向量空間中,也就是把可組合(樹/圖結構)的信息表示為一個個有意義的向量。比如上面這個例子,遞歸神經網絡把句子"the country of my birth"表示為二維向量[1,5]。有了這個『編碼器』之後,我們就可以以這些有意義的向量為基礎去完成更高級的任務(比如情感分析等)。
  • CNN(卷積神經網絡)、RNN(循環神經網絡)、DNN(深度神經網絡)的內部網絡結構有什麼區別?
    在實際應用中,所謂的深度神經網絡DNN,往往融合了多種已知的結構,包括卷積層或是LSTM單元。這裡的DNN應該特指全連接的神經元結構,並不包含卷積單元或是時間上的關聯。因此,如果一定要將DNN、CNN、RNN等進行對比,也未嘗不可。其實,如果我們順著神經網絡技術發展的脈絡,就很容易弄清這幾種網絡結構發明的初衷,和他們之間本質的區別,希望對大家有所幫助。
  • Facebook:易於解釋的神經元可能會阻礙深度神經網絡的學習
    易於解釋的神經元對於提升神經網絡的性能來說是必要的嗎?Facebook 的研究者給出了出人意料的答案。AI 模型能「理解」什麼?為什麼能理解這些東西?回答這些問題對於復現和改進 AI 系統至關重要。但遺憾的是,計算機科學家在解釋深度神經網絡(DNN)方面的能力遠遠落後於我們利用這些網絡獲取有用成果的能力。
  • 《神經網絡和深度學習》系列文章三:sigmoid神經元
    本節譯者:哈工大SCIR碩士生 徐偉 (https://github.com/memeda)聲明:我們將在每周一,周四,周日定期連載該書的中文翻譯,如需轉載請聯繫wechat_editors@ir.hit.edu.cn,未經授權不得轉載。
  • 什麼是深度學習? - 45分鐘理解深度神經網絡和深度學習
    為了使學生們能夠更好、更快理解和使用深度神經網絡和深度學習,特撰寫此文。本文的目的是幫助非人工智慧領域的學生(主要是計算機圖形學領域的學生及筆者的學生)來搞懂深度學習(這裡指狹義的深度學習,即基於DNN的深度學習)的基本概念和方法。筆者嘗試用通俗的語言,從函數逼近論的角度來闡釋深度神經網絡的本質。
  • CNN,RNN,LSTM都是什麼?| 小白深度學習入門
    直觀理解深度學習基本概念    2. 白話詳解ROC和AUC    3. 什麼是交叉熵    4. 神經網絡的構成、訓練和算法    5. 深度學習的興起:從NN到DNN     6.注意:前饋神經網絡(Feedforward NN)指每個神經元只與前一層的神經元相連,數據從前向後單向傳播的 NN。其內部結構不會形成有向環(對比後面要講到的 RNN/LSTM)。它是最早被發明的簡單 NN 類型,前面講到的 NN、DNN 都是前饋神經網絡。每個卷積層由若干卷積單元組成——可以想像成經典 NN 的神經元,只不過激活函數變成了卷積運算。
  • RNN遞歸神經網絡原理介紹+數字識別應用
    +圖片識別應用(附源碼)BP神經網絡+TensorFlow做圖片識別前言:自己學習研究完CNN卷積神經網絡後,很久的一段時間因為要完成自己的畢業設計就把更新博客給耽擱了。介紹CNN卷積神經網絡和RNN遞歸神經網絡都是由BP神經網絡演化而來的。CNN卷積神經網絡主要應用在圖像識別領域;而RNN遞歸神經網絡的改進版LSTM網絡主要應用於自然語言處理中;為什麼我介紹RNN是叫——遞歸神經網絡?這之前是一個困擾我很久的問題。
  • Facebook:易於解釋的神經元可能阻礙深度神經網絡的學習
    編輯:張倩、杜偉易於解釋的神經元對於提升神經網絡的性能來說是必要的嗎?Facebook 的研究者給出了出人意料的答案。AI 模型能「理解」什麼?為什麼能理解這些東西?回答這些問題對於復現和改進 AI 系統至關重要。
  • 典型的深度學習算法(一):卷積神經網絡(CNN)
    通過上一篇文章,相信大家對深度學習的概念、原理已經有了大致了解,近期企通查將會對深度學習中的幾種典型算法進行介紹。在深度學習領域中,已經驗證的典型成熟算法有卷積神經網絡(CNN)、循環神經網絡(RNN)、生成對抗網絡(GAN)、深度強化學習(DRL)等,下面企通查將帶領大家對典型的深度學習算法之一——卷積神經網絡(CNN)一探究竟。
  • 深度學習網絡之RNN(遞歸神經網絡)
    遞歸神經網絡(recursive neural network)是具有樹狀階層結構且網絡節點按其連接順序對輸入信息進行遞歸的人工神經網絡,是深度學習算法之一
  • 深度學習建模方法,首先需要了解建模的思路
    人工智慧領域發展到現在,已經不像人們認為的那樣遙不可及,只要編程熟練,即使是半路出家的人,也可以很快學會編程並使用深度學習進行建模。主流程式語言操作入門教程,機器學習與深度學習基礎篇包括如何挑選學習書籍、實踐和培訓、數據分析處理編程技術以及反向傳播、循環神經網絡和attention機制、卷積神經網絡模型介紹等內容。應該從以下幾方面學習編程技術,如:線性代數、矩陣相關性和空間秩、一個訓練集的構建過程以及論文數據和最優化目標設置等等。
  • CNN與RNN中文文本分類-基於TensorFlow 實現
    1.3,對很多的網絡層實現了更高層次的封裝和實現,甚至還整合了如Keras這樣優秀的一些高層次框架,使得其易用性大大提升。其中,copy_data.sh用於從每個分類拷貝6500個文件,cnews_group.py用於將多個文件整合到一個文件中。
  • 深度 | 從AlexNet到殘差網絡,理解卷積神經網絡的不同架構
    這是深度學習背後的哲學,不存在內置硬編碼特徵提取器。它將提取和分類模塊整合進一個系統,它通過辨別不同圖像的表徵進行提取,根據監督數據進行分類。這樣的系統包括多層感知機,即多層神經元互相緊密相連的神經網絡。深度 vanilla 神經網絡就具備大量參數,因為缺乏充分的訓練樣本,它訓練出的系統會發生模型過擬合的情況。
  • 斯坦福CS231N深度學習與計算機視覺第六彈:神經網絡結構與神經元激勵函數
    QQ群(鑑於微信人數限制問題)組織進行學習交流。)傳遞,然後在軸突處受到激勵(上圖中兩個神經網絡分別是2層和3層的神經網絡。輸出層 輸出層是神經網絡中比較特殊的一層,由於輸出的內容通常是各類別的打分/概率(在分類問題中),我們通常都不在輸出層神經元中加激勵函數。
  • 《神經網絡和深度學習》系列文章四:神經網絡的結構
    本節譯者:哈工大SCIR碩士生 徐偉 (https://github.com/memeda)聲明:我們將在每周一,周四,周日定期連載該書的中文翻譯,如需轉載請聯繫wechat_editors@ir.hit.edu.cn,未經授權不得轉載。
  • 深度學習網絡之CNN
    深度學習的提出:2006年,Hinton提出了深度學習,兩個主要的觀點是:深度學習取得成功的原因:深度學習的思想:深度神經網絡的基本思想是通過構建多層網絡,對目標進行多層表示,以期通過多層的高層次特徵來表示數據的抽象語義信息,獲得更好的特徵魯棒性。
  • 神經網絡與深度學習
    其中有一種很厲害的模型,那就是人工神經網絡。這種模型從早期的感知機發展而來,對任何函數都有較好的擬合性,但自上個世紀90年代一直到2012年深度學習集中爆發前夕,神經網絡受制於計算資源的限制和較差的可解釋性,一直處於發展的低谷階段。
  • 深度學習背後的基礎-神經網絡揭秘
    最近, 深度學習三傑獲得了計算機界最重要的圖靈獎, 它們的貢獻都集中在對深度學習的根據神經網絡的理論突破。 今天我們看到的所有和人工智慧有關的偉大成就, 從阿法狗到自動駕駛, 從海量人臉識別到對話機器人, 都可以歸功於人工神經網絡的迅速崛起。那麼對於不了解神經網絡的同學如何入門? 神經網絡的技術為什麼偉大, 又是什麼讓它們這麼多年才姍姍走來?