日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

神经网络入门篇:激活函数(Activation functions)

發布時間:2023/11/16 windows 45 coder
生活随笔 收集整理的這篇文章主要介紹了 神经网络入门篇:激活函数(Activation functions) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

激活函數

使用一個神經網絡時,需要決定使用哪種激活函數用隱藏層上,哪種用在輸出節點上。到目前為止,之前的博客只用過sigmoid激活函數,但是,有時其他的激活函數效果會更好。

在神經網路的前向傳播中,\(a^{[1]} = \sigma(z^{[1]})\)\(a^{[2]} =\sigma(z^{[2]})\)這兩步會使用到sigmoid函數。sigmoid函數在這里被稱為激活函數。

公式1.18:

\(a = \sigma(z) = \frac{1}{{1 + e}^{- z}}\)

更通常的情況下,使用不同的函數\(g( z^{[1]})\)\(g\)可以是除了sigmoid函數以外的非線性函數。tanh函數或者雙曲正切函數是總體上都優于sigmoid函數的激活函數。

如圖,\(a = tan(z)\)的值域是位于+1和-1之間。

公式1.19:

\(a= tanh(z) = \frac{e^{z} - e^{- z}}{e^{z} + e^{- z}}\)

事實上,tanh函數是sigmoid的向下平移和伸縮后的結果。對它進行了變形后,穿過了\((0,0)\)點,并且值域介于+1和-1之間。

結果表明,如果在隱藏層上使用函數

公式1.20:

$g(z^{[1]}) = tanh(z^{[1]}) $
效果總是優于sigmoid函數。因為函數值域在-1和+1的激活函數,其均值是更接近零均值的。在訓練一個算法模型時,如果使用tanh函數代替sigmoid函數中心化數據,使得數據的平均值更接近0而不是0.5.

這會使學習下一層簡單一點。

在討論優化算法時,有一點要說明:我基本已經不用sigmoid激活函數了,tanh函數在所有場合都優于sigmoid函數。

但有一個例外:在二分類的問題中,對于輸出層,因為\(y\)的值是0或1,所以想讓\(\hat{y}\)的數值介于0和1之間,而不是在-1和+1之間。所以需要使用sigmoid激活函數。這里的

公式1.21:

\(g(z^{[2]}) = \sigma(z^{[2]})\)
在這個例子里看到的是,對隱藏層使用tanh激活函數,輸出層使用sigmoid函數。

所以,在不同的神經網絡層中,激活函數可以不同。為了表示不同的激活函數,在不同的層中,使用方括號上標來指出\(g\)上標為\([1]\)的激活函數,可能會跟\(g\)上標為\([2]\)不同。方括號上標\([1]\)代表隱藏層,方括號上標\([2]\)表示輸出層。

sigmoid函數和tanh函數兩者共同的缺點是,在\(z\)特別大或者特別小的情況下,導數的梯度或者函數的斜率會變得特別小,最后就會接近于0,導致降低梯度下降的速度。

在機器學習另一個很流行的函數是:修正線性單元的函數(ReLu),ReLu函數圖像是如下圖。

公式1.22:

\(a =max(0,z)\)
所以,只要\(z\)是正值的情況下,導數恒等于1,當\(z\)是負值的時候,導數恒等于0。從實際上來說,當使用\(z\)的導數時,\(z\)=0的導數是沒有定義的。但是當編程實現的時候,\(z\)的取值剛好等于0.00000001,這個值相當小,所以,在實踐中,不需要擔心這個值,\(z\)是等于0的時候,假設一個導數是1或者0效果都可以。

這有一些選擇激活函數的經驗法則:

如果輸出是0、1值(二分類問題),則輸出層選擇sigmoid函數,然后其它的所有單元都選擇Relu函數。

這是很多激活函數的默認選擇,如果在隱藏層上不確定使用哪個激活函數,那么通常會使用Relu激活函數。有時,也會使用tanh激活函數,但Relu的一個優點是:當\(z\)是負值的時候,導數等于0。

這里也有另一個版本的Relu被稱為Leaky Relu

\(z\)是負值時,這個函數的值不是等于0,而是輕微的傾斜,如圖。

這個函數通常比Relu激活函數效果要好,盡管在實際中Leaky ReLu使用的并不多。

圖1.6.1

兩者的優點是:

第一,在\(z\)的區間變動很大的情況下,激活函數的導數或者激活函數的斜率都會遠大于0,在程序實現就是一個if-else語句,而sigmoid函數需要進行浮點四則運算,在實踐中,使用ReLu激活函數神經網絡通常會比使用sigmoid或者tanh激活函數學習的更快。

第二,sigmoidtanh函數的導數在正負飽和區的梯度都會接近于0,這會造成梯度彌散,而ReluLeaky ReLu函數大于0部分都為常數,不會產生梯度彌散現象。(同時應該注意到的是,Relu進入負半區的時候,梯度為0,神經元此時不會訓練,產生所謂的稀疏性,而Leaky ReLu不會有這問題)

\(z\)ReLu的梯度一半都是0,但是,有足夠的隱藏層使得z值大于0,所以對大多數的訓練數據來說學習過程仍然可以很快。

快速概括一下不同激活函數的過程和結論。

  • sigmoid激活函數:除了輸出層是一個二分類問題基本不會用它。

  • tanh激活函數:tanh是非常優秀的,幾乎適合所有場合。

  • ReLu激活函數:最常用的默認函數,如果不確定用哪個激活函數,就使用ReLu或者Leaky ReLu

公式3.23:

\(a = max( 0.01z,z)\)
為什么常數是0.01?當然,可以為學習算法選擇不同的參數。

在選擇自己神經網絡的激活函數時,有一定的直觀感受,在深度學習中的經常遇到一個問題:在編寫神經網絡的時候,會有很多選擇:隱藏層單元的個數、激活函數的選擇、初始化權值……這些選擇想得到一個對比較好的指導原則是挺困難的。

鑒于以上三個原因,以及在工業界的見聞,提供一種直觀的感受,哪一種工業界用的多,哪一種用的少。但是,自己的神經網絡的應用,以及其特殊性,是很難提前知道選擇哪些效果更好。所以通常的建議是:如果不確定哪一個激活函數效果更好,可以把它們都試試,然后在驗證集或者發展集上進行評價。然后看哪一種表現的更好,就去使用它。

為自己的神經網絡的應用測試這些不同的選擇,會在以后檢驗自己的神經網絡或者評估算法的時候,看到不同的效果。如果僅僅遵守使用默認的ReLu激活函數,而不要用其他的激勵函數,那就可能在近期或者往后,每次解決問題的時候都使用相同的辦法。

總結

以上是生活随笔為你收集整理的神经网络入门篇:激活函数(Activation functions)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。