1. 程式人生 > >神經網絡的雙曲線正切激活函數

神經網絡的雙曲線正切激活函數

圖像 edi 曲線 入門到精通 幽默 pan views 線圖 l數據庫

分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net

在數學中,雙曲函數類似於常見的(也叫圓函數的)三角函數。基本雙曲函數是雙曲正弦“sinh”,雙曲余弦“cosh”,從它們導出雙曲正切“tanh”等。也類似於三角函數的推導。反函數是反雙曲正弦“arsinh”(也叫做“arcsinh”或“asinh”)依此類推。

技術分享圖片

y=tanh x,定義域:R,值域:(-1,1),奇函數,函數圖像為過原點並且穿越Ⅰ、Ⅲ象限的嚴格單調遞增曲線,其圖像被限制在兩水平漸近線y=1和y=-1之間。

它的導數如下:

技術分享圖片

它的曲線圖:

技術分享圖片

源碼:

#python 3.5.3/TensorFlow 1.0/win 10    
#2017-03-27 蔡軍生  http://blog.csdn.net/caimouse    
#
import pylab
import numpy as np

N = 500
delta = 0.6
X = -1 + 2. * np.arange(N) / (N - 1)
pylab.plot(X, (1.4 + np.tanh(4. * X / delta)) / 4,  ‘k-‘,linewidth = 5)

pylab.show()


它的意義:

第一個問題:為什麽引入非線性激勵函數?
如果不用激勵函數(其實相當於激勵函數是f(x) = x),在這種情況下你每一層輸出都是上層輸入的線性函數,很容易驗證,無論你神經網絡有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,這種情況就是最原始的感知機(Perceptron)了。
正因為上面的原因,我們決定引入非線性函數作為激勵函數,這樣深層神經網絡就有意義了(不再是輸入的線性組合,可以逼近任意函數)。最早的想法是sigmoid函數或者tanh函數,輸出有界,很容易充當下一層輸入(以及一些人的生物解釋balabala)。
第二個問題:為什麽引入Relu呢?
第一,采用sigmoid等函數,算激活函數時(指數運算),計算量大,反向傳播求誤差梯度時,求導涉及除法,計算量相對大,而采用Relu激活函數,整個過程的計算量節省很多。

第二,對於深層網絡,sigmoid函數反向傳播時,很容易就會出現梯度消失的情況(在sigmoid接近飽和區時,變換太緩慢,導數趨於0,這種情況會造成信息丟失,參見 @Haofeng Li 答案的第三點),從而無法完成深層網絡的訓練。
第三,Relu會使一部分神經元的輸出為0,這樣就造成了網絡的稀疏性,並且減少了參數的相互依存關系,緩解了過擬合問題的發生(以及一些人的生物解釋balabala)。


當然現在也有一些對relu的改進,比如prelu,random relu等,在不同的數據集上會有一些訓練速度上或者準確率上的改進,具體的大家可以找相關的paper看。
多加一句,現在主流的做法,會在做完relu之後,加一步batch normalization,盡可能保證每一層網絡的輸入具有相同的分布[1]。而最新的paper[2],他們在加入bypass connection之後,發現改變batch normalization的位置會有更好的效果。大家有興趣可以看下。

1. TensorFlow API攻略

http://edu.csdn.net/course/detail/4495
2. TensorFlow入門基本教程 http://edu.csdn.net/course/detail/4369

3. C++標準模板庫從入門到精通

http://edu.csdn.net/course/detail/3324

4.跟老菜鳥學C++

http://edu.csdn.net/course/detail/2901

5. 跟老菜鳥學python

http://edu.csdn.net/course/detail/2592

6. 在VC2015裏學會使用tinyxml庫

http://edu.csdn.net/course/detail/2590

7. 在Windows下SVN的版本管理與實戰

http://edu.csdn.net/course/detail/2579

8.Visual Studio 2015開發C++程序的基本使用

http://edu.csdn.net/course/detail/2570

9.在VC2015裏使用protobuf協議

http://edu.csdn.net/course/detail/2582

10.在VC2015裏學會使用MySQL數據庫

http://edu.csdn.net/course/detail/2672

再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net

神經網絡的雙曲線正切激活函數