機器學習基礎__05__常見的代價函數和激活函數

目錄

1. 常見的代價函數

1.1 迴歸問題的代價函數

1.2 分類問題的代價函數

2. 常見的激活函數

2.1 爲什麼需要激活函數?

2.2 sigmoid函數

2.3 tanh函數

2.4 ReLU函數

2.5 LeakyReLU


1. 常見的代價函數

一句話總結:
關於代價函數,迴歸問題用均方誤差,分類問題用交叉熵。

損失函數(Loss Function):是定義在單個樣本上的,是指一個樣本的誤差。
代價函數(Cost Function):是定義在整個訓練集上的,是所有樣本誤差的平均,也就是所有損失函數值的平均。
目標函數(Object Function):是指最終需要優化的函數,一般來說是經驗風險+結構風險,也就是(代價函數+正則化項)

1.1 迴歸問題的代價函數

迴歸問題一般用圴方誤差MSE:
Cost=\frac{1}{M} \sum_{i=1}^{M}\left(f\left(x^{(i)}\right)-y^{(i)}\right)^{2}

爲了求導時能消除2,通常寫成以下這樣:
Cost=\frac{1}{{\color{Red} 2}M} \sum_{i=1}^{M}\left(f\left(x^{(i)}\right)-y^{(i)}\right)^{2}

1.2 分類問題的代價函數

分類問題一般用交叉熵:
H(p, q)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right),其中n表示所有事件可能,p是真實分佈,q是預測分佈。

二分類的交叉熵代價函數是:
Cost = -\frac{1}{m}\left[\sum_{i=1}^{m} y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right],m是樣本個數,y是真實值,h是預測值

 

2. 常見的激活函數

一句話總結:
一般隱層用ReLU/LeakyReLU,輸出層二分類爲sigmoid,多分類用softmax

2.1 爲什麼需要激活函數?

激活函數是用來加入非線性因素的,因爲線性模型的表達能力不夠
如果不用激勵函數,那麼網絡結構的每一層節點的輸入都是上層輸出的線性函數,很容易驗證,無論你神經網絡有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,這種情況就是最原始的感知機(Perceptron)了,那麼網絡的表達能力就相當有限。正因爲上面的原因,我們決定引入非線性函數作爲激勵函數,這樣深層神經網絡表達能力就更加強大(不再是輸入的線性組合,而是幾乎可以逼近任意函數)

2.2 sigmoid函數

\text { sigmoid }=\sigma(z)=\frac{1}{1+e^{-z}},函數圖像如下:
                                         

它的導數:\sigma(z)^{\prime}=\frac{e^{-z}}{\left(1+e^{-z}\right)^{2}}=\sigma(z) *(1-\sigma(z)),導數圖像如下:
                                      
注,當z在(-5, 5)之外,\sigma(z)^{\prime}值接近0.
致命缺點:當輸入稍大或稍小時,導數接近0

優點
把輸出值壓縮在[0, 1]之間

缺點
1> 梯度消失問題
當輸入值很大或很小時,也就是說當輸入值向橫軸的兩端延伸時,導數接近於0。如果是隻有幾個sigmoid層的淺層神經網絡,這並不會引起很大的問題。然而,當非常多的sigmoid層時,它會導致梯度太小而無法訓練,這就是我們說的梯度消失。然後,當n個隱層使用像sigmoid這樣的激活函數時,會有n個非常小的導數值乘到一起,這樣,隨着我們逐層反向傳播到初始層,梯度會呈指數級的下降。顯然極小的梯度值使得初始層的權值和偏置幾乎無法有效的更新。而這些初始層,在識別輸入數據的基礎模式是至關重要的,它的不準確將導致整個神經網絡的不準確。

2.3 tanh函數

函數公式:
f(x)=\frac{\sinh (x)}{\cosh (x)}=\frac{1-e^{-2 x}}{1+e^{-2 x}}=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}=\frac{e^{2 x}-1}{e^{2 x}+1}={\color{Red} 2 \operatorname{sigmoid}(2 x)-1}

它的導數:
f^{\prime}(x)=\tanh ^{\prime}(x)=\operatorname{sech}^{2}(x)=1-\tanh ^{2}(x)

                                  

優點:
以原點爲中心對稱,收斂速度比sigmoid快

缺點:
並沒有解決sigmoid中梯度消失問題

2.4 ReLU函數

它是目前使用最廣泛的激活函數

函數公式:
f(x)=\max (0, x),函數圖像如下
                             

在輸入是負值的情況下,它會輸出0,那麼神經元就不會被激活。這意味着同一時間只有部分神經元會被激活,從而使得網絡很稀疏,進而對計算來說是非常有效率的。正因爲有了這單側抑制,才使得神經網絡中的神經元也具有了稀疏激活性

 

它的導數:
f^{'}(x)=\left\{\begin{array}{ll} {1} & {\text { if } x>0} \\ {\text { undefined }} & {\text { if } x=0} \\ {0} & {\text { if } x<0} \end{array}\right.

優點:
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

數學公式:
f(x)=\max (0, x)+\operatorname{leak}^{\star} \min (0, x)
leak是一個很小的常數,這樣保留了一些負軸的值,使得負軸的信息不會全部丟失。

函數圖像如下:
                         

LeakyReLU是爲了解決ReLU中負值不激活問題。

圖像總結:

參考:
1. 一文搞懂交叉熵在機器學習中的使用
2. 常見代價函數
3. 這個講得很好​​​​​​​

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章