激勵函數通常用於神經網絡的層與層之間,上一層的輸出經過激勵函數的轉換以後輸入到下一層中。神經網絡模型是非線性的,若是沒有使用激勵函數,那麼每一層實際上都至關於矩陣相乘。通過非線性的激勵函數做用,使得神經網絡有了更多的表現力。html
這是一個單層的感知機, 也是咱們最經常使用的神經網絡組成單元啦. 用它能夠劃出一條線, 把平面分割開網絡
那麼很容易地咱們就會想用多個感知機來進行組合, 得到更強的分類能力, 這是沒問題的啦~~
如圖所示,app
那麼咱們動筆算一算, 就能夠發現, 這樣一個神經網絡組合起來,輸出的時候不管如何都仍是一個線性方程哎~納尼, 說好的非線性分類呢~!!!!???ide
再盜用一幅常常在課堂上用的圖…然而我已經不知道出處是哪了, 好像好多老師都是直接用的, 那我就不客氣了嘿嘿嘿~,這幅圖就跟前面的圖同樣, 描述了當咱們直接使用step activation function的時候所能得到的分類器, 其實只能仍是線性的, 最多不過是複雜的線性組合罷了,固然你能夠說咱們能夠用無限條直線去逼近一條曲線啊……額,固然能夠, 不過比起用non-linear的activation function來講就太傻了嘛….函數
祭出主菜. 題主問的激勵函數做用是什麼, 就在這裏了!!
咱們在每一層疊加完了之後, 加一個激活函數, 如圖中的y性能
. 這樣輸出的就是一個徹徹底底的非線性函數!學習
因而就很容易拓展到多層的狀況啦, 更剛剛同樣的結構, 加上non-linear activation function以後, 輸出就變成了一個複雜的, 複雜的, 超級複雜的函數….額別問我他會長成什麼樣, 沒人知道的~咱們只能說, 有了這樣的非線性激活函數之後, 神經網絡的表達能力更增強大了~(比起純線性組合, 那是必須得啊!)優化
繼續厚顏無恥地放一張跟以前那副圖並列的圖, 加上非線性激活函數以後, 咱們就有可能學習到這樣的平滑分類平面. 這個比剛剛那個看起來牛逼多了有木有!ui
一、Sigmoid函數
Sigmoid函數公式以下
this
函數圖形以下:
觀察函數圖形能夠看到,Sigmoid函數將輸入值歸一化到(0, 1)
之間。
Sigmoid函數導數公式以下
函數圖形以下:
Sigmoid函數有三個缺點:
(1)Saturated neurons 「kill」 the gradients
在一些偏差反向傳播的場景下。首先會計算輸出層的loss,而後將該loss以導數的形式不斷向上一層神經網絡傳遞,調整參數。使用Sigmoid函數的話,很容易致使loss導數變爲0,從而失去優化參數的功能。
而且Sigmoid函數的導數最大值爲0.25,該偏差通過多層神經網絡後,會快速衰減到0。
(2)Sigmoid outputs are not zero-centered
Sigmoid函數的輸出值恆大於零,那麼下一層神經網絡的輸入x恆大於零。
對上面這個公式來講,w
上的gradient將會所有大於零或者所有小於零。這會致使模型訓練的收斂速度變慢。
以下圖所示,當輸入值均爲正數時,會致使按紅色箭頭所示的階梯式更新。
(3)exp() is a bit compute expensive
最後,Sigmoid函數中的指數運算也是一個比較消耗計算資源的過程。
二、Tanh函數
接下來的Tanh函數基於Sigmoid函數進行了一些優化,克服了Sigmoid的not zero-centered的缺點。Tanh函數公式以下:
ex−e−xex+e−x
Sigmoid函數和Tanh函數之間的關係以下:
因此,對應於sigmoid的取值範圍(0, 1),tanh的取值範圍爲(0, 1)。將兩個函數圖像畫在同一座標系中,以下圖所示:
它們之間存在的細微差異
觀察sigmoid和tanh的函數曲線,sigmoid在輸入處於[-1,1]之間時,函數值變化敏感,一旦接近或者超出區間就失去敏感性,處於飽和狀態,影響神經網絡預測的精度值。tanh的輸出和輸入可以保持非線性單調上升和降低關係,符合BP網絡的梯度求解,容錯性好,有界,漸進於0、1,符合人腦神經飽和的規律,但比sigmoid函數延遲了飽和期。
三、ReLU函數
ReLU函數公式以下所示:
對應函數圖形以下:
該函數在輸入小於0時輸出值恆爲0,在輸入大於0時,輸出線性增加。
ReLU函數沒有Sigmoid函數及Tanh函數中的指數運算,而且也沒有」kill」 gradients的現象。
可是ReLU函數也有如下幾個不足之處:
(1)not zero-centered
這個與Sigmoid相似,從函數圖形就能夠看出。
(2)dead relu
這裏指的是某些神經元可能永遠不會被激活,致使對應的參數永遠不會被更新。
好比說一個很是大的Gradient流過ReLU神經元,可能會致使參數更新後該神經元不再會被激活。
當學習率過大時,可能會致使大部分神經元出現dead情況。因此使用該激活函數時應該避免學習率設置的過大。另一種比較少見的狀況是,某些初始化參數也會致使一些神經元出現dead情況。
4、Softplus函數
Softplus函數公式以下,
Sζ(x)=ln(1+exp(x)).
經過觀察該公式能夠發現Softplus函數是Sigmoid函數的原函數。
Softplus函數與ReLU函數的圖形對好比下圖所示,
在這裏之因此將Softplus函數與ReLU函數的圖形放在一塊兒進行比較,是由於Softplus函數能夠當作是ReLU函數的平滑版本。
而且,Softplus函數是對所有數據進行了非線性映射,是一種不飽和的非線性函數其表達式如公式,Softplus函數不具有稀疏表達的能力,收斂速度比ReLUs函數要慢不少。但該函數連續可微而且變化平緩,比Sigmoid函數更加接近生物學的激活特性,同時解決了Sigmoid函數的假飽和現象,易於網絡訓練和泛化性能的提升。雖然該函數的表達性能更優於ReLU函數和Sigmoid函數,即精確度相對於後者有所提升,可是其並無加速神經網絡的學習速度。
softplus函數能夠用來產生正態分佈的β和σ參數,由於它的範圍是(0,∞)。當處理包含sigmoid函數的表達式時它也常常出現。softplus函數名字來源於它是另一個函數的平滑(或」軟化」)形式,這個函數是x+=max(0,x)。softplus 是對 ReLU 的平滑逼近的解析函數形式。
softplus函數別設計成正部函數(positive part function)的平滑版本,這個正部函數是指x+=max{0,x}。與正部函數相對的是負部函數(negative part function)x-=max{0, -x}。爲了得到相似負部函數的一個平滑函數,咱們可使用ζ(-x)。就像x能夠用它的正部和負部經過等式x+-x-=x恢復同樣,咱們也能夠用一樣的方式對ζ(x)和ζ(-x)進行操做,就像下式中那樣:ζ(x) -ζ(-x)=x.
Rectifier:In the context of artificial neural networks, the rectifier is an activation function defined as:
f(x)=max(0,x)
where x is the input to a neuron. This activation function was first introduced to a dynamical network by Hahnloser et al. in a 2000 paper in Nature. It has been used in convolutional networks more effectively than the widely used logistic sigmoid (which is inspired by probability theory; see logistic regression) and its more practical counterpart, the hyperbolic tangent. The rectifier is, as of 2015, the most popular activation function for deep neural networks.
A unit employing the rectifier is also called a rectified linear unit (ReLU).
A smooth approximation to the rectifier is the analytic function: f(x)=ln(1+ex), which is called the softplus function. The derivative of softplus is: f’(x)=ex/(ex+1)=1/(1+e-x), i.e. the logistic function.
Rectified linear units(ReLU) find applications in computer vision and speech recognition using deep neural nets.
Noisy ReLUs: Rectified linear units can be extended to include Gaussian noise, making them noisy ReLUs, giving: f(x)=max(0, x+Y), with Y∽N(0, σ(x)). Noisy ReLUs have been used with some success in restricted Boltzmann machines for computer vision tasks.
Leaky ReLUs:allow a small, non-zero gradient when the unit is not active:
Parametric ReLUs take this idea further by making the coefficient of leakage into a parameter that is learned along with the other neural network parameters:
Note that for a≤1, this is equivalent to: f(x)=max(x, ax), and thus has a relation to "maxout" networks.
ELUs:Exponential linear units try to make the mean activations closer to zero which speeds up learning. It has been shown that ELUs can obtain higher classification accuracy than ReLUs:
a is a hyper-parameter to be tuned and a≥0 is a constraint.
5、Softsign函數
和tanh函數比較研究下:
容易看出tanh比softsign更容易飽和
softsign的導數
tanh的導數:
Softsign 是 Tanh 激活函數的另外一個替代選擇。
就像 Tanh 同樣,Softsign 是反對稱、去中心、可微分,並返回-1 和 1 之間的值。
其更平坦的曲線與更慢的降低導數代表它能夠更高效地學習,比tanh更好的解決梯度消失的問題。另外一方面,導數的計算比 Tanh 更麻煩;
在實踐中,能夠深度用softsign替代tanh激活函數
3、Tensorflow中提供的激勵函數
在Tensorflow r1.0中提供瞭如下幾種激勵函數,其中包括連續非線性的(好比sigmoid, tanh, elu, softplus, softsign),連續可是並非到處可微分的(relu, relu6, crelu, relu_x)以及隨機函數(dropout)。
tf.nn.relu
tf.nn.relu6
tf.nn.crelu
tf.nn.elu
tf.nn.softplus
tf.nn.softsign
tf.nn.dropout
tf.nn.bias_add
tf.sigmoid
tf.tanh
其餘常見的值域在[-1, 1]的函數
來源: (1 ) https://www.zhihu.com/question/22334626/answer/103835591
( 2 ) https://blog.csdn.net/fengbingchun/article/details/73872828
( 3 ) https://blog.csdn.net/yaoyaoyao2/article/details/73848983
( 4 ) https://blog.csdn.net/ningyanggege/article/details/80665888