本文總結自《Neural Networks and Deep Learning》第3章的內容。 html
學習慢 => 偏導數 ∂C/∂w 和 ∂C/∂b 值小。網絡
引入交叉熵代價函數就是爲了解決學習慢的問題。函數
交叉熵代價函數的定義以下:post
將交叉熵看做代價函數,是基於它的如下兩個特性:學習
(1)它是非負的。測試
(2)若是對於全部的訓練輸入x,神經元實際的輸出接近目標值,那麼交叉熵將接近0。優化
相比於二次代價函數,交叉熵還有一個特性能夠避免學習速度降低的問題。spa
由於交叉熵函數關於權重和偏置的偏導數的表達式中不存在σ′(z)這樣的項,從而避免了學習緩慢。具體分析以下:3d
二次函數關於權重和偏置的偏導數分別是:htm
而σ函數的圖像在神經元的輸出接近1的時候,曲線變得至關平,因此σ′(z) 就很小了。上述公式也告訴咱們∂C/∂w 和 ∂C/∂b 值會很是小。這其實就是學習緩慢的緣由所在。
交叉熵函數關於權重和偏置的偏導數分別是:
上述公式代表權重學習的速度受到σ(z)-y,也就是輸出中的偏差的控制。同時交叉熵函數還避免了像在二次代價函數中相似σ′(z) 致使的學習緩慢。
不一樣的代價函數應該搭配不一樣的學習率。
5. 在何時用交叉熵來替換二次代價函數?
若是在輸出神經元是S 型神經元時,交叉熵通常都是更好的選擇。
若是輸出神經元是線性的那麼二次代價函數再也不會致使學習速度降低的問題。在此情形下,二次代價函數就是一種合適的選擇。
另一種解決學習緩慢問題的方法。
柔性最大值的想法其實就是爲神經網絡定義一種新式的輸出層。
(1)首先計算帶權輸入
(2)不在帶權輸入z上使用S型函數來得到輸出,而是使用softmax函數來得到輸出。
公式(1)
其中,分母中的求和是在全部的輸出神經元上進行的。
另一個特性:根據定義,輸出的激活值加起來正好爲1。
公式(2)
由公式(1)(2),咱們看到柔性最大值層的輸出是一些相加爲1正數的集合。換言之,柔性最大值層的輸出能夠被看作是一個機率分佈。
在不少問題中,使用softmax是很方便的。好比在MNIST分類問題中,咱們能夠將輸出層第j個神經元的激活值解釋成網絡估計正確數字分類爲j的機率。
先定義一個對數似然(log-likelihood)代價函數。
對數似然函數知足咱們期待的代價函數的條件。
對數似然代價函數關於權重和偏置的偏導數分別是:
這些方程其實和以前的交叉熵獲得的相似。只是以前的是平均值。
正如前面的分析,這些表達式確保咱們不會遇到學習緩慢的問題。事實上,把一個具備對數似然代價的柔性最大值輸出層,看做與一個具備交叉熵代價的S型輸出層很是類似,這是頗有用的。
實際上,在不少應用場景中,這兩種方式的效果都不錯。
柔性最大值加上對數似然的組合更加適用於那些須要將輸出激活值解釋爲機率的場景。
(1)cost上的對比
先在訓練集上跑,訓練集上cost和epoch(截取200-400之間)的關係以下:
測試集上:
(2)分類準確率上的對比
咱們在每一個迭代期的最後都計算在validation_data 上的分類準確率。一旦分類準確率已經飽和,就中止訓練。這個策略被稱爲提早中止。
(1)通常來講,最好的下降過分擬合的方式之一就是增長訓練樣本的量。有了足夠的訓練數據,就算是一個規模很是大的網絡也不大容易過分擬合。不幸的是,訓練數據實際上是很難或者很昂貴的資源,因此這不是一種太切實際的選擇。
(2)下降網絡規模。可是更深層更大的網絡潛在有更強的學習能力。
(3)規範化。即便對於固定的神經網絡和固定的訓練集, 仍然能夠減小overfitting。
規範化有不少技術,這裏給出一種最爲經常使用的規範化手段—— 有時候被稱爲權重衰減(weight decay)或者L2 規範化。
L2 規範化的想法是增長一個額外的項到代價函數上,這個項叫作規範化項。
其中C0是原始的代價函數,第二個如今加入的就是全部權重的平方的和。而後使用一個因子λ/2n 進行量化調整,其中λ>0 能夠稱爲規範化參數,而n就是訓練集合的大小。
須要注意的是,規範化項裏面並不包含偏置。
規範化的效果是讓網絡傾向於學習小一點的權重。
規範化能夠當作一種尋找小的權重和最小化原始的代價函數之間的折中。由λ的取值決定,λ越小,就偏向於最小化原始代價函數,反之,傾向於小的權重。
(1)減輕過分擬合和提升分類準確率。
(2)規範化的網絡可以提供更容易複製的結果。無規範化的網絡會偶然被限制住,不一樣的運行會給出相差很大的結果。
規範化的神經網絡經常可以比非規範化的泛化能力更強,這只是一種實驗事實(empirical fact)。目前尚未一整套具備說服力的理論解釋。僅僅是一些不完備的啓發式規則或者經驗。
(1)L1 規範化:是在未規範化的代價函數上加上一個權重絕對值的和。
(2)棄權(Dropout):從隨機(臨時)地刪除網絡中的一半的隱藏神經元開始,同時讓輸入層和輸出層的神經元保持不變。
(3)人爲增長訓練樣本
理解這部分須要先弄明白正態分佈(高斯分佈)、均值、標準差、方差的意義。
結論:假設咱們有一個有 n_in 個輸入權重的神經元,咱們會使用均值=0,標準差= 1/sqrt(n_in)的正態隨機分佈初始化這些權重。
緣由:若這樣初始化的話,那麼大部分帶權輸入z的取值都在1和-1之間,隱藏神經元的輸出σ(z) 就不太會接近1或者0。也就是神經元沒有飽和,學習過程不會被減慢。
(1)Hessian 技術
(2)基於momentum 的梯度降低
(3)更多技術介紹參考這篇論文:http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf
(1)S型神經元
(2)tanh神經元
使用雙曲正切(hyperbolic tangent)函數替換了S 型函數。tanh 神經元的輸出的值域是(-1,1) ,而非(0,1)。
修正線性神經元(rectified linear neuron)或者修正線性單元(rectified linear unit),簡記爲ReLU。
輸入爲x,權重向量爲w,偏置爲b 的ReLU 神經元的輸出是:max(0, w*x + b)。
像sigmoid, tanh同樣, 也能夠撲模擬何函數。
優點:提升ReLU 的帶權輸入並不會致使其飽和,因此就不存在sigmoid, tanh那樣的學習速度降低。若帶權輸入是負數,則梯度消失爲0,因此神經元就中止學習了。這兩點從ReLU的圖像便可看出來。
問題:如何選擇神經元?要靠實驗比較sigmoid, tanh和ReLU的好壞。