摘要:激活函數(shù)介紹形函數(shù)函數(shù)是神經(jīng)網(wǎng)絡(luò)初期的激活函數(shù)。其他不常用的激活函數(shù)如反正切,,以及同樣減輕了以上問題。的意思就是對于一個個節(jié)點的隱層,使用作為激活函數(shù)的神經(jīng)網(wǎng)絡(luò)。實際上這次的實驗中所有系的激活函數(shù)除了,使用都收斂的比較快。
前言
簡單來說,激活函數(shù)在神經(jīng)網(wǎng)絡(luò)里的作用就是引入Non-linearity。假如沒有激活函數(shù)的話,一個多層的神經(jīng)網(wǎng)絡(luò)等同于一個一層的神經(jīng)網(wǎng)絡(luò)。簡單來說,一個神經(jīng)網(wǎng)絡(luò)的層可以寫成$act(WX)$,其中$W$是權(quán)重,$act$是激活函數(shù)。兩層也就是 $act(W_2(act(W_1X)))$,如果現(xiàn)在沒有了$act$,那這兩層就能寫成$W_2W_1X$,然后我們簡單的用$W=W_2W_1$替換,就變成了$WX$。也就是一個兩層的神經(jīng)網(wǎng)絡(luò)退化成了一個單層的神經(jīng)網(wǎng)絡(luò)。
所以說激活函數(shù)在神經(jīng)網(wǎng)絡(luò)里面是必要的,但不同的激活函數(shù)有各自的優(yōu)缺點,在不同的任務(wù)中,大家會選擇不同的激活函數(shù)?,F(xiàn)在很難一概而論說哪個激活函數(shù)一定就最好。所以最好還是多試幾個,找到最適合自己任務(wù)的。
所以這篇文章也不會給出一個最好的激活函數(shù),也就是講講每種激活函數(shù)的特性。看看激活函數(shù)是如何引入非線性的,以及神經(jīng)網(wǎng)絡(luò)如何利用這個非線性做而分類的。
激活函數(shù)介紹Sigmoid函數(shù)是神經(jīng)網(wǎng)絡(luò)初期的激活函數(shù)。更早的是在Percepton里面使用的threshold函數(shù),不過threshold函數(shù)零點不可導(dǎo),其他部分導(dǎo)數(shù)又全是0,無法通過Backpropagation(BP)訓(xùn)練,故這里不做介紹。Sigmoid函數(shù)可以看作threshold函數(shù)的soft版本,它從0平滑的過渡到1。在之后又發(fā)展出多種S形的激活函數(shù),先上公式和圖像(函數(shù)圖$f(x)$及導(dǎo)數(shù)圖$f"(x)$):
$$ ext{Sigmoid: } f(x) = frac{1}{1+e^{-x}}$$
$$ ext{Tanh: } f(x) = frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}$$
$$ ext{Arctan: } f(x) = arctan(x)$$
$$ ext{Softsign: } f(x) = frac{x}{1 + |x|}$$
$$ ext{ISRU: } f(x)={frac {x}{sqrt {1+alpha x^{2}}}}$$
從圖中可以看到sigmoid導(dǎo)數(shù)小,最大的地方導(dǎo)數(shù)才0.25,這樣在BP的時候,往后乘一乘梯度就沒有嘞,也就是深層網(wǎng)絡(luò)經(jīng)常會遇到的Gradient Vanishing(梯度消失)。另外sigmoid的輸出在0-1之間,而神經(jīng)網(wǎng)絡(luò)更好的輸入的值是關(guān)于原點對稱的。
tanh作為sigmoid的改進版,一定程度上減輕了以上的兩個問題,tanh在原點附近接近$f(x)=x$,關(guān)于原點對稱且在原店附近導(dǎo)數(shù)接近1。就是希望能夠做到原點附近的數(shù)據(jù)不被壓縮能夠很好的傳遞到下一層,而周邊的數(shù)據(jù)被一定程度的壓縮來引入非線性。
其他不常用的激活函數(shù)如反正切$arctan$,$softsign$,以及Inverse Square Root Unit(ISRU)同樣減輕了以上問題。從導(dǎo)數(shù)的函數(shù)圖中可以看到$arctan$的導(dǎo)數(shù)較大,估計對學(xué)習(xí)速度應(yīng)該會有幫助。sigmoid和tanh被廣泛使用據(jù)說是因為導(dǎo)數(shù)比較好求(來自這里)。$sigma"(x) = sigma(x) (1-sigma(x)) $,$tanh"(x) = 1 - tanh^2(x) $。
上面說的Sigmoidal函數(shù)都或多或少都存在梯度消失的問題,這使得深層的網(wǎng)絡(luò)難以訓(xùn)練。后來出現(xiàn)的ReLU(Rectified Linear Unit)基本解決了這個問題,它保證了至少在$x>0$的時候?qū)?shù)是不會減少的。這樣在BP的過程中梯度就不會莫名消失。只不過ReLU有個dead neuron的問題,從函數(shù)圖上可以看到,負半軸的值為0導(dǎo)數(shù)也為0,也就是forward pass和backward pass都不能傳遞任何信息。在使用ReLU的時候不要用太大的learning rate,否則很容易造成一堆dead neuron。
后來出現(xiàn)了Leaky ReLU(LReLU)解決了dead neuron的問題,而且使得輸出數(shù)據(jù)分布在0的兩側(cè),一定程度上對學(xué)習(xí)有幫助。后來有人做了一些改進如Parametric ReLU (PReLU)以及Randomized ReLU (RReLU)。在PReLU里,下面公式里的$alpha$是變量,可通過BP學(xué)習(xí),Randomized ReLU則是在訓(xùn)練時隨機在一定范圍內(nèi)選擇$alpha$,而在測試中則是使用均值。如訓(xùn)練時$alpha$在 $left[0.1,0.3 ight]$ 范圍內(nèi)隨機選擇,則在測試時$alpha$的值即為$0.2$。
$$ ext{ReLU: }f(x) = egin{cases} 0, & ext{x < 0} x, & ext{x $ge$ 0} end{cases} $$
$$ ext{ReLU6: }f(x) = egin{cases} 0, & ext{x < 0} x, & ext{0 $le$ x $le$ 6} 6, & ext{x > 6} end{cases} $$
$$ ext{Leaky ReLU: }f(x) = egin{cases} alpha x, & ext{x < 0} x, & ext{x $ge$ 0} end{cases}, ext{ where $0 < alpha < 1$} $$
形狀差不多的還有Softplus,Swish,Exponential Linear Unit (ELU),以及Scaled ELU(SELU),公式如下:
$$ ext{Softplus: } f(x) = log(1 + e^x)$$
$$ ext{ELU: }f(x) = egin{cases} alpha e^x -1, & ext{x < 0} x, & ext{x $ge$ 0} end{cases} $$
$$ ext{SELU: }f(x) = egin{cases} s(alpha e^x -1), & ext{x < 0} sx, & ext{x $ge$ 0} end{cases} $$
其中SELU的$a = 1.6732632423543772848170429916717$,$s = 1.0507009873554804934193349852946$。這兩個數(shù)字都是作者在論文中算出來的。90頁的推導(dǎo)過程,簡直神一般。
Softplus相對ReLU的好處是其在每個點的導(dǎo)數(shù)都不為0,避免了使用ReLU出現(xiàn)的dead neuron的問題。ELU相對于ReLU的優(yōu)點是其輸出在原點兩側(cè)且在每個點導(dǎo)數(shù)都不為0。SELU在論文中介紹的優(yōu)點是,如果輸入是均值為0,標準差為1的話,經(jīng)過SELU激活之后,輸出的均值也為0,標準差也為1,如果是這樣的話,不知道是不是能少用幾層Batch Norm。這三個激活函數(shù)的計算時間較ReLU,Leaky ReLU要長,當(dāng)想要極限的優(yōu)化網(wǎng)絡(luò)速度的時候,這也能是一個優(yōu)化點。
上圖!
Swish是最近(2017.10) Google Brain提出的激活函數(shù),據(jù)說效果不錯,Tanh-shrink和Bent-identity分別是在pytorch內(nèi)建的激活函數(shù)庫和Wikipedia上看到的,在此也附上圖。后續(xù)想做個測試,應(yīng)該也蠻有意思的!在這兒就先附上公式和圖。
$$ ext{Swish: } f(x) = xsigma(x), ext{ where $sigma$ is sigmoid function}$$
$$ ext{Tanh-shrink: } f(x) = x - tanh(x)$$
$$ ext{Bent-identity: } f(x) = frac{sqrt{x^2 + 1} - 1}{2} +x$$
上面的分析給出了激活函數(shù)的定義,接下來我們看看激活函數(shù)如何改變數(shù)據(jù)分布。這里用一個中心點在原點的螺旋狀的數(shù)據(jù)(見下圖中identity一列)來表示數(shù)據(jù)分布,為了讓圖形簡單一點,咱們忽略bias,于是一個層可以寫作$H=act(WX)$。從公式可以看出,神經(jīng)網(wǎng)絡(luò)的一層會對輸入的數(shù)據(jù)先做一個線形的變換,然后再通過激活函數(shù)做非線性的變換。之后我們再把激活后的數(shù)據(jù)映射回原來的空間($X" = W^{-1}H$)。這么做的結(jié)果是,對于激活函數(shù)不改變的點,它該在什么位置就還在什么位置,也就可以和原圖的螺線比較著看激活函數(shù)的效果。
這個螺線的數(shù)據(jù)的$x, y$可以作為兩個節(jié)點的輸入層的輸入數(shù)據(jù)。這里的$W$的維度可以有多種理解。
1. 假設(shè)$W$是一個$n imes2$的矩陣,那么這個$act(WX)$就相當(dāng)與一個$n$個節(jié)點的隱層; 2. 從空間的角度上說,這相當(dāng)于把數(shù)據(jù)映射到一個$n?$維的空間后,再在新的空間中做非線性變換; 3. 把$W$拆成$n$個$1 imes2$的矩陣,就還可以理解成$n$個$X$的線形組合,在思考決策邊界的時候有用。
這里主要采用第二種思維,下面這張圖各列顯示了不同的激活函數(shù)在$n=2,5,30$時對應(yīng)的變換。讓$W$的值都在$[-1,1]$之間取值,這樣$W$就能在映射到$2,5,30$維空間時產(chǎn)生旋轉(zhuǎn)、縮放、斜切、拉伸等效果(不包括平移)。
這里我就選了幾種激活函數(shù)玩玩。可以看到identity函數(shù)($f(x)=x$)是不改變數(shù)據(jù)形狀的,不管映射到多少維。S型函數(shù)將周圍的一圈都映射到了一起去,其中sigmoid擠壓的最甚(所以輸入的時候一定得standardize,否則信息全都被壓縮了)。ReLU很好的保留了其中的一部分信息,且醉著維度的增加,保留的信息也增加(MobileNet V2就是基于這種想法設(shè)計了Inverted Residual Block)。ELU其實在低維就能夠保存不少信息,看起來圖形會稍微好看一些,實際的效果還是有待驗證。tanhshrink覺得比較有意思也就加上去了。
神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的過程上面給出了神經(jīng)網(wǎng)絡(luò)如何扭曲數(shù)據(jù)分布的,其實在$W$隨機取值的情況下,我們很難去理解神經(jīng)網(wǎng)絡(luò)如何去學(xué)習(xí)的,下面來看看神經(jīng)網(wǎng)絡(luò)如何根據(jù)標簽改變扭曲的過程。這里就選了ReLU和Sigmoid,4個節(jié)點的隱層。最后使用了softmax做分類,下圖顯示了輸入數(shù)據(jù)和對應(yīng)的神經(jīng)網(wǎng)絡(luò)。
不同于以上的圖在輸入數(shù)據(jù)$(x, y)$的二維空間,下面這些圖的橫坐標和縱坐標分別是$x", y"$,這兩個值是unnormalized probability。對于一個坐標點$(x", y")$,假如 $x">y"$,則預(yù)測類別為藍點,反之則為紅點。所以這里我們也把$y"=x"$這條線畫出來,代表了在$x", y"$這個平面的決策邊界。以下是以ReLU為激活函數(shù)的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的過程,從螺線可以看出來原始的數(shù)據(jù)分布正在慢慢的被扭曲,直到這條黑線能夠穿過紅線和藍線之間。在訓(xùn)練的過程中,每個紅點都會把它周圍的空間(藍線)往左上角拉,相反每個藍點都會往右下角拉,在這兩個力以及權(quán)重衰減的力的作用下,空間就會被扭曲成需要的樣子(如右下角所示)。
下面這張圖顯示了Sigmoid學(xué)習(xí)的過程。和ReLU的情況很像,只是它扭曲的方式不太一樣
兩個學(xué)習(xí)的過程都特別的像折紙,對,就是折紙!當(dāng)你發(fā)現(xiàn)直直的一剪刀剪不出個圓的時候,你就可以考慮折出幾個皺褶,然后再給一剪刀。再提一下,如果是多個隱層的話,相當(dāng)于把上面的圖當(dāng)作輸入再進行扭曲。從折紙的角度上說,就類似于“對折再對折再對折”這種做法,這樣就能用少量的隱層節(jié)點做出更多的非線性(褶子)。
神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的結(jié)果最后來看看不同激活函數(shù)的決策邊界(下圖)。這次的坐標還是原始輸入的$(x, y)$,這相當(dāng)于把上面的圖往回展平以后,上圖的黑線所在的位置。Sigmoid 4的意思就是對于一個4個節(jié)點的隱層,使用Sigmoid作為激活函數(shù)的神經(jīng)網(wǎng)絡(luò)??梢钥闯鰶Q策邊界是由3個不同斜率的決策邊界組成的(實際上這里有4條邊界,有兩個決策邊界太近了就沒體現(xiàn)出來)。Softplus可以看出來這4條邊,ReLU這張圖雖然只有6個邊界,但它其實可以有8條,這是因為當(dāng)兩個ReLU形成的決策邊界相交時,會產(chǎn)生兩個轉(zhuǎn)折點,4個決策邊界能產(chǎn)生8條線。
最后試了一下300個隱層的情況,可以看出來決策邊界已經(jīng)很接近圓了。是的!等于多折幾下,再給一刀。
如果想玩動圖,就上這兒http://playground.tensorflow....
結(jié)論所以說,神經(jīng)網(wǎng)絡(luò)就像剪紙,激活函數(shù)決定怎么折,節(jié)點數(shù)決定在原圖上折幾個折痕,隱層的數(shù)量決定折幾次。
如果想讓結(jié)果在$(0,1)$之間,使用sigmoid(如LSTM的各種gates);如果想訓(xùn)練的很深,不要用S系的;ReLU,LReLU什么的多試幾個,不會錯的。
需要注意如果使用ReLU,則最好使用He Initialization。實際上這次的實驗中所有ReLU系的激活函數(shù)(除了Softplus),使用He Initialization都收斂的比較快。如果使用Sigmoid,則使用Xavier Initialization,要不真的能把空間扭曲成一個奇怪的形狀,然后長時間不收斂。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/44672.html
摘要:修正線性單元,是神經(jīng)網(wǎng)絡(luò)中最常用的激活函數(shù)。顧名思義,值激活函數(shù)返回輸入的值。如同余弦函數(shù),或簡單正弦函數(shù)激活函數(shù)為神經(jīng)網(wǎng)絡(luò)引入了周期性。此外,激活函數(shù)為零點對稱的奇函數(shù)。 在神經(jīng)網(wǎng)絡(luò)中,激活函數(shù)決定來自給定輸入集的節(jié)點的輸出,其中非線性激活函數(shù)允許網(wǎng)絡(luò)復(fù)制復(fù)雜的非線性行為。正如絕大多數(shù)神經(jīng)網(wǎng)絡(luò)借助某種形式的梯度下降進行優(yōu)化,激活函數(shù)需要是可微分(或者至少是幾乎完全可微分的)。此外,復(fù)雜的激...
摘要:在計算機視覺領(lǐng)域,對卷積神經(jīng)網(wǎng)絡(luò)簡稱為的研究和應(yīng)用都取得了顯著的成果。文章討論了在卷積神經(jīng)網(wǎng)絡(luò)中,該如何調(diào)整超參數(shù)以及可視化卷積層。卷積神經(jīng)網(wǎng)絡(luò)可以完成這項任務(wù)。 在深度學(xué)習(xí)中,有許多不同的深度網(wǎng)絡(luò)結(jié)構(gòu),包括卷積神經(jīng)網(wǎng)絡(luò)(CNN或convnet)、長短期記憶網(wǎng)絡(luò)(LSTM)和生成對抗網(wǎng)絡(luò)(GAN)等。在計算機視覺領(lǐng)域,對卷積神經(jīng)網(wǎng)絡(luò)(簡稱為CNN)的研究和應(yīng)用都取得了顯著的成果。CNN網(wǎng)絡(luò)最...
摘要:即便對于行家來說,調(diào)試神經(jīng)網(wǎng)絡(luò)也是一項艱巨的任務(wù)。神經(jīng)網(wǎng)絡(luò)對于所有失真應(yīng)該具有不變性,你需要特別訓(xùn)練這一點。對于負數(shù),會給出,這意味著函數(shù)沒有激活。換句話說,神經(jīng)元有一部分從未被使用過。這是因為增加更多的層會讓網(wǎng)絡(luò)的精度降低。 即便對于行家來說,調(diào)試神經(jīng)網(wǎng)絡(luò)也是一項艱巨的任務(wù)。數(shù)百萬個參數(shù)擠在一起,一個微小的變化就能毀掉所有辛勤工作的成果。然而不進行調(diào)試以及可視化,一切就只能靠運氣,最后可能...
摘要:深度卷積對抗生成網(wǎng)絡(luò)是的變體,是一種將卷積引入模型的網(wǎng)絡(luò)。特點是判別器使用來替代空間池化,生成器使用反卷積使用穩(wěn)定學(xué)習(xí),有助于處理初始化不良導(dǎo)致的訓(xùn)練問題生成器輸出層使用激活函數(shù),其它層使用激活函數(shù)。 介紹 showImg(https://segmentfault.com/img/bVbkDEF?w=2572&h=1080); 如圖所示,GAN網(wǎng)絡(luò)會同時訓(xùn)練兩個模型。生成器:負責(zé)生成數(shù)...
摘要:類似地,輸入中的大規(guī)模特征將主導(dǎo)網(wǎng)絡(luò)并導(dǎo)致下游發(fā)生更大的變化。因此,使用神經(jīng)網(wǎng)絡(luò)庫的自動規(guī)范化往往是不夠的,這些神經(jīng)網(wǎng)絡(luò)庫會在每個特征的基礎(chǔ)上盲目地減去平均值并除以方差。 如果你的神經(jīng)網(wǎng)絡(luò)不工作,該怎么辦?作者在這里列出了建神經(jīng)網(wǎng)絡(luò)時所有可能做錯的事情,以及他自己的解決經(jīng)驗。忘記規(guī)范化數(shù)據(jù)忘記檢查結(jié)果忘記預(yù)處理數(shù)據(jù)忘記使用正則化使用的batch太大使用了不正確的學(xué)習(xí)率在最后層使用了錯誤的激活...
閱讀 786·2021-11-24 10:19
閱讀 1184·2021-09-13 10:23
閱讀 3506·2021-09-06 15:15
閱讀 1832·2019-08-30 14:09
閱讀 1763·2019-08-30 11:15
閱讀 1902·2019-08-29 18:44
閱讀 998·2019-08-29 16:34
閱讀 2517·2019-08-29 12:46