福利 | 從生物學到神經元:人工神經網路 ( ANN ) 簡介

語言: CN / TW / HK

文末有資料派THU福利哦

[ 導讀 ] 我們從鳥類那裡得到啟發,學會了飛翔,從牛蒡那裡得到啟發,發明了魔術貼,還有很多其他的發明都是被自然所啟發。這麼說來看看大腦的組成,並期望因此而得到啟發來構建智慧機器就顯得很合乎邏輯了。這也是人工神經網路 ( ANN ) 思想的根本來源。不過,雖然飛機的發明受鳥類的啟發,但是它並不用扇動翅膀來飛翔。同樣,人工神經網路和它的生物版本也有很大差異。甚至有些研究者認為應該放棄對生物類比的使用 ( 比如,稱其為"單元"而不是"神經元" ),以免我們將創造力限制在生物學上。

人工神經網路是深度學習的核心。它們用途廣泛,功能強大且可擴充套件,使其非常適合處理大型和高度複雜的機器學習任務,例如對數十億張影象進行分類 ( 例如Google Images ),為語音識別服務 ( 例如Apple的Siri ) 提供支援,每天向成千上萬的使用者推薦 ( 例如YouTube ) 觀看的最佳視訊,或學習在圍棋遊戲 ( DeepMind的AlphaGo ) 中擊敗世界冠軍。

那麼這一切都起源自哪裡呢?讓我來看看人工神經網路是如何發展的!下面開始我們今天介紹的核心:

從生物學到神經元

令人驚訝的是,人工神經網路已經存在很長一段時間了:它們於1943年由神經生理學家沃倫·麥卡洛克 ( Warren McCulloch ) 和數學家沃爾特·皮茨 ( Walter Pitts ) 首次提出。McCulloch和Pitts在其具有里程碑意義的論文"神經活動中固有的邏輯演算"中,提出了一種簡化的計算模型,該模型計算了生物神經元如何在動物大腦中協同工作,利用命題邏輯進行復雜的計算。這是第一個人工神經網路架構。從那時起,我們看到許多其他架構被髮明出來。

人工神經網路的早期成功導致人們普遍相信,我們很快將與真正的智慧機器進行對話。當在1960年代我們清楚地知道不能兌現了這一承諾 ( 至少相當長一段時間 ) 後,資金流向了其他地方,人工神經網路進入了漫長的冬天。在1980年代初期,發明了新的體系結構,並開發了更好的訓練技術,從而激發了人們對連線主義 ( 對神經網路的研究 ) 的興趣。但是進展緩慢,到了1990年代,發明了其他強大的機器學習技術,例如支援向量機。這些技術似乎比人工神經網路提供了更好的結果和更堅實的理論基礎,神經網路的研究再次被擱置。

我們現在目睹了對人工神經網路的另一波興趣。這波浪潮會像以前一樣消滅嗎?好吧,這裡有一些充分的理由使我們相信這次是不同的,人們對人工神經網路的重新有興趣將對我們的生活產生更深遠的影響:

  • 現在有大量資料可用於訓練神經網路,並且在非常大和複雜的問題上,人工神經網路通常優於其他機器學習技術。

  • 自1990年代以來,計算能力的飛速增長使得現在有可能在合理的時間內訓練大型神經網路。這部分是由於摩爾定律(積體電路中的器件數量在過去的50年中,每兩年大約增加一倍),這還要歸功於遊戲產業,這刺激了數百萬計強大的GPU卡的生產。此外,雲平臺已使所有人都可以使用這個功能。

  • 訓練演算法已得到改進。公平地說,它們僅與1990年代使用的略有不同,但是這些相對較小的調整產生了巨大的積極影響。

  • 在實踐中,人工神經網路的一些理論侷限性被證明是良性的。例如,許多人認為ANN訓練演算法註定要失敗,因為它們可能會陷入區域性最優解,但事實證明,這在實踐中相當罕見 ( 而且在這種情況下,它們通常與全域性最優解相當接近 )。

  • 人工神經網路似乎已經進入了資金和發展的良性迴圈。基於人工神經網路的好產品會成為頭條新聞,這吸引了越來越多的關注和資金,從而產生了越來越多的進步甚至驚人的產品。

01、生物神經元

在討論人工神經元之前,讓我們快速看一下生物神經元 ( 圖1 )。它是一種看起來不尋常的細胞,主要存在於動物的大腦中。它由包含核和大多數細胞複雜成分的細胞體組成,其中許多分支延伸稱為樹突,再加上一個很長的延伸稱為軸突。軸突的長度可能比細胞體長几倍,或者長几萬倍。軸突在其末端附近分裂成許多分支,稱為端粒,在這些分支的頂端是稱為突觸末端 ( 或簡稱為突觸 ) 的微小結構,與其他神經元的樹突或細胞體相連。

生物神經元產生短的電脈衝稱為動作電位 ( AP,或只是訊號 ),它們沿著軸突傳播,使突觸釋放稱為神經遞質的化學訊號。當神經元在幾毫秒內接收到足夠數量的這些神經遞質時,它會激發自己的電脈衝 ( 實際上,它取決於神經遞質,因為其中一些會抑制神經元的發射 )。

圖1. 生物神經元

因此,單個生物神經元的行為似乎很簡單,但是它們組成了數十億個龐大的網路,每個神經元都與數千個其他神經元相連。高度複雜的計算可以通過相當簡單的神經元網路來執行,就像複雜的蟻丘可以通過簡單螞蟻的共同努力而出現一樣。生物神經網路 ( BNNs ) 的架構仍是活躍的研究主題,但大腦的某些部分已被繪製成圖,似乎神經元通常組織成連續的層,尤其是在大腦皮層中 ( 大腦的外層 ),如圖2所示。

圖2. 生物神經網路 ( 人類皮層 ) 中的很多層

02、神經元的邏輯計算

McCulloch和Pitts提出了一個非常簡單的生物神經元模型,該模型後來被稱為神經元:它具有一個或多個二進位制 ( 開/關 ) 輸入和一個二進位制輸出。當超過一定數量的輸入處於啟用狀態時,人工神經元將啟用其輸出。在他們的論文中,表明即使使用這樣的簡化模型,也可以構建一個人工神經元網路來計算所需的任何邏輯命題。

為了瞭解這種網路的工作原理,讓我們構建一些執行各種邏輯計算的ANN ( 圖3 ),假設神經元的至少兩個輸入處於啟用狀態時,神經元就會被啟用。

圖3. ANNs 執行簡單的邏輯運算

讓我們看看這些網路的作用:

  • 左邊的第一個網路是恆等函式:如果神經元A被啟用,那麼神經元C也被啟用 ( 因為它從神經元A接收到兩個輸入訊號 );但是如果神經元A關閉,那麼神經元C也關閉。

  • 第二個網路執行邏輯AND:僅當神經元A和B都被啟用 ( 單個輸入訊號不足以啟用神經元C ) 時,神經元C才被啟用。

  • 第三個網路執行邏輯OR:如果神經元A或神經元B被啟用 ( 或兩者都啟用 ),則神經元C被啟用。

  • 最後,如果我們假設輸入連線可以抑制神經元的活動 ( 生物神經元就是這種情況 ),則第四網路計算出一個稍微複雜的邏輯命題:只有在神經元A處於活動狀態和神經元B關閉時,神經元C才被啟用。如果神經元A一直處於活動狀態,那麼你會得到邏輯非:神經元B關閉時神經元C處於活動狀態,反之亦然。

你可以想象如何將這些網路組合起來以計算複雜的邏輯表示式。

03、感知器

感知器是最簡單的ANN架構之一,由Frank Rosenblatt於1957年發明。它基於稍微不同的人工神經元 ( 見圖4 ),稱為閾值邏輯單元 ( TLU ),有時也稱為線性閾值單元 ( LTU )。輸入和輸出是數字 ( 而不是二進位制開/關值 ),並且每個輸入連線都與權重相關聯。TLU計算其輸入的加權總和 ( z = w1x1 + w2x2 + … + wnxn = xTw ),然後將階躍函式應用於該和並輸出結果:hw(x) = step(z),其中z = xTw。

圖4. 閾值邏輯單元:人工神經元,計算其輸入的加權和,然後應用階躍函式

感知器中最常用的階躍函式是Heaviside階躍函式 ( 見公式1 )。有時使用符號函式代替。

公式1. 感知器中使用的常見階躍函式 ( 假設閾值=0 )

單個TLU可用於簡單的線性二進位制分類。它計算輸入的線性組合,如果結果超過閾值,則輸出正類。否則,它將輸出負類 ( 就像邏輯迴歸或線性SVM分類器一樣 )。例如,你可以使用單個TLU根據花瓣的長度和寬度對鳶尾花進行分類 ( 就像我們在前面的章節中所做的那樣,還添加了額外的偏移特徵x0=1 )。在這種情況下,訓練TLU意味著找到w0,w1和w2的正確值 ( 稍後將討論訓練演算法 )。

感知器僅由單層TLU 組成,每個TLU連線到所有的輸入。當一層中的所有神經元都連線到上一層中的每個神經元 ( 即其輸入神經元 ) 時,該層稱為全連線層或密集層。感知器的輸入被送到稱為輸入神經元的特殊直通神經元:它們輸出被送入的任何輸入。所有輸入神經元形成輸入層。此外,通常會新增一個額外的偏置特徵 ( x0 = 1 ):通常使用一種稱為"偏置神經元"的特殊型別的神經元來表示該特徵,該神經元始終輸出1。具有兩個輸入和三個輸出的感知器如圖5所示。該感知器可以將例項同時分為三個不同的二進位制類,這使其成為多輸出分類器。

圖5. 具有兩個輸入神經元,一個偏置神經元和三個輸出神經元的感知器的結構

藉助線性代數的魔力,公式10-2使得可以同時為多個例項高效地計算出一層人工神經元的輸出。

公式2  計算全連線層的輸出

在此等式中:

  • 與往常一樣,X代表輸入特徵的矩陣。每個例項一行,每個特徵一列。

  • 權重矩陣W包含除偏置神經元外的所有連線權重。在該層中,每個輸入神經元一行,每個人工神經元一列。

  • 偏置向量b包含偏置神經元和人工神經元之間的所有連線權重。每個人工神經元有一個偏置項。

  • 函式φ稱為啟用函式:當人工神經元是TLU時,它是階躍函式 ( 但我們在後面會討論其他啟用函式 )。

那麼,感知器如何訓練?Rosenblatt提出的感知器訓練演算法在很大程度上受Hebb規則啟發。唐納德·赫布 ( Donald Hebb ) 在其1949年的《行為組織》 ( Wiley ) 中提出,當一個生物神經元經常觸發另一個神經元時,這兩個神經元之間的聯絡就會增強。後來,Siegrid Lowel用有名的措辭概括了赫布的思想,即"觸發的細胞,連線在一起"。也就是說,兩個神經元同時觸發時,它們之間的連線權重會增加。該規則後來被稱為Hebb規則 ( 或Hebb學習 )。使用此規則的變體訓練感知器,該變體考慮了網路進行預測時所犯的錯誤;感知器學習規則加強了有助於減少錯誤的連線。更具體地說,感知器一次被送入一個訓練例項,並且針對每個例項進行預測。對於產生錯誤預測的每個輸出神經元,它會增強來自輸入的連線權重,這些權重將有助於正確的預測。該規則如公式3所示。

公式3. 感知器學習規則 ( 權重更新 )

在此等式中:

  • Wi,j是第i個輸入神經元和第j個輸出神經元之間的連線權重。

  • xi是當前訓練例項的第i個輸入值。

  • y^j是當前訓練例項的第j個輸出神經元的輸出。

  • yj是當前訓練例項的第j個輸出神經元的目標輸出。

  • η是學習率。

每個輸出神經元的決策邊界都是線性的,因此感知器無法學習複雜的模式 ( 就像邏輯迴歸分類器一樣 )。但是,如果訓練例項是線性可分的,Rosenblatt證明了該演算法將收斂到一個解。這被稱為感知器收斂定理。

Scikit-Learn提供了一個Perceptron類,該類實現了單個TLU網路。它可以像你期望的那樣使用,例如,在iris資料集上:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.linear_model import Perceptron
iris = load_iris()
X = iris.data[:, (2, 3)] # petal length, petal width
y = (iris.target == 0).astype(np.int) # Iris setosa?
per_clf = Perceptron()
per_clf.fit(X, y)
y_pred = per_clf.predict([[2, 0.5]])

你可能已經注意到,感知器學習演算法非常類似於隨機梯度下降。實際上,Scikit-Learn的Perceptron類等效於使用具有以下超引數的SGDClassifier:loss =" perceptron",learning_rate ="constant",eta0 = 1 ( 學習率 ) 和penalty = None ( 無正則化 )。

請注意,與邏輯迴歸分類器相反,感知器不輸出分類概率;相反,他們基於硬閾值進行預測。這是邏輯迴歸勝過感知器的原因。

Marvin Minsky和Seymour Papert在1969年的專著Perceptron中,特別指出了感知器的一些嚴重缺陷,即它們無法解決一些瑣碎的問題 ( 例如,異或 ( XOR ) 分類問題;參見圖6的左側 )。任何其他線性分類模型 ( 例如邏輯迴歸分類器 ) 都是如此,但是研究人員對感知器的期望更高,有些人感到失望,他們完全放棄了神經網路,轉而支援更高層次的問題,例如邏輯,解決問題和搜尋。

事實證明,可以通過堆疊多個感知器來消除感知器的某些侷限性。所得的ANN稱為多層感知器 ( MLP )。MLP可以解決XOR問題,你可以通過計算圖6右側所示的MLP的輸出來驗證:輸入 ( 0,0 ) 或 ( 1,1 ) ,網路輸出0 ,輸入 ( 0,1 ) 或 ( 1,0 ) 輸出1。所有連線的權重等於1,但顯示權重的四個連線除外。嘗試驗證該網路確實解決了XOR問題!

圖6. XOR分類問題和解決該問題的MLP

04、多層感知器和反向傳播

MLP由一層 ( 直通 ) 輸入層,一層或多層TLU ( 稱為隱藏層 ) 和一個TLU的最後一層 ( 稱為輸出層 ) 組成 ( 請參見圖7 )。靠近輸入層的層通常稱為較低層,靠近輸出層的層通常稱為較高層。除輸出層外的每一層都包含一個偏置神經元,並完全連線到下一層。

圖10-7. 具有兩個輸入,有四個神經元的一個隱藏層和三個輸出神經元的多層感知器的結構 ( 此處顯示了偏置神經元,但通常是隱含的 )

訊號僅沿一個方向 ( 從輸入到輸出 ) 流動,因此該結構是前饋神經網路 ( FNN ) 的例子。

當一個ANN包含一個深層的隱藏層時,它稱為深層神經網路 ( DNN )。深度學習領域研究DNN,更廣泛地講包含深度計算堆疊的模型。即便如此,只要涉及神經網路 ( 甚至是淺層的神經網路 ),許多人就會談論深度學習。

多年來,研究人員一直在努力尋找一種訓練MLP的方法,但沒有成功。但在1986年,大衛·魯梅爾哈特 ( David Rumelhart ),傑弗裡·欣頓 ( Geoffrey Hinton ) 和羅納德·威廉姆斯 ( Ronald Williams ) 出版了開創性的論文介紹了反向傳播訓練演算法,該演算法至今仍在使用。簡而言之,它是使用有效的技術自動計算梯度下降:在僅兩次通過網路的過程中 ( 一次前向,一次反向 ),反向傳播演算法能夠針對每個模型引數計算網路誤差的梯度。換句話說,它可以找出應如何調整每個連線權重和每個偏置項以減少誤差。一旦獲得了這些梯度,它便會執行常規的梯度下降步驟,然後重複整個過程,直到網路收斂到有解。

自動計算梯度稱為自動微分,或者audodiff 。有各種autodiff技術,各有優缺點。反向傳播使用的一種稱為反向模式。它快速而精確,並且非常適用於微分函式具有多個變數 

( 例如,連線權重 ) 和少量輸出 ( 例如,一個損失 ) 的情況。

讓我們更詳細地介紹一下該演算法:

  • 它一次處理一個小批量 ( 例如,每次包含32個例項 ),並且多次遍歷整個訓練集。每次遍歷都稱為一個輪次。

  • 每個小批量都傳遞到網路的輸入層,然後將其送到第一個隱藏層。然後該演算法將計算該層中所有神經元的輸出 ( 對於小批量中的每個例項 )。結果傳遞到下一層,計算其輸出並傳遞到下一層,以此類推,直到獲得最後一層的輸出,即輸出層。這就是前向通路:就像進行預測一樣,只是保留了所有中間結果,因為反向遍歷需要它們。

  • 接下來,該演算法測量網路的輸出誤差 ( 該演算法使用一種損失函式,該函式將網路的期望輸出與實際輸出進行比較,並返回一些誤差測量值 )。

  • 然後,它計算每個輸出連線對錯誤的貢獻程度。通過應用鏈式法則 ( 可能是微積分中最基本的規則 ) 來進行分析,從而使此步驟變得快速而精確。

  • 然後,演算法再次使用鏈式法則來測量這些錯誤貢獻中有多少是來自下面層中每個連線的錯誤貢獻,演算法一直進行,到達輸入層為止。如前所述,這種反向傳遞通過在網路中向後傳播誤差梯度,從而有效地測量了網路中所有連線權重上的誤差梯度 ( 因此稱為演算法 )。

  • 最終,該演算法執行梯度下降步驟,使用剛剛計算出的誤差梯度來調整網路中的所有連線權重。

該演算法非常重要,值得再次總結:對於每個訓練例項,反向傳播演算法首先進行預測 ( 正向傳遞 ) 並測量誤差,然後反向經過每個層以測量來自每個連線的誤差貢獻 ( 反向傳遞 ),最後調整連線權重以減少錯誤 ( 梯度下降步驟 )。

隨機初始化所有隱藏層的連線權重很重要,否則訓練將失敗。例如,如果將所有權重和偏置初始化為零,則給定層中的所有神經元將完全相同,因此反向傳播將以完全相同的方式影響它們,因此它們將保持相同。換句話說,儘管每層有數百個神經元,但是你的模型會像每層只有一個神經元一樣工作:不會太聰明。相反,如果你隨機初始化權重,則會破壞對稱性,並允許反向傳播來訓練各種各樣的神經元。

為了使該演算法正常工作,作者對MLP的體系結構進行了重要更改:他們將階躍函式替換為邏輯函式 ( sigmoid ),σ(z) = 1 / (1 + exp(–z))。這一點很重要,因為階躍函式僅包含平坦段,因此沒有梯度可使用 ( 梯度下降不能在平面上移動 ),而邏輯函式在各處均具有定義明確的非零導數,從而使梯度下降在每一步都可以有所進展。實際上,反向傳播演算法可以與許多其他啟用函式 ( 不僅是邏輯函式 ) 一起很好地工作。這是另外兩個受歡迎的選擇:

雙曲正切函式:tanh(z) = 2σ(2z) – 1

與邏輯函式一樣,該啟用函式為S形,連續且可微,但其輸出值範圍為-1至1 ( 而不是邏輯函式的從0到1 )。在訓練開始時,該範圍傾向於使每一層的輸出或多或少地以0為中心,這通常有助於加快收斂速度。

線性整流單位函式:ReLU(z) = max(0, z)

ReLU函式是連續的,但不幸的是,在z = 0時,該函式不可微分 ( 斜率會突然變化,這可能使梯度下降反彈 ),並且其導數為0 如果z<0。但是,實際上它執行良好並且具有計算快速的優點,因此它已成為預設值< span="">。最重要的是,它沒有最大輸出值這一事實有助於減少"梯度下降"期間的某些問題。

這些流行的啟用函式及其派生函式如圖8所示。可是等等!為什麼我們首先需要啟用函式?好吧,如果你連線多個線性變換,那麼你得到的只是一個線性變換。例如,如果f(x) = 2x + 3且g(x) = 5x – 1,則連線這兩個線性函式可以得到另一個線性函式:f(g(x))= 2 ( 5x – 1 ) + 3 = 10x +1。因此,如果層之間沒有非線性,那麼即使是很深的層堆疊也等同於單個層,因此你無法解決非常複雜的問題。相反,具有非線性啟用的足夠大的DNN理論上可以近似任何連續函式。

圖8. 啟用函式及其派生

好!你知道神經網路來自何處,其結構是什麼以及如何計算其輸出。你還了解了反向傳播演算法。

但是,你到底可以使用它們做什麼呢?我們將在下次分享~

——以上內容摘自《機器學習實戰:基於Scikit-Learn、Keras和TensorFlow(原書第2版)》一書,經出版方授權釋出,參考資料請見原書。

資料派THU福利!

點點為資料派THU的粉絲們爭取了5本贈書福利!歡迎小夥伴兒在下方留言區說出想要獲得贈書的理由,我們將為點贊數最高(截止到2020年10月24日中午12點)的5位讀者免費送上此書~小編會聯絡你們哦!

《機器學習實戰:基於Scikit-Learn、Keras和TensorFlow(原書第2版)》

國外AI"四大名著"之一!AI霸榜書重磅更新!"美亞"AI+神經網路+CV三大暢銷榜首圖書,基於TensorFlow 2和新版Scikit-Learn全面升級,內容增加近一倍!前谷歌工程師撰寫,Keras之父和TensorFlow移動端負責人鼎力推薦,從實踐出發,手把手教你從零開始搭建起一個神經網路。

編輯:於騰凱