當前位置:
首頁 > 最新 > 神經網路中容易被忽視的基礎知識

神經網路中容易被忽視的基礎知識

本文原作者Evan,本文原載於作者的知乎專欄記學習--機器學習。AI 研習社已獲得轉載授權。

以下大多筆記主要來自 cs231n 和其他深度學習資料和一些我自己的補充,首先 CS231n 一個非常不錯的 deep learning 課,值得一看,奉上鏈接(http://cs231n.stanford.edu/),然後,cs231n 本身是有筆記的(https://cs231n.github.io/),最後,知乎上的一些大神對這個筆記進行了翻譯 (http://t.cn/RtgQHyT)。在這裡,我主要是將一些重要的筆記,我認為是比較容易被我們忽視的,加上查閱其他博文,做一個筆記和心得總結!

這次主要講解的內容有:

基本神經元

作為線性分類器的單個神經元

為什麼要是深度神經網而不是」 肥胖 「神經網路?

為什麼在人工神經網路中的神經元需要激活函數?

一些主要的激活函數

神經網路中的偏置有什麼意義?

初始化神經網路的參數可以全為 0 嗎,其他普通線性分類器呢?

交叉熵損失存在的意義和與平方差損失相比有什麼好處?

神經元

下面圖表的左邊展示了一個生物學的神經元,右邊展示了一個常用的數學模型。乍一看還是有點相似的,事實上也是,人工神經網路中的神經元也有受到生物神經元的啟發。總結要點:

在生物的神經元(也就是左圖)中,樹突將信號傳遞到細胞體,信號在細胞體中相加。如果最終之和高於某個閾值,那麼神經元將會激活,向其軸突輸出一個峰值信號,注意這裡輸出是一個脈衝信號!

在數學計算模型(也就是右圖)中,首先將輸入進行加權求和加上偏執,得到待激勵值,然後將該值作為輸入,輸入到激活函數中,最後輸出的是一個激勵後的值,這裡的激活函數可以看成對生物中神經元的激活率建模。由於歷史原因,激活函數常常選擇使用sigmoid 函數 σ當然還有很多其他激活函數,下面再仔細聊!

需要注意:1. 一個神經元可以看成包含兩個部分,一個是對輸入的加權求和加上偏置,一個是激活函數對求和後的激活或者抑制。2. 注意生物中的神經元要複雜的多,其中一個是生物中的輸出是一個脈衝,而現在大多數的數學模型神經輸出的就是一個值,當然現在也有一些脈衝人工神經網路,可以自行了解!

作為線性分類器的單個神經元

比如基礎的邏輯回歸,結合上面的神經元知識,可以發現,邏輯回歸就是激活函數是sigmoid的單層簡單神經網路。也就是說,只要在神經元的輸出端有一個合適的損失函數,就能讓單個神經元變成一個線性分類器。因此說,那些線性的分類器本身就是一個單層神經網路

但注意,對於非線性的模型:SVM 和神經網路走了兩條不同的道路:神經網路通過多個隱層的方法來實現非線性的函數,有一些理論支持(比如說帶隱層的神經網路可以模擬任何函數),但是目前而言還不是非常完備;SVM 則採用了 kernel trick 的方法,這個在理論上面比較完備(RKHS,簡單地說就是一個泛函的線性空間)。兩者各有好壞,神經網路最近的好處是網路設計可以很靈活,有很多的 trick&tip,很多理論都不清不楚的;SVM 的理論的確漂亮,但是 kernel 設計不是那麼容易,所以最近也就沒有那麼熱了。

為什麼要是深度神經網而不是」 肥胖 「(寬度)神經網路?

「肥胖」 網路的隱藏層數較少,如上左圖。雖然有研究表明,淺而肥的網路也可以擬合任何的函數,但它需要非常的 「肥胖」,可能一層就要成千上萬個神經元。而這直接導致的後果是參數的數量增加到很多很多。

也有實驗表明,也就是上圖的實驗,我們可以清楚的看出,當準確率差不多的時候,參數的數量卻相差數倍。這也說明我們一般用深層的神經網路而不是淺層 「肥胖」 的網路。

注意:說神經網路多少層數的時候一般不包括輸入層。 在神經網路中的激活主要講的是梯度的更新的激活。

為什麼在人工神經網路中的神經元需要激活函數?

上圖可看做普通的線性分類器,也就是線性回歸方程。這個比較基礎,效果如右圖。當然有時候我們發現這樣的線性分類器不符合我們要求時,我們很自然的想到那我們就加多一層,這樣可以擬合更加複雜的函數,如下圖 a:

圖 a

圖 b

但同時當我們動筆算下, 就會發現, 這樣一個神經網路組合起來, 輸出的時候無論如何都還是一個線性方程。如上圖 b 右邊,就只能這樣分類。(那也太蠢了吧)。下圖表示一層加如激活函數的情況!

一層很多時候是遠遠不夠的,前面講過,簡單的線性分類器就可以看成是一層的神經網路,比如上圖,激活函數是 signmoid,那就可以看成是二分類的邏輯回歸!

下面擴展到多層,如下圖 1,2:

圖 1

圖 2

圖 1 是一個簡單的 MLP(全鏈接神經網路),圖 2 的右邊課簡單表示左圖的可視化,那麼對比之前的無激活函數的圖,很明顯是更加的非線性,擬合能力也會更強,同時可以想到,當層數更多,其能力也會越來越強!

簡單來說:就是使得神經網路具有的擬合非線性函數的能力,使得其具有強大的表達能力!

簡單擴展,神經網路的萬能近似定理: 一個前饋神經網路如果具有線性層和至少一層具有 "擠壓" 性質的激活函數(如 signmoid 等),給定網路足夠數量的隱藏單元,它可以以任意精度來近似任何從一個有限維空間到另一個有限維空間的 borel 可測函數。

要相符上面的定理,也就是想擬合任意函數,一個必須點是 「要有帶有 「擠壓」 性質的激活函數」。這裡的 「擠壓」 性質是因為早期對神經網路的研究用的是sigmoid類函數,所以對其數學性質的研究也主要基於這一類性質:將輸入數值範圍擠壓到一定的輸出數值範圍。(後來發現,其他性質的激活函數也可以使得網路具有普適近似器的性質,如 ReLU 。

一些主要的激活函數sigmoid

優點:有較好的解釋性

缺點:1.Sigmoid 函數飽和使梯度消失。sigmoid 神經元有一個不好的特性,就是當神經元的激活在接近 0 或 1 處時會飽和:在這些區域,梯度幾乎為 0。2.輸出不是零中心的,這一情況將影響梯度下降的運作,因為如果輸入神經元的數據總是正數,那麼關於 w 的梯度在反向傳播的過程中,將會要麼全部是正數,要麼全部是負數,這樣梯度下降權重更新時出現 z 字型的下降。這樣收斂會變得異常的慢。(這也是為什麼要一直保持為數據的 0 中心化)—–但這個問題比較小3.exp()在深度神經網路時候相比其他運算就比較慢

Tanh 非線性函數

優點:1.它的輸出是零中心的。因此,在實際操作中,tanh 非線性函數比 sigmoid 非線性函數更受歡迎。

缺點:1. 和 Sigmoid 函數一樣,飽和使梯度消失。計算慢

ReLU

優點:1.ReLU 對於隨機梯度下降的收斂有巨大的加速作用( Krizhevsky 等的論文 alexnet 指出有 6 倍之多)。據稱這是由它的線性,非飽和的公式導致的;2.注意:現在大部分的 DNN 用的激活函數就是 ReLu

缺點:1.當 x 是小於 0 的時候,那麼從此所以流過這個神經元的梯度將都變成 0;這個時候這個 ReLU 單元在訓練中將死亡(也就是參數無法更新),這也導致了數據多樣化的丟失(因為數據一旦使得梯度為 0,也就說明這些數據已不起作用)。

Leaky ReLU

優點:1.非飽和的公式; 2.Leaky ReLU 是為解決 「ReLU 死亡」 問題的嘗試

缺點:1. 有些研究者的論文指出這個激活函數表現很不錯,但是其效果並不是很穩定

Kaiming He 等人在 2015 年發布的論文 Delving Deep into Rectifiers 中介紹了一種新方法 PReLU,把負區間上的斜率當做每個神經元中的一個參數。然而該激活函數在在不同任務中均有益處的一致性並沒有特別清晰。

ELU

指數線性單元(Exponential Linear Units, ELU) ELU 的公式為:

ELU.png 函數曲線如下:

Maxout

Maxout 是對 ReLU 和 leaky ReLU 的一般化歸納

優點:1. 擁有 ReLU 單元的所有優點(線性操作和不飽和),而沒有它的缺點(死亡的 ReLU 單元)

缺點 :1.每個神經元的參數數量增加了一倍,這就導致整體參數的數量激增。難訓練, 容易過擬合

怎麼用激活函數

「那麼該用那種呢?」用 ReLU 非線性函數。注意設置好學習率,(如果學習率設置得太高,可能會發現網路中 40% 的神經元都會死掉(在整個訓練集中這些神經元都不會被激活)。通過合理設置學習率,這種情況的發生概率會降低。),解決方案:或許可以監控你的網路中死亡的神經元占的比例。如果單元死亡問題困擾你,就試試 Leaky ReLU 或者 Maxout,不要再用 sigmoid 了。也可以試試 tanh,但是其效果應該不如 ReLU 或者 Maxout。

神經網路中的偏置有什麼意義?

最基礎的神經元感知器如下:

這個例子中輸入為三個變數, 輸出為 0 或 1. 當三個變數的加權和大於某個閾值的時候, 輸出為 1, 反之為 0。

注意這裡的閾值, 它度量了神經元產生正 (負) 激勵的難易程度. 也就是說,在上文的模型中, 閾值越大, 產生正激勵的難度越大.

而為了更好的計算和表達,我們可以把其中的 b 和移到同一邊,同時給他取了一個不錯的名字,叫做偏置 Bias,而 w 叫做權重 weight!

也就是說:偏置的大小度量了神經元產生正 (負) 激勵的難易程度.

這是最簡單的感知器神經元. 而現代神經網路中常用的 Sigmoid, tanh 或是 ReLU 都是在的基礎上加上一個激活函數, Bias 也就是 b 的意義是一樣的。

同時對於偏置需要注意的點是:偏置是不需要正則化的,並且正則化偏置的話會導致欠擬合。我們從意義上去理解話,若對偏置正則化(懲罰),會導致激活變得更加簡單,偏差就會上升,學習的能力就會下降!

初始化神經網路的參數可以全為 0 嗎,其他普通線性分類器呢?

在講初始化前,先簡單複習下反向傳播演算法可表示為以下幾個步驟:

1. 進行前饋傳導計算,利用前向傳導公式,得到,直到輸出層的激活值。

對輸出層(第 nl 層),計算:

3. 對於的各層,計算:

4. 計算最終需要的偏導數值:

5. 對 f 舉個例子,若表示 sigmoid 函數,就可以計算得到

從上往下,其中y 代表正確 label,代表最後一層的輸出,表達的是最後一層的加權求和值, f 代表的是激活函數,δ代表的是要反向傳播回去的誤差,l 代表第 l 層,w,b 表示權重和偏置。

我們前面說過:線性分類器邏輯回歸模型可以算作為一個簡單的單層神經網路。為了更好的說明問題,假設一個場景,在十類分類的數字手寫識別中,我們將本來二分類的邏輯回歸推到多分類的softmax,也就是說,神經元的激活函數是 softmax。也就是下圖,然後分析:

輸入層(不算是一層):28×28=784 個輸入單元。也就是 n=784

輸出層:10 個輸出單元, 激活函數為softmax,也就是 m=10

它由兩組參數組成:W和 b, 前者是一個 10×784 維的權值矩陣, 後者是長度為 10 的 bias 列向量. 現在我們假設把它們全部初始化為 0:

第一次正向計算過程中, 簡單算出,輸出層的所有輸出為 0.5.

反向時, 根據前面複習的反向傳播演算法,首先計算δ,假如=1, 即輸入x對應的數字為i, 那麼除了第i個神經元的δ是不同的,其他的值都是一樣, 又於計算權重 w 梯度的公式得知,注意此時的就是輸入值 x,又由於輸入向量x的元素之間的不同, 所以即使δ是一樣的,但最終得到的 10 個梯度值有很大概率是不同且非 0 的, 所以第一次 BP 過程可以取得成效並將一些w和所有的b變成非 0 值.

由於 w 值已經變得不相同了,這個時候前向傳播和後向傳播也就會正常的進行, 後面的訓練顯然也可以順利進行.

得出結論,沒有隱層時, 可以將所有的參數初始化為 0.

如果有隱層呢? 假如還是用sigmoid 激活函數呢。來個更簡單 MLP,

第一次正向計算過程中, 簡單算出,輸出層的所有輸出為神經元 4,5,6 輸出的值(初始化 w,b 為 0, 激活函數是sigmoid)都是一樣的,都是 0.5

第一個反向傳播過程,由權重的更新公式,算出即(神經元 6 和 4,5 之間的權重) 是一樣的,同樣算出都一樣,但非 0, 由 sgd 演算法賦值。

然後第二次正向時,算出神經元 4,5 的輸出一樣(因為 4,5 都是接受 1,2,3 神經元的輸入,且權重相同),但和神經元 6 的輸出不一樣。

然後第二次反向時,根據公式,得出一樣。原因在於計算用的是一樣的輸出,這個也可以從公式得出!

最後結論,一直循環,發現學習得到的模型中, 所有的隱單元都是相同的(在這裡就是神經元 4,5 永遠一樣). 學習失敗.

對於隱層使用了其他函數比如 ReLU:f(net)=max(0,net)其結果也是一樣的: 除了輸入層的輸出值為x本身, 不為 0, 其餘的所有層的輸出都為 0. BP 時所有梯度也都為 0, 包括輸出層. 這意味著所有的非輸入神經元都是無意義的. 學習失敗.對於卷積神經網路,循環神經網路也是一樣的,故一般會用其他初始化方式。

最後最後的結論是,一般只在訓練 SLP / 邏輯回歸模型時才使用 0 初始化所有參數., 更實用的結論是, 深度模型都不會使用 0 初始化所有參數.

交叉熵存在的意義和與平方差相比有什麼好處?

一個非常常見的,非常漂亮的成本函數是 「交叉熵」(cross-entropy)。交叉熵產生於資訊理論裡面的信息壓縮編碼技術,但是它後來演變成為從博弈論到機器學習等其他領域裡的重要技術手段。它的定義如下:

其中,y 是我們預測的概率分布, y』 是實際的分布

1. 交叉熵是正的,2. 當所有輸入 x 的輸出都能接近期望輸出 y 的話,交叉熵的值將會接近 0。這兩個特徵在直覺上我們都會覺得它適合做代價函數。事實上,我們的均方代價函數也同時滿足這兩個特徵。然而....

為什麼在神經網路中用交叉熵代替二次代價函數?

還是從反向傳播,參數更新的角度理解更新參數的公式如下:

a 是 神經元的輸出,其中 a = σ(z), z = wx + b,可知,偏導數受激活函數的導數影響,假設這裡是傳統的sigmoid 激活函數(在之前很多時候都是)。那麼 sigmoid 的導數在輸出接近 0 和 1 的時候 是非常小的,這會導致一些實例在剛開始訓練時學習得非常慢!

但是如果換成是交叉熵 loss,其更新權重公式最後推導得出如下:

由以上公式可知,權重學習的速度受到 σ(z) ? y 影響,更大的誤差,就有更快的學習速度,還避免了二次代價函數方程中因 σ′(z) 導致的學習緩慢。

但是現在也有很多其他的激活函數並不會產生飽和狀態,那麼均方差也有其存在價值。

新人福利

關注 AI 研習社(okweiwu),回復1領取

【超過 1000G 神經網路 / AI / 大數據,教程,論文】

我搭的神經網路不 work 該怎麼辦!看看這 11 條新手最容易犯的錯誤


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

用於文檔理解的面向對象神經規劃
緊跟未來深度學習框架需求,TensorFlow 推出 Eager Execution
如何看待 Hinton 那篇備受關注的Capsules論文?
加速深度學習的訓練和推理

TAG:AI研習社 |