一、神經元
神經元模型是一個包含輸入,輸出與計算功能的模型。(多個輸入對應一個輸出)

一個神經網絡的訓練算法就是讓權重(通常用w表示)的值調整到最佳,以使得整個網絡的預測效果最好。
事實上,在神經網絡的每個層次中,除了輸出層以外,都會含有這樣一個偏置單元。這些節點是默認存在的。它本質上是一個只含有存儲功能,且存儲值永遠為1的單元。
輸入:x1、x2和截距+1
輸出:y

其中的激活函數包括:
邏輯回歸函數(S函數):

雙曲正切函數(雙S函數):

二、神經網絡的層次
神經網絡中,除了輸入層、輸出層,其他的都為隱層。
對於隱層較少(2個隱層以下)的神經網絡叫做淺層神經網絡,也叫做傳統神經網絡。增加隱層的話,就成為了深層神經網絡(DNN)。
|
單隱層神經網絡(淺層) |
深層神經網絡 |
1989年Robert Hecht-Nielsen證明了對於任何閉區間內的一個連續函數都可以用一個隱含層的神經網絡來逼近,這就是萬能逼近定理。所以一個三層的神經網絡就可以完成任意的m維到n維的映射。即這三層分別是輸入層(I)、隱含層(H)、輸出層(O)。
神經網絡中,輸入層和輸出層的節點個數都是確定的,而隱含層節點個數不確定,可以通過經驗公式來得到:

m、n分別代表輸入節點個數和輸出節點個數。a是一個取值從1~10之間的調節常數。
三、網絡表達力與過擬合
![]() |
![]() |
1.單隱層神經網絡可以逼近任何連續函數。連續函數你可以看成是一條不斷的線,可以是一條任何彎曲的線,線的兩側是被區分的兩個類別。之所以說可以是任一的線,是因為再怎么扭曲的線都是可以用無限小的直線連接而成,既然是直線,那就可以使用線性分類器,所以,一條曲線就可以用許多線性分類器組成,當同時滿足線性分類器都為1時,那么整個曲線的神經網就被滿足為1了。其實這個就是上文我們詳述的“邏輯與”,而“邏輯與”我們只需要使用“單層神經網”。如果在這個隱層中的神經元的個數越多,就越逼近。(一個神經元就是一個線性分類器,分類器越多,就越你和曲線),另外的解釋可以看第五單元。
2.多隱藏層比單隱藏層效果好。舉個例子,我們使用單隱層,里面有1000個神經元,和我們使用一個多隱層,里面有50個神經元,也許達到的效果差不多,但是工業上我們仍然選擇后者會有更好的效率。
3.對於分類,3層神經網(1個隱層)比2層神經網(無隱層)的效果好,因為前者可以區分非線性。但是!層數再往上增多,則效果的上升就不那么明顯了。所以考慮“使用最簡單的模型達到最好的效果”這個原則,我們更願意選擇3層神經網。
4.圖像處理之所以需要深層次的神經網,是因為將圖像轉換成結構化的數據需要有非常多的維度,也就是說需要非常多的特征才能來描述圖片。
粘貼自:http://blog.csdn.net/sinat_33761963/article/details/52219677
四、BP算法
BP神經網絡屬於傳統神經網絡,是一種求解權重w的算法。通常分為兩部:
(1)FP:信號正向傳遞(FP)求損失
(2)BP:損失反向回傳(BP)
算法推到過程:
(1)正向傳遞求損失,這個過程較為簡單,即對於輸入x、偏置1與權值w和b進行各個層次的加權、並通過激活函數的計算,求出輸出的值。

如上假設最終求出的值分別為d1、d2,則輸出層誤差的表達式為:
![]()
(2)所謂的反向傳輸過程:
---------------------隨機梯度下降法----------------
當誤差求出來之后,采用隨機梯度下降的方法(SGD),每看一個數據就算一下損失函數,然后求梯度更新參數,這個稱為隨機梯度下降。
即對於誤差E求他的梯度,即誤差下降最快的方向,然后根據這個值修正權值,即當權值為這個修正值時,求的誤差會比當前的誤差小的最大。
例子:

正向求誤差:




同理可以求獲得的o2的值。

如上,可以求得正向誤差。
反向損失回傳:

如上,想要修正權值,這個
需要通過隨機梯度下降法求得,即對誤差求梯度,讓這個誤差下降最大方向的值作為修正誤差。

當然這個過程就比較麻煩了計算起來。此處不做詳細推倒。

這樣就可以修正權值了。
對於例子中,對上一層的權值進行修正的過程基本和上面相似,不過不同的地方就是梯度的求解,需要多考慮一層偏導的計算。


通常,BP算法一般迭代1000次,
的取值為0.5。
五、對於單隱層可以擬合任意函數的理解
單隱層神經網絡可以逼近任何連續函數。對於這個的解釋,可以參考:http://neuralnetworksanddeeplearning.com/chap4.html
當然,兩個重要的前提:逼近和任意連續函數。不過對於連續函數這個限制並不是嚴格的,因為如果目標函數是一個離散的,通常可以用連續函數來逼近。“However, even if the function we'd really like to compute is discontinuous, it's often the case that a continuous approximation is good enough. If that's so, then we can use a neural network. In practice, this is not usually an important limitation.”
對於上面文章的解釋,我覺得總結起來就是:
激活函數sigmoid(wx+b)可以看作是一個階躍函數,如果存在兩個激活函數就可以構造一個"bump" function;

當然你的神經元多了,就可以擬合任意函數了:




