1. 程式人生 > >人工神經網路(ANN)及BP演算法

人工神經網路(ANN)及BP演算法

1 什麼是神經網路

1.1 基本結構

這裡寫圖片描述
說明:

  1. 通常一個神經網路由一個input layer,多個hidden layer和一個output layer構成。
  2. 圖中圓圈可以視為一個神經元(又可以稱為感知器)
  3. 設計神經網路的重要工作是設計hidden layer,及神經元之間的權重
  4. 新增少量隱層獲得淺層神經網路SNN;隱層很多時就是深層神經網路DNN

1.2 從邏輯迴歸到神經元

LinearRegression模型:
這裡寫圖片描述

sigmoid函式:
這裡寫圖片描述
LR可以理解為如下結構:
這裡寫圖片描述

所以邏輯迴歸是一個單層感知器(沒有隱層)結構。

2 為什麼需要神經網路

首先,神經網路應用在分類問題中效果很好。 工業界中分類問題居多。
LR或者linear SVM更適用線性分割。如果資料非線性可分(現實生活中多是非線性的),LR通常需要靠特徵工程做特徵對映,增加高斯項或者組合項;SVM需要選擇核。 而增加高斯項、組合項會產生很多沒有用的維度,增加計算量。GBDT可以使用弱的線性分類器組合成強分類器,但維度很高時效果可能並不好。

2.1 非線性可分怎麼辦

如下圖非線性可分
這裡寫圖片描述
從邏輯迴歸看,單層感知器只能解決線性問題。要解決非線性問題,需要引入多層感知器(加入隱層)。

這時使用兩個線性分類器,再求邏輯與就可以達到分類的效果。 注意,最開始的兩個線性分類器都是部分正確的分類器

2.2 神經元完成邏輯與

前面說可以使用兩個線性分類器的邏輯與可以完成上例的非線性分割。暫時不管兩個線性分類器,現在先使用神經元(感知器)達到邏輯與的效果

假設
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這樣,g(z)完成邏輯與:
這裡寫圖片描述
調整z的引數,可以實現邏輯或等操作

2.3 流程圖

這裡寫圖片描述

可以看到,先有imput layer生產兩個線性分類器,在通過兩個線性分類器的權重組合構成邏輯與,完成非線性分類。
注意,訓練兩個線性分類器需要imput的權重,邏輯與又需要兩個線性分類器的權重。

2.4 效果

對線性分類器的邏輯與和邏輯或的組合可以完美的對平面樣本進行分類
這裡寫圖片描述

隱層決定了最終的分類效果
這裡寫圖片描述
由上圖可以看出,隨著隱層層數的增多,凸域將可以形成任意的形狀,因此可以解決任何複雜的分類問題。實際上,Kolmogorov理論指出:雙隱層感知器就足以解決任何複雜的分類問題。

3 神經網路表達力與過擬合

  1. 理論上,單隱層神經網路可以逼近任何連續函式(只要隱層的神經元個數足夠)
  2. 雖然從數學上看多隱層和單隱層表達能力一致,但多隱層的神經網路比單隱層神經網路工程效果好很多
  3. 對於一些分類資料(比如CTR預估),3層神經網路效果優於2層神經網路,但如果把層數不斷增加(4,5,6層),對最後的結果的幫助沒有那麼大的跳變
  4. 影象資料比較特殊,是一種深層的結構化資料,深層次的卷積神經網路能更充分和準確的把這些層級資訊表達出來
  5. 提升隱層數量或者隱層神經元個數,神經網路的“容量”會變大,空間表達能力會變強
  6. 過多的隱層和神經元結點會帶來過擬合問題
  7. 不要試圖降低神經網路引數量來減緩過擬合,用正則化或者dropout

4 神經網路結構

4.1 網路結構

這裡寫圖片描述
n個輸入;輸出m個概率

4.2 傳遞函式/啟用函式

   前面每一層輸入經過線性變換wx+b後還用到了sigmoid函式,在神經網路的結構中被稱為傳遞函式或者啟用函式。
   除了sigmoid,還有tanh、relu等別的啟用函式。啟用函式使線性的結果非線性化。

4.2.1 為什麼需要傳遞函式

簡單理解上,如果不加啟用函式,無論多少層隱層,最終的結果還是原始輸入的線性變化,這樣一層隱層就可以達到結果,就沒有多層感知器的意義了。
所以每個隱層都會配一個啟用函式,提供非線性變化。

4.2.2 介紹兩種啟用函式

這裡寫圖片描述

雙S函式又被稱為tanh函式

5 BP演算法

5.1 網路結構

這裡寫圖片描述
1. 正向傳播求損失,反向傳播回傳誤差
2. 根據誤差訊號修正每層的權重
3. f是啟用函式;f(netj)是隱層的輸出; f(netk)是輸出層的輸出O; d是target

5.2 如何反向傳播

以三層感知器為例:
這裡寫圖片描述

結合BP網路結構,誤差由輸出展開至輸入的過程如下:
這裡寫圖片描述

有了誤差E,通過求偏導就可以求得最優的權重。(不要忘記學習率)
這裡寫圖片描述

BP演算法屬於δ學習規則類,這類演算法常被稱為誤差的梯度下降演算法。 這類演算法要求變換函式可導(sigmoid是滿足的)

5.3 舉例

這裡寫圖片描述

圖中元素:
兩個輸入;
隱層: b1, w1, w2, w3, w4 (都有初始值)
輸出層:b2, w5, w6, w7, w8(賦了初始值)

5.3.1 前向運算 計算誤差

這裡寫圖片描述
則誤差:
這裡寫圖片描述

5.3.2 反向傳播

求誤差對w5的偏導過程
這裡寫圖片描述

引數更新:
這裡寫圖片描述

求誤差對w1的偏導
這裡寫圖片描述

注意,w1對兩個輸出的誤差都有影響
通過以上過程可以更新所有權重,就可以再次迭代更新了,直到滿足條件。