目錄
1. 常見的代價函數
一句話總結:
關於代價函數,迴歸問題用均方誤差,分類問題用交叉熵。
損失函數(Loss Function):是定義在單個樣本上的,是指一個樣本的誤差。
代價函數(Cost Function):是定義在整個訓練集上的,是所有樣本誤差的平均,也就是所有損失函數值的平均。
目標函數(Object Function):是指最終需要優化的函數,一般來說是經驗風險+結構風險,也就是(代價函數+正則化項)
1.1 迴歸問題的代價函數
迴歸問題一般用圴方誤差MSE:
爲了求導時能消除2,通常寫成以下這樣:
1.2 分類問題的代價函數
分類問題一般用交叉熵:
,其中n表示所有事件可能,p是真實分佈,q是預測分佈。
二分類的交叉熵代價函數是:
,m是樣本個數,y是真實值,h是預測值
2. 常見的激活函數
一句話總結:
一般隱層用ReLU/LeakyReLU,輸出層二分類爲sigmoid,多分類用softmax
2.1 爲什麼需要激活函數?
激活函數是用來加入非線性因素的,因爲線性模型的表達能力不夠。
如果不用激勵函數,那麼網絡結構的每一層節點的輸入都是上層輸出的線性函數,很容易驗證,無論你神經網絡有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,這種情況就是最原始的感知機(Perceptron)了,那麼網絡的表達能力就相當有限。正因爲上面的原因,我們決定引入非線性函數作爲激勵函數,這樣深層神經網絡表達能力就更加強大(不再是輸入的線性組合,而是幾乎可以逼近任意函數)
2.2 sigmoid函數
,函數圖像如下:
它的導數:,導數圖像如下:
注,當z在(-5, 5)之外,值接近0.
致命缺點:當輸入稍大或稍小時,導數接近0
優點
把輸出值壓縮在[0, 1]之間
缺點
1> 梯度消失問題
當輸入值很大或很小時,也就是說當輸入值向橫軸的兩端延伸時,導數接近於0。如果是隻有幾個sigmoid層的淺層神經網絡,這並不會引起很大的問題。然而,當非常多的sigmoid層時,它會導致梯度太小而無法訓練,這就是我們說的梯度消失。然後,當n個隱層使用像sigmoid這樣的激活函數時,會有n個非常小的導數值乘到一起,這樣,隨着我們逐層反向傳播到初始層,梯度會呈指數級的下降。顯然極小的梯度值使得初始層的權值和偏置幾乎無法有效的更新。而這些初始層,在識別輸入數據的基礎模式是至關重要的,它的不準確將導致整個神經網絡的不準確。
2.3 tanh函數
函數公式:
它的導數:
優點:
以原點爲中心對稱,收斂速度比sigmoid快
缺點:
並沒有解決sigmoid中梯度消失問題
2.4 ReLU函數
它是目前使用最廣泛的激活函數。
函數公式:
,函數圖像如下
在輸入是負值的情況下,它會輸出0,那麼神經元就不會被激活。這意味着同一時間只有部分神經元會被激活,從而使得網絡很稀疏,進而對計算來說是非常有效率的。正因爲有了這單側抑制,才使得神經網絡中的神經元也具有了稀疏激活性。
它的導數:
優點:
1> 消除梯度消失問題
2> 加快訓練速度(正因爲消除了梯度消失,訓練才快)
缺點:
輸入是負值時,則完全不激活。
當然relu也存在不足:就是訓練的時候很”脆弱”,很容易就”die”了. 舉個例子:一個非常大的梯度流過一個 ReLU 神經元,更新過參數之後,這個神經元再也不會對任何數據有激活現象了。如果這個情況發生了,那麼這個神經元的梯度就永遠都會是0.實際操作中,如果你的learning rate 很大,那麼很有可能你網絡中的40%的神經元都”dead”了。 當然,如果你設置了一個合適的較小的learning rate,這個問題發生的情況其實也不會太頻繁。
建議:
1>一般情況下,ReLU表現很好了。
在使用 ReLU,就要注意設置 learning rate,不要讓網絡訓練過程中出現很多 “dead” 神經元。如果“dead”無法解決,可以嘗試 Leaky ReLU、PReLU 、RReLU等Relu變體來替代ReLU
2> 不建議使用 sigmoid,如果一定要使用,也可以用 tanh來替代。
2.5 LeakyReLU
數學公式:
leak是一個很小的常數,這樣保留了一些負軸的值,使得負軸的信息不會全部丟失。
函數圖像如下:
LeakyReLU是爲了解決ReLU中負值不激活問題。
圖像總結:
參考:
1. 一文搞懂交叉熵在機器學習中的使用
2. 常見代價函數
3. 這個講得很好