BP+SGD+激活函数+代价函数+基本问题处理思路
今天讀到這篇文章,對之前發的幾篇博客來說是非常好的總結,所以轉載 過來學習啦!
0. 學習模型評價標準
? ? 1)學習速度 ? ? 2)推廣能力/泛化能力/Generalize1. 反向傳播算法計算全過程
? ? ? 目標:計算出權重和偏差的梯度(通過反向傳播誤差的方式)。 ? ? ? 下例中,其激活函數為Sigmoid函數: ? ? ?2. 隨機梯度下降法計算全過程
? ? ? 目標:更新權重和偏差。 ? ? ? 下例中,其激活函數為Sigmoid函數: ? ? ? ?3. 激活函數
3.1 為什么需要激活函數?
? ? 如果不用激活函數,每一層的輸出都是上一層的線性組合,從而導致整個神經網絡的輸出為神經網絡輸入的線性組合,無法逼近任意函數。 ? ? 激活函數有以下特性: ? ? 1)非線性 ? ? 2)可微性:當優化方法是基于梯度時,此性質是必須的 ? ? 3)單調性:當激活函數是單調時,可保證單層網絡是凸函數? ? ? 4)輸出值的范圍:當激活函數輸出值是 有限 的時候,基于梯度的優化方法會更加穩定,因為特征的表示受有限權值的影響更顯著;當激活函數的輸出是無限時,模型的訓練會更加高效,不過在這種情況小,一般需要更小的Learning Rate.3.2 常見激活函數匯總
3.3 Sigmoid激活函數? ? ??
3.3.1 Sigmoid激活函數
? ??
? ? 1)優點:
? ? ? ? ?- 它可把輸入的連續實值壓縮到[0,1]之間
? ? ? ? ?- 可解釋為神經元飽和的“firing rate”
? ? 2)缺點:
? ? ? ? ?- 飽和的神經元導致梯度消失
? ? ? ? ? ? 輸入非常大或非常小時,其梯度接近于0
? ? ? ? ?- 指數運算計算量大
? ? ? ? ?- Sigmoid的輸出不是以0為均值
? ? ? ? ? ? 產生的一個結果就是:如果數據進入神經元的時候是正的(e.g. x>0 elementwise in f=wTx+b),那么 w 計算出的梯度也會始終都是正的。 當然了,如果你是按batch去訓練,那么那個batch可能得到不同的信號,所以這個問題還是可以緩解一下的。因此,非0均值這個問題雖然會產生一些不好的影響,不過跟上面提到的 kill gradients 問題相比還是要好很多的。
3.3.2 Sigmoid函數圖形
? ??
3.3.3 Sigmoid函數導數圖形
? ? ? ? ? ?
3.4 Softmax激活函數
? ? ??
? ? ??
? ? ?
? ? ?Softmax的每個神經元的輸出都為正,且它們的和為1。所以Softmax層的輸出可以看作一個概率分布。 ? ? ?與Softmax相比,Sigmoid層的輸出不能形成一個概率分布,且沒有一個直觀、簡單的解釋。3.5 tanh激活函數
? ? ? ? ?
? ? ?1)優點:
? ? ? ? ? ?- 與Sigmoid相比,tanh是0均值的。
? ? ? ? ? ? ? ? ??-?理論和實驗證據表明tanh有時比Sigmoid性能更好。
? ? ? ? ? ?- tanh(-z)=-tanh(z)
? ? ?2)缺點:
? ? ? ? ?- 飽和的神經元導致梯度消失
? ? ? ? ? ? 輸入非常大或非常小時,其梯度接近于0
3.6 校正線性單元(Rectified Linear Unit:ReLU)
? ??
? ? ?f(x) = max(0, wx+b)
? ? ?1)優點:
? ? ? ? ? 相比于 sigmoid/tanh,有如下優點:
? ? ? ? ? - 計算高效:采用sigmoid等函數,算激活函數時(指數運算),計算量大,反向傳播求誤差梯度時,求導涉及除法,計 ?算量相對大,而采用ReLU激活函數,整個過程的計算量節省很多。
? ? ? ? ? - 沒有飽和及梯度消失問題:對于深層網絡,sigmoid函數反向傳播時,很容易就會出現梯度消失的情況(在sigmoid接近飽和區時,變換太緩慢,導數趨于0,這種情況會造成信息丟失,從而無法完成深層網絡的訓練。
? ? ? ? ? -?ReLU會使一部分神經元的輸出為0,這樣就造成了網絡的稀疏性,并且減少了參數的相互依存關系,緩解了過擬合問題的發生。
? ? ? ? ? - 收斂速度比sigmoid/tanh快6倍?
? ? ?2)缺點:?
? ? ? ? ? - 當然 ReLU 也有缺點,就是訓練的時候很”脆弱”,很容易就”die”了. 什么意思呢?
? ? ? ? ? ? 舉個例子:一個非常大的梯度流過一個 ReLU 神經元,更新過參數之后,這個神經元再也不會對任何數據有激活現象了。如果這個情況發生了,那么這個神經元的梯度就永遠都會是0.實際操作中,如果你的Learning Rate 很大,那么很有可能你網絡中的40%的神經元都”dead”了。?
? ? ? ? ? ?當然,如果你設置了一個合適的較小的Learning Rate,這個問題發生的情況其實也不會太頻繁。
? ? ? ? ? ?- ?當z<0時,梯度也消失了
? ? ? ? ? ?- 非零居中輸出
3.7 Leaky-ReLU、P-ReLU、R-ReLU
? ? ? 1)Leaky ReLU:
? ? ? ? ? ?就是用來解決“Die ReLU”的,其定義如下:
? ? ? ??
? ? ? α?是一個很小的常數(如0.01)。這樣,即修正了數據分布,又保留了一些負軸的值,使得負軸信息不會全部丟失。關于Leaky ReLU 的效果,眾說紛紜,沒有清晰的定論。有些人做了實驗發現 Leaky ReLU 表現的很好;有些實驗則證明并不是這樣。? ??
? ? ? ?
? ? ? ? 優點:
? ? ? ? ??- 不會飽和
? ? ? ? ? - 計算高效
? ? ? ? ??- 收斂速度快
? ? ? ? ??- 不會死
? ? ? ? 2)Parametric ReLU:?
? ? ? ?對于 Leaky ReLU 中的α,通常都是通過先驗知識人工賦值的。 而P-ReLU中,α?是一個變量,需要被學習。
? ? ? ?然而可以觀察到,損失函數對α的導數我們是可以求得的,可不可以將它作為一個參數進行訓練呢??
Kaiming He的論文《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》指出,不僅可以訓練,而且效果更好。
? ? ? ?公式非常簡單,反向傳播至未激活前的神經元的公式就不寫了,很容易就能得到。對α的導數如下:
δyiδα=0,(ifyi>0),else=yi
? ? ? 原文說使用了Parametric ReLU后,最終效果比不用提高了1.03%.
? ? ? 3)Randomized ReLU:?
? ? ? ? ? ?Randomized Leaky ReLU 是 leaky ReLU 的random 版本 (α?是random的).?
? ? ? ? ? 它首次試在 kaggle 的NDSB 比賽中被提出的。?核心思想就是,在訓練過程中,α?是從一個高斯分布?
U(l,u)?中 隨機出來的,然后再測試過程中進行修正(有點像dropout的用法)。
? ? ? ? ?數學表示如下:
? ? ? ?在測試階段,把訓練過程中所有的?αij?取個平均值。NDSB 冠軍的?α?是從?U(3,8)?中隨機出來的。那么,在測試階段,激活函數就是就是:?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?4)?Exponential Linear Units (ELU)
? ? ? ?
? ? ? ?1)優點:
? ? ? ? ? ? ?- ?所有ReLU的優點
? ? ? ? ? ? ?- 不會死
? ? ? ? ? ? ?- 輸出接近0均值
? ? ? ?2)缺點:
? ? ? ? ? ? - 計算量大,需要指數運算
3.8 Maxout
? ? ?Maxout定義如下:
? ? ? ? ? ? ?
? ? ?Maxout其實是改變了神經元的形式,它將每個神經元由原來一次訓練一組參數擴展為同時訓練多組參數,然后選擇激活值最大的作為下一層的激活值,比如同時訓練3組參數:
? ? ? ? ? ? ? ? ? ?
? ? ??可以看出ReLu為Maxout同時訓練兩組參數且w2,b2取0時的情形,因此maxout擁有ReLu的所有優點同時避免了神經元“死亡”的現象;但是,由于需要多訓練了幾組參數,網絡的效率也大大降低了。
? ? ? Maxout的擬合能力是非常強的,它可以擬合任意的的凸函數。最直觀的解釋就是任意的凸函數都可以由分段線性函數以任意精度擬合,而Maxout又是取k個“隱隱含層”節點的最大值,這些”隱隱含層"節點也是線性的,所以在不同的取值范圍下,最大值也可以看做是分段線性的(分段的個數與k值有關)。論文中的圖1如下(它表達的意思就是可以擬合任意凸函數,當然也包括了ReLU了):
? ? ??
? ? ??
3.9 激活函數表
??
3.10 Conv&Maxout&NIN
? ? NIN: Network in Network
? ? Maxout和NIN都是對傳統conv+relu的改進;Maxout想表明它能夠擬合任何凸函數,也就能夠擬合任何的激活函數(默認了激活函數都是凸的);NIN想表明它不僅能夠擬合任何凸函數,而且能夠擬合任何函數,因為它本質上可以說是一個小型的全連接神經網絡。
3.10.1 工作流程
? ? 1)常規卷積層:conv→relu
? ? ? ? ? - conv: conv_out=∑(x·w)
? ? ? ? ? - ReLU: y=max(0, conv_out)
? ? 2)Maxout:several conv(full)→max
? ? ? ? ? - several conv (full): conv_out1 = x·w_1, conv_out2 = x·w_2, …
? ? ? ? ? - max: y = max(conv_out1, conv_out2, …)
? ? 3)NIN: conv→relu→conv(1x1)→relu
? ? ? ? ? - several conv (full): conv_out1 = x·w_1, conv_out2 = x·w_2, …
? ? ? ? ? - relu: relu_out1 = max(0, conv_out1), relu_out2 = max(0, conv_out2), …
? ? ? ? ? - conv(1x1): conv_1x1_out = [relu_out1, relu_out2, …]·w_1x1
? ? ? ? ? - relu: y = max(0, conv_1x1_out)
3.10.2 實例說明
? ? ?假設現在有一個3x3的輸入,用一個9維的向量x代表,卷積核大小也是3x3,也9維的向量w代表。? ? ?1)常規卷積層:直接x和w求卷積,然后relu一下就好了。 ? ? ?2)Maxout:有k個的3x3的w(這里的k是自由設定的),分別卷積得到k個1x1的輸出,然后對這k個輸入求最大值
? ? ?3)NIN:有k個3x3的w(這里的k也是自由設定的),分別卷積得到k個1x1的輸出,然后對它們都進行ReLU,然后再次對它們進行卷積,結果再ReLU。(這個過程,等效于一個小型的全連接網絡) ? ??
3.11 如何選擇激活函數
? ?1)不要使用sigmoid;
? ?2)可以考慮使用tanh,但期望不要太高;
? ?3)使用ReLU激活函數的話,注意不要把學習率設得太高,避免產生結點”死亡”現象;
? ?4)最好使用Maxout / Leaky ReLU / ELU, 他們的效果比tanh好。
4. 代價函數
4.1 交叉熵代價函數
?? ?
? ?如果激活函數為sigmoid函數,則有:
? ?
4.2 二次代價函數
? ? 如果激活函數為sigmoid函數,則有:
? ??
4.3 對數似然代價函數
? ??
? ? ?從以上梯度公式中可知,對于解決學習速度慢的問題:【Softmax輸出層+對數似然成本函數】與【Sigmoid輸出層+交叉熵成本函數】效果相當。
? ? ?在二者間如何做出選擇呢? ? ???當你需要把輸出當做概率解釋時,則需要使用【Softmax輸出層+對數似然成本函數】。? ??5.?基本問題處理思路
5.1 減少參數數量
? ? ? 1)主要是減少權重參數數量,如CNN與全連接神經網絡相比,通過共享權重和偏差,大大減少了權重參數的數量;從而使學習變得更加容易。
5.2 減少過擬合
5.2.1 使用強有力的規范化技術
? ? ? ? ? ? - L1規范化
? ? ? ? ? ? ??
? ? ? ? ? ? - L2規范化(或權重衰減:weight decay)
? ? ? ? ? ? ? 獲取小的權重,且使代價函數的值最小。
? ? ? ? ? ? ??
? ? ? ? ? ? - dropout(棄權)
? ? ? ? ? ? ? dropout不修改代價函數,而是修改網絡本身。基本思路是:保持輸入和輸出神經元不變,對于一個mini-batch訓練樣本,隨機刪除一半的隱層神經元,然后根據BP+SGD更新權重和偏差;然后基于另一個mini-batch做同樣的操作;一直重復下去。
? ? ? ? ? ? ? ?可以理解為訓練多個神經網絡,然后多個神經網絡再對結果進行投票,從而排除overfitting。其目標是:在丟失部分證據的條件下,此方法同樣健壯。
? ? ? ? ? ? ? ?Dropout用于訓練大的深度網絡很有用,因為在此類網絡中,overfitting問題非常嚴重。
? ? ? ? ? ? ? ?
? ? ? ? ? ? - 卷積層
? ? ? ? ? ? ? ?共享權重:意味著卷積濾波器被強制從整個圖像中學習,于是對過擬合就有了很強的抵抗性。
? ? ? ? ? ? - 人工擴展訓練數據
5.2.2 增加訓練數據的數量
5.3 加速訓練
? ? ? 1)使用ReLU而不是Sigmoid,可以加速訓練。
5.4 訓練時間長
? ? ? 1)可通過GPU來進行長期訓練。
5.5 學習速度下降
? ? ? 1)使用正確的代價函數(如交叉熵代價函數):避免梯度消失或爆炸,即梯度不穩定問題。
? ? ? 2)使用好的權重初始化:避免神經元飽和。
參考:http://www.cnblogs.com/tornadomeet/tag/Deep%20Learning/
總結
以上是生活随笔為你收集整理的BP+SGD+激活函数+代价函数+基本问题处理思路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人工神经网络之BP神经网络模型
- 下一篇: Google WideDeep Mode