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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习中几种常见的激活函数理解与总结

發(fā)布時間:2025/4/5 pytorch 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习中几种常见的激活函数理解与总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的時候我們總是聽到激活函數(shù)這個詞,而且很多資料都會提到常用的激活函數(shù),比如Sigmoid函數(shù)、tanh函數(shù)、Relu函數(shù)。肯定很多人剛開始和我一樣一頭霧水,接下來就讓我們詳細了解一下激活數(shù)方方面面的知識。

目錄

1.激活函數(shù)的概念和作用;

2.通俗的理解一下激活函數(shù)(圖文結(jié)合);

3.幾種激活函數(shù)的對比;

4.如何選擇合適的激活函數(shù)?


1.激活函數(shù)的概念和作用

概念:神經(jīng)網(wǎng)絡(luò)中的每個神經(jīng)元節(jié)點接受上一層神經(jīng)元的輸出值作為本神經(jīng)元的輸入值,并將輸入值傳遞給下一層,輸入層神經(jīng)元節(jié)點會將輸入屬性值直接傳遞給下一層(隱層或輸出層)。在多層神經(jīng)網(wǎng)絡(luò)中,上層節(jié)點的輸出和下層節(jié)點的輸入之間具有一個函數(shù)關(guān)系,這個函數(shù)稱為激活函數(shù)(又稱激勵函數(shù))。

關(guān)于神經(jīng)網(wǎng)絡(luò)中的激活函數(shù)的作用,通常都是這樣解釋:不使用激活函數(shù)的話,神經(jīng)網(wǎng)絡(luò)的每層都只是做線性變換,多層輸入疊加后也還是線性變換。因為線性模型的表達能力通常不夠,所以這時候就體現(xiàn)了激活函數(shù)的作用了,激活函數(shù)可以引入非線性因素疑問就來了,激活函數(shù)是如何引入非線性因素呢?

2.通俗的理解一下激活函數(shù)(圖文結(jié)合);

為了解釋激活函數(shù)如何引入非線性因素,接下來讓我們以神經(jīng)網(wǎng)絡(luò)分割平面空間作為例子。

(1)無激活函數(shù)的神經(jīng)網(wǎng)絡(luò)

  神經(jīng)網(wǎng)絡(luò)最簡單的結(jié)構(gòu)就是單輸出的單層感知機,單層感知機只有輸入層和輸出層,分別代表了神經(jīng)感受器和神經(jīng)中樞。下圖是一個只有2個輸入單元和1個輸出單元的簡單單層感知機。圖中x1、w2代表神經(jīng)網(wǎng)絡(luò)的輸入神經(jīng)元受到的刺激,w1、w2代表輸入神經(jīng)元和輸出神經(jīng)元間連接的緊密程度,b代表輸出神經(jīng)元的興奮閾值,y為輸出神經(jīng)元的輸出。我們使用該單層感知機劃出一條線將平面分割開,如圖所示:

同理,我們也可以將多個感知機(注意,不是多層感知機)進行組合獲得更強的平面分類能力,如圖所示:

?

再看看包含一個隱層的多層感知機的情況,如圖所示:

通過對比可以發(fā)現(xiàn),上面三種沒有激勵函數(shù)的神經(jīng)網(wǎng)絡(luò)的輸出是都線性方程,其都是在用復(fù)雜的線性組合來試圖逼近曲線。

?(2)帶激活函數(shù)的神經(jīng)網(wǎng)絡(luò)

  讓我們在神經(jīng)網(wǎng)絡(luò)每一層神經(jīng)元做完線性變換以后,加上一個非線性激勵函數(shù)對線性變換的結(jié)果進行轉(zhuǎn)換,結(jié)果顯而易見,輸出立馬變成一個不折不扣的非線性函數(shù)了,如圖所示:?

?

拓展到多層神經(jīng)網(wǎng)絡(luò)的情況, 和剛剛一樣的結(jié)構(gòu), 加上非線性激勵函數(shù)之后, 輸出就變成了一個復(fù)雜的非線性函數(shù)了,如圖所示:?

?

總結(jié):加入非線性激勵函數(shù)后,神經(jīng)網(wǎng)絡(luò)就有可能學(xué)習(xí)到平滑的曲線來分割平面,而不是用復(fù)雜的線性組合逼近平滑曲線來分割平面,使神經(jīng)網(wǎng)絡(luò)的表示能力更強了,能夠更好的擬合目標函數(shù)。?這就是為什么我們要有非線性的激活函數(shù)的原因。如下圖所示說明加入非線性激活函數(shù)后的差異,上圖為用線性組合逼近平滑曲線來分割平面,下圖為平滑的曲線來分割平面:

?

3.幾種激活函數(shù)的對比;

首先讓我們看看激活函數(shù)的大分類,如下圖所示:

?

首先讓我們看看什么是飽和激活函數(shù):

反之,不滿足以上條件的函數(shù)則稱為非飽和激活函數(shù)。

sigmoid和tanh是“飽和激活函數(shù)”,而ReLU及其變體則是“非飽和激活函數(shù)”。使用“非飽和激活函數(shù)”的優(yōu)勢在于兩點:(1)"非飽和激活函數(shù)”能解決所謂的“梯度消失”問題。(2)它能加快收斂速度。

Sigmoid函數(shù)需要一個實值輸入壓縮至[0,1]的范圍---------σ(x) = 1 / (1 + exp(?x))

tanh函數(shù)需要講一個實值輸入壓縮至 [-1, 1]的范圍---------tanh(x) = 2σ(2x) ? 1

由于使用sigmoid激活函數(shù)會造成神經(jīng)網(wǎng)絡(luò)的梯度消失和梯度爆炸問題,所以許多人提出了一些改進的激活函數(shù),如:tanh、ReLU、Leaky ReLU、PReLU、RReLU、ELU、Maxout。下面我們具體來分析一下這幾個激活函數(shù)的區(qū)別。

?

(1)Sigmoid

Sigmoid是常用的非線性的激活函數(shù),它的數(shù)學(xué)形式如公式4:

其函數(shù)圖像如圖所示:

導(dǎo)函數(shù)圖像如圖所示:

Sigmoid函數(shù)在歷史上曾經(jīng)非常的常用,輸出值范圍為[0,1]之間的實數(shù)。但是現(xiàn)在它已經(jīng)不太受歡迎,實際中很少使用。原因是sigmoid存在3個問題:

  • sigmoid函數(shù)飽和使梯度消失(Sigmoidsaturate and kill gradients)。我們從導(dǎo)函數(shù)圖像中可以看出sigmoid的導(dǎo)數(shù)都是小于0.25的,那么在進行反向傳播的時候,梯度相乘結(jié)果會慢慢的趨近于0。這樣,幾乎就沒有梯度信號通過神經(jīng)元傳遞到前面層的梯度更新中,因此這時前面層的權(quán)值幾乎沒有更新,這就叫梯度消失。除此之外,為了防止飽和,必須對于權(quán)重矩陣的初始化特別留意。如果初始化權(quán)重過大,可能很多神經(jīng)元得到一個比較小的梯度,致使神經(jīng)元不能很好的更新權(quán)重提前飽和,神經(jīng)網(wǎng)絡(luò)就幾乎不學(xué)習(xí)。
  • sigmoid函數(shù)輸出不是“零為中心”(zero-centered)。一個多層的sigmoid神經(jīng)網(wǎng)絡(luò),如果你的輸入x都是正數(shù),那么在反向傳播中w的梯度傳播到網(wǎng)絡(luò)的某一處時,權(quán)值的變化是要么全正要么全負。

    如上圖所示:當(dāng)梯度從上層傳播下來,w的梯度都是用x乘以f的梯度,因此如果神經(jīng)元輸出的梯度是正的,那么所有w的梯度就會是正的,反之亦然。在這個例子中,我們會得到兩種權(quán)值,權(quán)值范圍分別位于圖8中一三象限。當(dāng)輸入一個值時,w的梯度要么都是正的要么都是負的,當(dāng)我們想要輸入一三象限區(qū)域以外的點時,我們將會得到這種并不理想的曲折路線(zig zag path),圖中紅色曲折路線。假設(shè)最優(yōu)化的一個w矩陣是在圖8中的第四象限,那么要將w優(yōu)化到最優(yōu)狀態(tài),就必須走“之字形”路線,因為你的w要么只能往下走(負數(shù)),要么只能往右走(正的)。優(yōu)化的時候效率十分低下,模型擬合的過程就會十分緩慢。

  • 指數(shù)函數(shù)的計算是比較消耗計算資源的。
  • ?

    (2)tanh

    tanh函數(shù)跟sigmoid還是很像的,實際上,tanh是sigmoid的變形,如公式5所示。tanh的具體公式如公式6所示,其圖像如下圖所示:

    tanh與sigmoid不同的是,tanh是“零為中心”的。因此,實際應(yīng)用中,tanh會比sigmoid更好一些。但是在飽和神經(jīng)元的情況下,tanh還是沒有解決梯度消失問題。

    ?優(yōu)點tanh解決了sigmoid的輸出非“零為中心”的問題

    ?缺點(1)依然有sigmoid函數(shù)過飽和的問題。(2)依然進行的是指數(shù)運算

    ?

    ?(3)ReLU

    ?近年來,ReLU函數(shù)變得越來越受歡迎。全稱是Rectified Linear Unit,中文名字:修正線性單元。ReLU是Krizhevsky、Hinton等人在2012年《ImageNet Classification with Deep Convolutional Neural Networks》論文中提出的一種線性且不飽和的激活函數(shù)。它的數(shù)學(xué)表達式如7所示

    函數(shù)圖像如下圖所示:

    ?優(yōu)點:(1)ReLU解決了梯度消失的問題,至少x在正區(qū)間內(nèi),神經(jīng)元不會飽和;(2)由于ReLU線性、非飽和的形式,在SGD中能夠快速收斂;(3)算速度要快很多。ReLU函數(shù)只有線性關(guān)系,不需要指數(shù)計算,不管在前向傳播還是反向傳播,計算速度都比sigmoid和tanh快

    ?缺點:(1)ReLU的輸出不是“零為中心”(Notzero-centered output)。(2)隨著訓(xùn)練的進行,可能會出現(xiàn)神經(jīng)元死亡,權(quán)重?zé)o法更新的情況。這種神經(jīng)元的死亡是不可逆轉(zhuǎn)的死亡

    ?總結(jié):訓(xùn)練神經(jīng)網(wǎng)絡(luò)的時候,一旦學(xué)習(xí)率沒有設(shè)置好,第一次更新權(quán)重的時候,輸入是負值,那么這個含有ReLU的神經(jīng)節(jié)點就會死亡,再也不會被激活。因為:ReLU的導(dǎo)數(shù)在x>0的時候是1,在x<=0的時候是0。如果x<=0,那么ReLU的輸出是0,那么反向傳播中梯度也是0,權(quán)重就不會被更新,導(dǎo)致神經(jīng)元不再學(xué)習(xí)。也就是說,這個ReLU激活函數(shù)在訓(xùn)練中將不可逆轉(zhuǎn)的死亡,導(dǎo)致了訓(xùn)練數(shù)據(jù)多樣化的丟失。在實際訓(xùn)練中,如果學(xué)習(xí)率設(shè)置的太高,可能會發(fā)現(xiàn)網(wǎng)絡(luò)中40%的神經(jīng)元都會死掉,且在整個訓(xùn)練集中這些神經(jīng)元都不會被激活。所以,設(shè)置一個合適的較小的學(xué)習(xí)率,會降低這種情況的發(fā)生。所以必須設(shè)置一個合理的學(xué)習(xí)率。為了解決神經(jīng)元節(jié)點死亡的情況,有人提出了Leaky ReLU、P-ReLu、R-ReLU、ELU等激活函數(shù)。

    引出的問題:神經(jīng)網(wǎng)絡(luò)中ReLU是線性還是非線性函數(shù)?為什么relu這種“看似線性”(分段線性)的激活函數(shù)所形成的網(wǎng)絡(luò),居然能夠增加非線性的表達能力?

    (1)relu是非線性激活函數(shù)。

    (2)讓我們先明白什么是線性網(wǎng)絡(luò)?如果把線性網(wǎng)絡(luò)看成一個大的矩陣M。那么輸入樣本A和B,則會經(jīng)過同樣的線性變換MA,MB(這里A和B經(jīng)歷的線性變換矩陣M是一樣的)

    (3)的確對于單一的樣本A,經(jīng)過由relu激活函數(shù)所構(gòu)成神經(jīng)網(wǎng)絡(luò),其過程確實可以等價是經(jīng)過了一個線性變換M1,但是對于樣本B,在經(jīng)過同樣的網(wǎng)絡(luò)時,由于每個神經(jīng)元是否激活(0或者Wx+b)與樣本A經(jīng)過時情形不同了(不同樣本),因此B所經(jīng)歷的線性變換M2并不等于M1。因此,relu構(gòu)成的神經(jīng)網(wǎng)絡(luò)雖然對每個樣本都是線性變換,但是不同樣本之間經(jīng)歷的線性變換M并不一樣,所以整個樣本空間在經(jīng)過relu構(gòu)成的網(wǎng)絡(luò)時其實是經(jīng)歷了非線性變換的。

    ?

    (4)Leaky ReLU

    ReLU是將所有的負值設(shè)置為0,造成神經(jīng)元節(jié)點死亡情況。相反,Leaky ReLU是給所有負值賦予一個非零的斜率。Leaky ReLU激活函數(shù)是在聲學(xué)模型(2013)中首次提出來的。它的數(shù)學(xué)表達式如公式8所示:

    ?其圖像如下圖:

    優(yōu)點:

    (1).神經(jīng)元不會出現(xiàn)死亡的情況。

    (2).對于所有的輸入,不管是大于等于0還是小于0,神經(jīng)元不會飽和。

    (3).由于Leaky ReLU線性、非飽和的形式,在SGD中能夠快速收斂。

    (4).計算速度要快很多。Leaky ReLU函數(shù)只有線性關(guān)系,不需要指數(shù)計算,不管在前向傳播還是反向傳播,計算速度都比sigmoid和tanh快。

    缺點:(1).Leaky ReLU函數(shù)中的α,需要通過先驗知識人工賦值。

    總結(jié):Leaky ReLU很好的解決了“dead ReLU”的問題。因為Leaky ReLU保留了x小于0時的梯度,在x小于0時,不會出現(xiàn)神經(jīng)元死亡的問題。對于Leaky ReLU給出了一個很小的負數(shù)梯度值α,這個值是很小的常數(shù)。比如:0.01。這樣即修正了數(shù)據(jù)分布,又保留了一些負軸的值,使得負軸信息不會全部丟失。但是這個α通常是通過先驗知識人工賦值的。

    ?

    (5)RReLU

    RReLU的英文全稱是“Randomized Leaky ReLU”,中文名字叫“隨機修正線性單元”。RReLU是Leaky ReLU的隨機版本。它首次是在Kaggle的NDSB比賽中被提出來的,其圖像和表達式如下圖所示:

    ?

    RReLU的核心思想是,在訓(xùn)練過程中,α是從一個高斯分布中隨機出來的值,然后再在測試過程中進行修正。在測試階段,把訓(xùn)練過程中所有的取個平均值。

    特點:

    (1).RReLU是Leaky ReLU的random版本,在訓(xùn)練過程中,α是從一個高斯分布中隨機出來的,然后再測試過程中進行修正。

    (2).數(shù)學(xué)形式與PReLU類似,但RReLU是一種非確定性激活函數(shù),其參數(shù)是隨機的

    ?

    (6)ReLU、Leaky ReLU、PReLU和RReLU的比較

    ?各自圖像如下圖所示:

    ?

    總結(jié):

    (1)PReLU中的α是根據(jù)數(shù)據(jù)變化的;

    (2)Leaky ReLU中的α是固定的;

    (3)RReLU中的α是一個在給定范圍內(nèi)隨機抽取的值,這個值在測試環(huán)節(jié)就會固定下來。

    ?

    (7)ELU

    ?ELU的英文全稱是“Exponential Linear Units”,中文全稱是“指數(shù)線性單元”。它試圖將激活函數(shù)的輸出平均值接近零,從而加快學(xué)習(xí)速度。同時,它還能通過正值的標識來避免梯度消失的問題。根據(jù)一些研究顯示,ELU分類精確度是高于ReLU的。公式如12式所示。

    ELU與其他幾種激活函數(shù)的比較圖:

    ?

    優(yōu)點:

    (1)ELU包含了ReLU的所有優(yōu)點。

    (2)神經(jīng)元不會出現(xiàn)死亡的情況。

    (3)ELU激活函數(shù)的輸出均值是接近于零的。

    ?缺點:

    (1)計算的時候是需要計算指數(shù)的,計算效率低的問題。

    ?

    (8)Maxout

    Maxout “Neuron” 是由Goodfellow等人在2013年提出的一種很有特點的神經(jīng)元,它的激活函數(shù)、計算的變量、計算方式和普通的神經(jīng)元完全不同,并有兩組權(quán)重。先得到兩個超平面,再進行最大值計算。激活函數(shù)是對ReLU和Leaky ReLU的一般化歸納,沒有ReLU函數(shù)的缺點,不會出現(xiàn)激活函數(shù)飽和神經(jīng)元死亡的情況。Maxout出現(xiàn)在ICML2013上,作者Goodfellow將maxout和dropout結(jié)合,稱在MNIST,CIFAR-10,CIFAR-100,SVHN這4個數(shù)據(jù)集上都取得了start-of-art的識別率。Maxout公式如13所示。

    其中,假設(shè)w是2維的,那么我們可以得出公式14。

    ?

    分析公式14可以注意到,ReLU和Leaky ReLU都是它的一個變形。比如的時候,就是ReLU。Maxout的擬合能力非常強,它可以擬合任意的凸函數(shù)。Goodfellow在論文中從數(shù)學(xué)的角度上也證明了這個結(jié)論,只需要2個Maxout節(jié)點就可以擬合任意的凸函數(shù),前提是“隱含層”節(jié)點的個數(shù)足夠多。

    優(yōu)點:

    (1)Maxout具有ReLU的所有優(yōu)點,線性、不飽和性。

    (2)同時沒有ReLU的一些缺點。如:神經(jīng)元的死亡。

    缺點:

    (1)從這個激活函數(shù)的公式14中可以看出,每個neuron將有兩組w,那么參數(shù)就增加了一倍。這就導(dǎo)致了整體參數(shù)的數(shù)量激增。

    ?

    4.如何選擇合適的激活函數(shù)?

    看了這多激活函數(shù),想必大家都應(yīng)該有所了解,那這么多的激活函數(shù)該如何選擇呢?目前還不存在定論,在實踐過程中更多還是需要結(jié)合實際情況,考慮不同激活函數(shù)的優(yōu)缺點綜合使用。我在這里給大家一點在訓(xùn)練模型時候的建議。

    (1)通常來說,不能把各種激活函數(shù)串起來在一個網(wǎng)絡(luò)中使用。

    (2)如果使用ReLU,那么一定要小心設(shè)置學(xué)習(xí)率(learning rate),并且要注意不要讓網(wǎng)絡(luò)中出現(xiàn)很多死亡神經(jīng)元。如果死亡神經(jīng)元過多的問題不好解決,可以試試Leaky ReLU、PReLU、或者Maxout。

    (3)盡量不要使用sigmoid激活函數(shù),可以試試tanh,不過我還是感覺tanh的效果會比不上ReLU和Maxout。

    ?

    ?

    ?

    ?參考鏈接:https://blog.csdn.net/program_developer/article/details/80032376

          https://zhidao.baidu.com/question/565740454826072204.html

    ?


    以上就是本次學(xué)習(xí)心得,歡迎交流!

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/XDU-Lakers/p/10557496.html

    總結(jié)

    以上是生活随笔為你收集整理的深度学习中几种常见的激活函数理解与总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。