[Deep Learning] 神經網絡基礎
引言:
目前,深度學習(Deep Learning,簡稱DL)在算法領域可謂是大紅大紫,現在不只是互聯網、人工智能,生活中的各大領域都能反映出深度學習引領的巨大變革。要學習深度學習,那麼首先要熟悉神經網絡(Neural Networks,簡稱NN)的一些基本概念。當然,這裡所說的神經網絡不是生物學的神經網絡,我們將其稱之為人工神經網絡(Artificial Neural Networks,簡稱ANN)貌似更為合理。神經網絡最早是人工智能領域的一種算法或者說是模型,目前神經網絡已經發展成為一類多學科交叉的學科領域,它也隨著深度學習取得的進展重新受到重視和推崇。
1. 神经元模型 (關於把輸入特徵進行識別)
神經元是神經網絡中最基本的結構,也可以說是神經網絡的基本單元,它的設計靈感完全來源於生物學上神經元的信息傳播機制。我們學過生物的同學都知道,神經元有兩種狀態:興奮和抑制。一般情況下,大多數的神經元是處於抑制狀態,但是一旦某個神經元收到刺激,導致它的電位超過一個閾值,那麼這個神經元就會被激活,處於“興奮”狀態,進而向其他的神經元傳播化學物質(其實就是信息)。
1943年,McCulloch和Pitts將上圖的神經元結構用一種簡單的模型進行了表示,構成了一種人工神經元模型,也就是我們現在經常用到的“M-P神經元模型”,如下圖所示:
從上圖M-P神經元模型可以看出,神經元的輸出
𝑦=𝑓(∑𝑛𝑖=1𝑤𝑖𝑥𝑖−𝜃)
𝑦=𝑓(
∑𝑛𝑖=1𝑤𝑖𝑥𝑖−𝜃)sigmoid函数的表达式和分布图如下所示:
還不明白嗎?我來用一個簡單的例子來說明:
首先關於Machine learning的流程可以簡單分為以下:
(1)輸入特徵 => (2)識別特徵 => (3) 輸出結果 => (4)判斷對錯
首先如下圖,當我們進行一般的分類問題時,會用 f(x) = 總和「 Xi個輸入數據 *Wi個數據的權重 」
當f(x) 大於 激活阈值b時 => 此時就是輸出y被激活(即輸出 1)
之後因為結果函數可以用一個階躍方程表示,大於閾值激活(1);否則則抑制(0)。但是這樣有點太粗暴,因為階躍函數不光滑,不連續,不可導,因此我們更常用的方法是用sigmoid函數來表示函數函數f(.),使其變得更加之平滑。
其中問題來了,我們到底是如何更新W的值呢?來用一個簡單的例子來說明:
例如W1(1) = 1.0 經過了+delta W1 (0.1)後 下一個更新後的W1(2) = 1.1
Wi(t+1) = Wi(t) + delta Wi
所以接下來要設定一個靠普的Delta Wi就可以很好地更新公式了
由圖中所知當結果Y - y後就知道斜線要向上或下修改,從而更改W1 和 W2的數值,
例(Y-y) > 0 即是之前W1/W2太低了,要更改W1和W2升高使f(x)的值大於b
最後再*Xi為了使差距較大時增加幅度。
其後Delta b 是一樣的規律完成。
當後之後公式還要乘上learning rate:
這個我之後再說...
2. 感知機和神經網絡
感知機(perceptron)是由兩層神經元組成的結構,輸入層用於接受外界輸入信號,輸出層(也被稱為是感知機的功能層)就是M-P神經元。下圖表示了一個輸入層具有三個神經元(分別表示為𝑥0、𝑥1、𝑥2)的感知機結構:
根據上圖不難理解,感知機模型可以由如下公式表示:
𝑦=𝑓(𝑤𝑥+𝑏)
其中,𝑤為感知機輸入層到輸出層連接的權重,𝑏表示輸出層的偏置。事實上,感知機是一種判別式的線性分類模型,可以解決與、或、非這樣的簡單的線性可分(linearly separable)問題,線性可分問題的示意圖見下圖:但是由於它只有一層功能神經元,所以學習能力非常有限。事實證明,單層感知機無法解決最簡單的非線性可分問題——異或問題
單層感知機不能表示異或邏輯: Link
關於感知機解決異或問題還有一段歷史值得我們簡單去了解一下:感知器只能做簡單的線性分類任務。但是當時的人們熱情太過於高漲,並沒有人清醒的認識到這點。於是,當人工智能領域的巨擘Minsky指出這點時,事態就發生了變化。 Minsky在1969年出版了一本叫《Perceptron》的書,裡面用詳細的數學證明了感知器的弱點,尤其是感知器對XOR(異或)這樣的簡單分類任務都無法解決。 Minsky認為,如果將計算層增加到兩層,計算量則過大,而且沒有有效的學習算法。所以,他認為研究更深層的網絡是沒有價值的。
由於Minsky的巨大影響力以及書中呈現的悲觀態度,讓很多學者和實驗室紛紛放棄了神經網絡的研究。神經網絡的研究陷入了冰河期。這個時期又被稱為“AI winter”。
---------10 year later----------
接近10年以後,對於兩層神經網絡的研究才帶來神經網絡的複蘇。我們知道,我們日常生活中很多問題,甚至說大多數問題都不是線性可分問題,那我們要解決非線性可分問題該怎樣處理呢?這就是這部分我們要引出的“多層”的概念。既然單層感知機解決不了非線性問題,那我們就採用多層感知機,下圖就是一個兩層感知機解決異或問題的示意圖:
構建好上述網絡以後,通過訓練得到最後的分類面如下:
由此可見,多層感知機可以很好的解決非線性可分問題,我們通常將多層感知機這樣的多層結構稱之為是神經網絡。但是,正如Minsky之前所擔心的,多層感知機雖然可以在理論上可以解決非線性問題,但是實際生活中問題的複雜性要遠不止異或問題這麼簡單,所以我們往往要構建多層網絡,而對於多層神經網絡採用什麼樣的學習算法又是一項巨大的挑戰,如下圖所示的具有4層隱含層的網絡結構中至少有33個參數(不計偏置bias參數),我們應該如何去確定呢?
不定時更新....
Comments
Post a Comment