深度學習關於激活函數和損失函數的調研

1) 激活函數(Activation Function)

背景

深度學習的基本原理是基於人工神經網絡,信號從一個神經元進入,經過非線性的activation function,傳入到下一層神經元;再經過該層神經元的activate,繼續往下傳遞,如此循環往復,直到輸出層。正是由於這些非線性函數的反覆疊加,才使得神經網絡有足夠的capacity來抓取複雜的pattern,在各個領域取得state-of-the-art的結果。顯而易見,activation function在深度學習中舉足輕重,也是很活躍的研究領域之一。目前來講,選擇怎樣的activation function不在於它能否模擬真正的神經元,而在於能否便於優化整個深度神經網絡。下面我們簡單聊一下各類函數的優缺點以及其適用場景。

Sigmoid函數

σ(x)=11+ex\sigma(x)=\frac{1}{1+e^{-x}}
在這裏插入圖片描述
Sigmoid函數是深度學習領域開始時使用頻率最高的activation function
Pros

  • 它是便於求導的平滑函數,其導數爲σ(x)(1-σ(x))

Cons

  • 容易出現gradient vanishing
  • 函數輸出並不是zero-centered
  • 冪運算相對來講比較耗時

適用場景

  • 常用於輸出層,多應用在二分類問題、邏輯迴歸任務及其他神經網絡領域

tanh函數

tanh(x)=exexex+extanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
在這裏插入圖片描述
tanh讀作Hyperbolic Tangent,雙曲正切函數
Pros

  • 解決了Sigmoid函數的不是zero-centered輸出問題
    Cons

  • 梯度消失(gradient vanishing)的問題和冪運算的問題仍然存在

適用場景

  • 較多用在自然語言處理的遞歸神經網絡和語音識別任務

Relu函數

ReLu(x)=max(0,x)ReLu(x)=max(0,x)
在這裏插入圖片描述
ReLU函數其實就是一個取最大值函數,注意這並不是全區間可導的,但是我們可以取sub-gradient。
Pros

  • 解決了gradient vanishing問題 (在正區間)
  • 計算速度非常快,只需要判斷輸入是否大於0
  • 收斂速度遠快於sigmoid和tanh

Cons

  • ReLU的輸出不是zero-centered
  • Dead ReLU Problem

適用場景

  • 應用最廣泛的激活函數,只在隱藏層中使用

Leaky Relu函數(PReLu)

f(x)=max(0.01x,x)f(x)=max(0.01x,x)
在這裏插入圖片描述
人們爲了解決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)函數

f(x)={x,if x>0α(ex1),otherwise f(x)= \begin{cases} x, & \text {if $x$>0} \\ \alpha(e^x-1), & \text{otherwise} \end{cases}
在這裏插入圖片描述

ELU也是爲解決ReLU存在的問題而提出

Pros

  • ELU有ReLU的基本所有優點
  • 不會有Dead ReLU問題
  • 輸出的均值接近0,zero-center

Cons

  • 計算量稍大

適用場景

  • 用於加速深層神經網絡的訓練

MaxOut函數

f(x)=max(w1Tx+b1,w2Tx+b2)f(x)=max(w_1^Tx+b_1,w_2^Tx+b_2)

Maxout可以看做是在深度學習網絡中加入一層激活函數層,包含一個參數k

Pros

  • 跳出了點乘的基本形式
  • 在所有輸入範圍上都沒有神經元飽和問題
  • 擬合能力非常強

Cons

  • 使得神經元個數和參數加倍,導致優化困難

適用場景

  • 多用於隱藏層

2) 損失函數(Loss Function)

0-1損失函數(zero-one loss)

0-1損失是指預測值和目標值不相等爲1,否則爲0:
L(Y,f(x))={1,Yf(x)0,Y=f(x) L(Y,f(x))= \begin{cases} 1, & \text {Y$\neq$f(x)} \\ 0, & \text{Y$=$f(x)} \end{cases}
特點:
a.0-1損失函數直接對應分類判斷錯誤的個數,但是它是一個非凸函數,不太適用
b.感知機就是用的這種損失函數。但是相等這個條件太過嚴格,因此可以放寬條件,即滿足|Y-f(x)|<T時認爲相等,
L(Y,f(x))={1,Yf(x)T0,Yf(x)<T L(Y,f(x))= \begin{cases} 1, & \text {$|Y-f(x)|\geq T$} \\ 0, & \text{$|Y-f(x)|<T$} \end{cases}

絕對值損失函數

絕對值損失函數是計算預測值與目標值的差的絕對值:
L(Y,f(x))=Yf(x) L(Y,f(x))=|Y-f(x)|

log損失函數

log對數損失函數的標準形式如下:
L(Y,P(YX))=logP(YX) L(Y,P(Y|X))=-logP(Y|X)
特點:
a. log對數損失函數能非常好的表徵概率分佈,在很多場景尤其是多分類,如果需要知道結果屬於每個類別的置信度,那它非常適合。
b. 魯棒性不強,相比於hinge loss對噪聲更敏感。
c. 邏輯迴歸的損失函數就是log對數損失函數。

平方損失函數

平方損失函數標準形式如下:
L(Yf(X))=N(Yf(X))2 L(Y|f(X))=\sum_{N}(Y,f(X))^2
特點:
經常應用於迴歸問題

指數損失(exponential loss)函數

指數損失函數標準形式如下:
L(Yf(X))=exp[yf(x)]L(Y│f(X) )=exp⁡[-yf(x)]
特點:
對離羣點、噪聲非常敏感。經常用在AdaBoost算法中。

Hinge損失函數

Hinge損失函數標準形式如下:
L(yf(x))=max(0,1yf(x))L(y│f(x) )=max⁡(0,1-yf(x))
特點:
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)函數

感知損失函數的標準形式如下:
LYf(x)=max(0,1f(x))L(Y,f(x))=max⁡(0,1-f(x))
特點:
是Hinge損失函數的一個變種,Hinge loss對判定邊界附近的點(正確端)懲罰力度很高。而perceptron loss只要樣本的判定類別正確的話,它就滿意,不管其判定邊界的距離。它比Hinge loss簡單,因爲不是max-margin boundary,所以模型的泛化能力沒 hinge loss強。

交叉熵損失 (Cross-entropy loss)函數

交叉熵損失函數的標準形式如下:
C=1nx[ylna+(1y)ln(1a)]C=-\frac{1}{n}\sum_{x}[y ln⁡a+(1-y)ln⁡(1-a)]
其中,x表示樣本, y表示預測的輸出, a表示實際的輸出,n表示樣本總數量。
特點:
a.本質上也是一種對數似然函數,可用於二分類和多分類任務中。
二分類問題中的loss函數(輸入數據是softmax或者sigmoid函數的輸出):
loss=1nx[ylna+(1y)ln(1a)]loss=-\frac{1}{n}\sum_{x}[y ln⁡a+(1-y)ln⁡(1-a)]
多分類問題中的loss函數(輸入數據是softmax或者sigmoid函數的輸出):
loss=1nxyilnailoss=-\frac{1}{n}\sum_{x}y_i\ln a_i
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

發佈了13 篇原創文章 · 獲贊 1 · 訪問量 637
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章