關於激活函數和損失函數的調研
1) 激活函數(Activation Function)
背景
深度學習的基本原理是基於人工神經網絡,信號從一個神經元進入,經過非線性的activation function,傳入到下一層神經元;再經過該層神經元的activate,繼續往下傳遞,如此循環往復,直到輸出層。正是由於這些非線性函數的反覆疊加,才使得神經網絡有足夠的capacity來抓取複雜的pattern,在各個領域取得state-of-the-art的結果。顯而易見,activation function在深度學習中舉足輕重,也是很活躍的研究領域之一。目前來講,選擇怎樣的activation function不在於它能否模擬真正的神經元,而在於能否便於優化整個深度神經網絡。下面我們簡單聊一下各類函數的優缺點以及其適用場景。
Sigmoid函數
Sigmoid函數是深度學習領域開始時使用頻率最高的activation function
Pros
- 它是便於求導的平滑函數,其導數爲σ(x)(1-σ(x))
Cons
- 容易出現gradient vanishing
- 函數輸出並不是zero-centered
- 冪運算相對來講比較耗時
適用場景
- 常用於輸出層,多應用在二分類問題、邏輯迴歸任務及其他神經網絡領域
tanh函數
tanh讀作Hyperbolic Tangent,雙曲正切函數
Pros
-
解決了Sigmoid函數的不是zero-centered輸出問題
Cons -
梯度消失(gradient vanishing)的問題和冪運算的問題仍然存在
適用場景
- 較多用在自然語言處理的遞歸神經網絡和語音識別任務
Relu函數
ReLU函數其實就是一個取最大值函數,注意這並不是全區間可導的,但是我們可以取sub-gradient。
Pros
- 解決了gradient vanishing問題 (在正區間)
- 計算速度非常快,只需要判斷輸入是否大於0
- 收斂速度遠快於sigmoid和tanh
Cons
- ReLU的輸出不是zero-centered
- Dead ReLU Problem
適用場景
- 應用最廣泛的激活函數,只在隱藏層中使用
Leaky Relu函數(PReLu)
人們爲了解決Dead ReLU Problem,提出了將ReLU的前半段設爲[公式]而非0。另外一種直觀的想法是基於參數的方法,即Parametric ReLU:f(x)=max(ax,x),其中α可由back propagation學出來。
Pros
- Leaky ReLU有ReLU的所有優點,外加不會有Dead ReLU問題,但是在實際操作當中,並沒有完全證明Leaky ReLU總是好於ReLU。
Cons
- 需要調參來找到一個好的緩慢下降的參數
適用場景
- 跟ReLu函數應用相近
ELU(Exponential Linear Units)函數
ELU也是爲解決ReLU存在的問題而提出
Pros
- ELU有ReLU的基本所有優點
- 不會有Dead ReLU問題
- 輸出的均值接近0,zero-center
Cons
- 計算量稍大
適用場景
- 用於加速深層神經網絡的訓練
MaxOut函數
Maxout可以看做是在深度學習網絡中加入一層激活函數層,包含一個參數k
Pros
- 跳出了點乘的基本形式
- 在所有輸入範圍上都沒有神經元飽和問題
- 擬合能力非常強
Cons
- 使得神經元個數和參數加倍,導致優化困難
適用場景
- 多用於隱藏層
2) 損失函數(Loss Function)
0-1損失函數(zero-one loss)
0-1損失是指預測值和目標值不相等爲1,否則爲0:
特點:
a.0-1損失函數直接對應分類判斷錯誤的個數,但是它是一個非凸函數,不太適用
b.感知機就是用的這種損失函數。但是相等這個條件太過嚴格,因此可以放寬條件,即滿足|Y-f(x)|<T時認爲相等,
絕對值損失函數
絕對值損失函數是計算預測值與目標值的差的絕對值:
log損失函數
log對數損失函數的標準形式如下:
特點:
a. log對數損失函數能非常好的表徵概率分佈,在很多場景尤其是多分類,如果需要知道結果屬於每個類別的置信度,那它非常適合。
b. 魯棒性不強,相比於hinge loss對噪聲更敏感。
c. 邏輯迴歸的損失函數就是log對數損失函數。
平方損失函數
平方損失函數標準形式如下:
特點:
經常應用於迴歸問題
指數損失(exponential loss)函數
指數損失函數標準形式如下:
特點:
對離羣點、噪聲非常敏感。經常用在AdaBoost算法中。
Hinge損失函數
Hinge損失函數標準形式如下:
特點:
a.hinge損失函數表示如果被分類正確,損失爲0,否則損失就爲1-yf(x)。SVM就是使用這個損失函數。
b.一般的f(x)是預測值,在-1到1之間, y是目標值(-1或1)。其含義是,f(x)的值在-1和+1之間就可以了,並不鼓勵|f(x)|>1,即並不鼓勵分類器過度自信,讓某個正確分類的樣本距離分割線超過1並不會有任何獎勵,從而使分類器可以更專注於整體的誤差。
c.魯棒性相對較高,對異常點、噪聲不敏感,但它沒太好的概率解釋。
感知損失(perceptron loss)函數
感知損失函數的標準形式如下:
特點:
是Hinge損失函數的一個變種,Hinge loss對判定邊界附近的點(正確端)懲罰力度很高。而perceptron loss只要樣本的判定類別正確的話,它就滿意,不管其判定邊界的距離。它比Hinge loss簡單,因爲不是max-margin boundary,所以模型的泛化能力沒 hinge loss強。
交叉熵損失 (Cross-entropy loss)函數
交叉熵損失函數的標準形式如下:
其中,x表示樣本, y表示預測的輸出, a表示實際的輸出,n表示樣本總數量。
特點:
a.本質上也是一種對數似然函數,可用於二分類和多分類任務中。
二分類問題中的loss函數(輸入數據是softmax或者sigmoid函數的輸出):
多分類問題中的loss函數(輸入數據是softmax或者sigmoid函數的輸出):
b.當使用sigmoid作爲激活函數的時候,常用交叉熵損失函數而不用均方誤差損失函數,因爲它可以完美解決平方損失函數權重更新過慢的問題,具有“誤差大的時候,權重更新快;誤差小的時候,權重更新慢”的良好性質。
參考文獻:
[1] Nwankpa C, Ijomah W, Gachagan A, et al. Activation functions: Comparison of trends in practice and research for deep learning[J]. arXiv preprint arXiv:1811.03378, 2018.
[2] 聊一聊深度學習的activation function [EB/OL].(2017-02-12)[2019-11-13]. https://zhuanlan.zhihu.com/p/25110450
[3] 常用激活函數(激勵函數)理解與總結[EB/OL].(2018-05-13)[2019-11-13]. https://blog.csdn.net/tyhj_sf/article/details/79932893
[4] 深度學習中的激活函數彙總[EB/OL].(2018-08-25)[2019-11-13]. http://spytensor.com/index.php/archives/23/
[5] 激活函數(ReLU, Swish, Maxout) [EB/OL].(2017-02-18)[2019-11-13]. https://www.cnblogs.com/makefile/p/activation-function.html
[6] 各種激活函數整理總結[EB/OL].(2018-10-27)[2019-11-13]. https://hellozhaozheng.github.io/z_post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0-%E5%90%84%E7%A7%8D%E6%BF%80%E6%B4%BB%E5%87%BD%E6%95%B0%E6%B7%B1%E5%85%A5%E8%A7%A3%E6%9E%90/
[7] 常見的損失函數(loss function)總結[EB/OL].(2019-07-19)[2019-11-13].
https://zhuanlan.zhihu.com/p/58883095