本文為内容整理,原文請看url連結,感謝幾位部落客知識來源
一、什麼是激勵函數
激勵函數一般用于神經網絡的層與層之間,上一層的輸出通過激勵函數的轉換之後輸入到下一層中。神經網絡模型是非線性的,如果沒有使用激勵函數,那麼每一層實際上都相當于矩陣相乘。經過非線性的激勵函數作用,使得神經網絡有了更多的表現力。
這是一個單層的感覺機, 也是我們最常用的神經網絡組成單元啦. 用它可以劃出一條線, 把平面分割開
那麼很容易地我們就會想用多個感覺機來進行組合, 獲得更強的分類能力, 這是沒問題的啦~~
如圖所示,
那麼我們動筆算一算, 就可以發現, 這樣一個神經網絡組合起來,輸出的時候無論如何都還是一個線性方程哎~納尼, 說好的非線性分類呢~!!!!???
再盜用一幅經常在課堂上用的圖…然而我已經不知道出處是哪了, 好像好多老師都是直接用的,
那我就不客氣了嘿嘿嘿~,這幅圖就跟前面的圖一樣, 描述了當我們直接使用step activation function的時候所能獲得的分類器,
其實隻能還是線性的, 最多不過是複雜的線性組合罷了,當然你可以說我們可以用無限條直線去逼近一條曲線啊……額,當然可以,
不過比起用non-linear的activation function來說就太傻了嘛….
祭出主菜. 題主問的激勵函數作用是什麼, 就在這裡了!!
我們在每一層疊加完了以後, 加一個激活函數, 如圖中的y=δ(a)
. 這樣輸出的就是一個不折不扣的非線性函數!
于是就很容易拓展到多層的情況啦, 更剛剛一樣的結構, 加上non-linear activation function之後,
輸出就變成了一個複雜的, 複雜的, 超級複雜的函數….額别問我他會長成什麼樣, 沒人知道的~我們隻能說, 有了這樣的非線性激活函數以後,
神經網絡的表達能力更加強大了~(比起純線性組合, 那是必須得啊!)
繼續厚顔無恥地放一張跟之前那副圖并列的圖, 加上非線性激活函數之後, 我們就有可能學習到這樣的平滑分類平面. 這個比剛剛那個看起來牛逼多了有木有!
二、不同激勵函數的公式和圖形
1、Sigmoid函數
Sigmoid函數公式如下
函數圖形如下:
觀察函數圖形可以看到,Sigmoid函數将輸入值歸一化到
(0, 1)
之間。
Sigmoid函數導數公式如下
dδ(x)dx=ex(1+ex)2
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恒大于零。
f=wTx+b
對上面這個公式來說,
w
上的gradient将會全部大于零或者全部小于零。這會導緻模型訓練的收斂速度變慢。
如下圖所示,當輸入值均為正數時,會導緻按紅色箭頭所示的階梯式更新。
(3)exp() is a bit compute expensive
最後,Sigmoid函數中的指數運算也是一個比較消耗計算資源的過程。
2、Tanh函數
接下來的Tanh函數基于Sigmoid函數進行了一些優化,克服了Sigmoid的not zero-centered的缺點。Tanh函數公式如下:
ex−e−xex+e−x
Sigmoid函數和Tanh函數之間的關系如下:
tanh(x)=2δ(2x)−1
是以,對應于sigmoid的取值範圍(0, 1),tanh的取值範圍為(0, 1)。将兩個函數圖像畫在同一坐标系中,如下圖所示:
它們之間存在的細微差别
觀察sigmoid和tanh的函數曲線,sigmoid在輸入處于[-1,1]之間時,函數值變化敏感,一旦接近或者超出區間就失去敏感性,處于飽和狀态,影響神經網絡預測的精度值。tanh的輸出和輸入能夠保持非線性單調上升和下降關系,符合BP網絡的梯度求解,容錯性好,有界,漸進于0、1,符合人腦神經飽和的規律,但比sigmoid函數延遲了飽和期。
3、ReLU函數
ReLU函數公式如下所示:
ReLU=max(0,x)
對應函數圖形如下:
該函數在輸入小于0時輸出值恒為0,在輸入大于0時,輸出線性增長。
ReLU函數沒有Sigmoid函數及Tanh函數中的指數運算,并且也沒有”kill” gradients的現象。
但是ReLU函數也有以下幾個不足之處:
(1)not zero-centered
這個與Sigmoid類似,從函數圖形就可以看出。
(2)dead relu
這裡指的是某些神經元可能永遠不會被激活,導緻對應的參數永遠不會被更新。
比如說一個非常大的Gradient流過ReLU神經元,可能會導緻參數更新後該神經元再也不會被激活。
當學習率過大時,可能會導緻大部分神經元出現dead狀況。是以使用該激活函數時應該避免學習率設定的過大。另外一種比較少見的情況是,某些初始化參數也會導緻一些神經元出現dead狀況。
以上部分參考自:http://mp.weixin.qq.com/s?__biz=MzI1NTE4NTUwOQ==&mid=2650324989&idx=2&sn=c70ec361350fefc7693d2231879dfd49&scene=0#wechat_redirect
4、Softplus函數
Softplus函數公式如下,
Softplusζ(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函數sign(x)=11+|x|
和tanh函數比較研究下:
容易看出tanh比softsign更容易飽和
softsign的導數
tanh的導數:
Softsign 是 Tanh 激活函數的另一個替代選擇。
就像 Tanh 一樣,Softsign 是反對稱、去中心、可微分,并傳回-1 和 1 之間的值。
其更平坦的曲線與更慢的下降導數表明它可以更高效地學習,比tanh更好的解決梯度消失的問題。另一方面,導數的計算比 Tanh 更麻煩;
在實踐中,可以深度用softsign替代tanh激活函數
三、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