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