cs231n-神經網路簡介及理解
神經網路
簡單介紹
神經網路是一種運算模型,由大量的節點(或稱神經元)之間相互聯接構成。每個節點代表一種特定的輸出函式,稱為激勵函式(activation function)。每兩個節點間的連線都代表一個對於通過該連線訊號的加權值,稱之為權重,這相當於人工神經網路的記憶。網路的輸出則依網路的連線方式,權重值和激勵函式的不同而不同。
神經網路是一種非線性模型,假如我們構建一個非常簡單的2層神經網路,和之前的線性分類器表示如下:
可知神經網路是一種非線性模型.
神經元
神經網路最基本的組成單位就是神經元,每一個神經元結構如下:
對於一個神經元來說,輸入是輸入的訊號,經過與權重相乘,相加,然後需要經過一個非線性函式輸出,這裡的非線性函式叫做啟用函式. 可以看出來,如果把loss函式應用到單個神經元的輸出上,那就可以看做一個線性分類器了.
啟用函式
常用的啟用函式有以下幾種:
Sigmoid
它把輸入壓縮到(0,1)之間;非常大的負數趨向於0,非常大的正負趨向於1。Sigmod現在已經少用了,因為
1、Sigmoid有梯度消失的問題。
2、Sigmoid輸出不是零中心的。例如輸出全是正數,那麼下一層全連線(Wx)輸入就全是正數,這將導致反向傳播時梯度(Wx 梯度為x)要麼全是正數,要麼全是負數;在使用梯度下降演算法時,呈現出Z字下降。這個問題可以通過批量梯度下降解決。
在使用sigmoid作為啟用函式的時候,單個神經元就可以看做是一個邏輯迴歸模型.
Tanh
它的輸出是零中心的[-1,1],但是它同樣存在梯度消失問題。
ReLu
ReLU近幾年比較受歡迎。它有以下優缺點
1、優點:使用SGD時,它比Sigmoid/Tanh收斂速度快。
2、優點:和Sigmoid和Tanh相比,它計算簡單。
3、缺點:脆弱,容易死掉。死掉是指,比較大的梯度經過神經元后,可以導致ReLU輸出都小於0,即不再啟用。這個可以同構調整學習率部分解決。
Leaky ReLU
即
其中α是一個很小的常數。$Leaky ReLU是解決ReLU死掉問題的。詳細介紹參考
Maxout
歸納ReLU和Leaky ReLU,得到更通用的一般形式
例如,當W1=0,b1=0時就是ReLU函式。它克服了ReLU的缺點,保留了其優點。但是其引數增加了一倍。
在神經網路中,很少見到在同一個網路的不同神經元中使用不同的啟用函式,即使這樣做沒有什麼問題。
神經網路結構
命名規則:在定義神經網路層數時,不包括輸入層。例如上圖中,左邊的神經網路有2層,右邊的神經網路有3層。
輸出層:輸出層通常沒有啟用函式,因為輸出層一般用來評分,它的值範圍是任意的。
定義神經網路大小:最常用的有神經元個數和引數個數。
隱含層的理解
神經網路隱含層的理解,以兩層神經網路為例:
隱含層的每一個神經元都可以看做是一個線性分類器,都對應著一個分類邊界,比如說隱含層有100個神經元,進行圖片分類任務的時候,這100個神經元的每一個作用是把每一類中的子類分出來,比如說不同顏色的車,不同朝向的車,然後在輸出層的時候,把這些線性的邊界連線在一起,變成一個完整的分類邊界,比如下圖:
這是隱含層有三個神經元的情況,可以看出,有三條線性的邊界,左邊,右上和右下,最後的分類邊界就是三條邊界連線在一起。(啟用函式的一個作用就是可以把幾條線性的邊界用非線性的平滑方式連線在一起,可以看看這個高票回答)現在最常用的啟用函式是relu(也就是max(0,x))
一般來說,隱含層規模越大,擬合效果越好:
但是容易有過擬合的情況,這個時候,不應該減小隱含層的規模,而是引入正則項.
有一個線上的例子 可以調整引數檢視效果
總結
1、介紹了幾個啟用函式。
2、介紹了神經網路和全連線層。
3、神經網路可以近似所有函式。
4、大的神經網路往往效果更好,但是需要其他手段防止過擬合。