1. 程式人生 > >神經網路(ANN)

神經網路(ANN)

先丟擲幾個問題:

1、怎麼求解

2、優缺點

3、反向傳播,梯度為什麼會彌散

4、啟用函式怎麼選取

5、幾個優化方案?

零、為什麼要引入神經網路

回想SVM從線性可分情況,轉到非線性可分時,引入了核函式,將樣本空間對映到高維線性可分空間。

同樣的,神經網路的隱含層也在做這種事情,在高維空間中找到幾個特徵,可以放到輸出層的啟用函式裡,利用線性學習器來輸出結果。

再囉嗦一句,特徵工程+LR <  GBDT+LR  < 神經網路 +LR <  CNN+DNN+LR (我腦補的哈哈哈哈)

一、神經元模型

神經網路中最基本的成分就是神經元模型:

神經元接收到來自n個其他神經元傳遞過來的輸入訊號,這些輸入訊號通過帶權重的連線進行傳遞,神經元收到的總輸入值將與神經元的閾值(又叫偏置)進行比較,然後通過“啟用函式”處理以產生神經元的輸出。


啟用函式,你可以理解為,要麼就啟用,要麼不啟用,那麼可以用階躍函式表示,但是這個函式具有 不連續、不光滑等不太好的性質,因此實際中通常用Sigmoid函式(後面還會講到其他啟用函式,因為sigmoid函式也有缺點)。


二、為什麼要多層?

如果沒有隱藏層,那麼就類似於邏輯迴歸了,只能求解線性可分的情況,不能解決XOR問題。


可以看到層數越多,學習能力越強,但是!!!!可以看到 單隱含層已經可以劃分了,再加一層就有點過擬合了,有木有!!!!誰讓你引數這麼多呢。。。

三、怎麼求解多層網路?

誤差逆傳播(BP)演算法是比較常用的一種。

1、引數表達:


2、誤差選 :均方誤差後,每一步引數的迭代推導,涉及求導的鏈式法則,這也是反向傳播名稱的由來。




類似的可以求得其他引數的更新公式!!!!!!

3、演算法過程:


4、標準BP、累計BP

BP演算法的目標是最小化訓練集D上的累積誤差,累積BP演算法,在讀取整個訓練集D一遍後才對引數進行更新。具體地:

標準BP的做法:樣本1,更新下W1為W2,樣本2就直接用更新完的w了,即W2!!!!

累積BP的做法:樣本1,更新W1為W2,樣本2仍然用W1。掃一遍全量訓練集之後,W更新為Wn,下一輪,樣本1就用Wn了。!!!!

實際使用中,累積誤差下降到一定程度後,進行下一步下降會非常緩慢,這時候標準BP往往會更快獲得較好的解。

四、怎麼設定隱含層的個數及每層的神經元的個數,還有啟用函式的選取

1、怎麼設定隱含層的個數及每層的神經元的個數 

遺憾的是,至今為止還沒有理論規定該如何來確定網路隱含層的數目.所以,只能用嘗試的方法來尋找最適宜的隱含層神經元數目.

2、啟用函式

http://blog.csdn.net/u013146742/article/details/51986575

傳統的S函式有一個很大的缺點,就是BP迭代更新引數時,需要用到梯度,如果一個很大的資料傳入S函式,那麼其梯度為0,之後就不會被更新,當神經網路層數較多時,S函式在反向傳播中梯度值會逐漸減小,經過多層的傳遞後會呈指數級急劇減小,這就是所謂的梯度彌散問題

ReLU函式可以很好解決這個問題。

3、一般輸出層的啟用函式是線性分類器的函式,比如 sigmoid、softmax、linear SVM。

五、試圖跳出區域性最小的幾個策略:

1、以多組不同引數值初始化多個神經網路,最後取其中誤差最小的解。

2、模擬退火:在每一步都以一定的概率接受比當前解更差的結果。接受“次優解”的概率要逐步降低,以保證演算法穩定。

3、隨機梯度下降:

4、遺傳演算法。

六、優缺點:

優點:

1、準確度高

2、適合噪聲資料集

缺點:

1、訓練慢

2、引數多,調參難

3、解釋學弱

七、優化方法

1、過擬合:正則化、Dropout,不要簡單的減少層數和每層的神經元個數。

2、引數調優:Adagrad

3、啟用函式:ReLU

4、避免區域性最優

5、CNN、RNN等。

八、Tensorflow程式碼

http://blog.csdn.net/u010745111/article/details/62217464

九、Tensorflow demo

http://playground.tensorflow.org/

參考:

機器學習--周志華