神经网络之激活函数
神經網絡中的激活函數
- 系列文章:
??激活函數是神經網絡中非常重要的東西,作用不亞于卷積。激活函數是為了模擬神經元的激活和抑制狀態的一個組件,自然界的神經活動都是通過一部分神經元的激活,一部分神經元受到抑制而實現的,同時激活的神經元也會在一定條件抑制,抑制也會轉換為激活,這種狀態之間的切換,在宏觀上就呈現了不同的神經活動。
??但是卷積神經網絡中的激活函數作用不止于此, 如果神經網絡中只有卷積層,我們已經討論過卷積的操作,從數學的角度上講,卷積是通過參數的矩陣乘法來實現的,給特征乘再多的矩陣,都改變不了純卷積的運算是一個線性操作的本質。 y = A B C D . . . . Z x y=ABCD....Zx y=ABCD....Zx,x和y仍然是線性關系。從函數擬合的角度來看,線性函數的擬合能力就非常差勁,與神經網絡能夠擬合任何復雜的函數的遠大理想不符。
?? 激活函數的作用就是給神經網絡帶來非線性的特征,負責把線性函數給掰彎,這樣神經網絡擬合出來的函數也能適應復雜函數起伏,擬合的更好。大致來說,伴隨著神經網絡的發展,主要的激活函數經歷了Sigmoid -> Tanh -> ReLU -> Maxout的順序,但是這些主要的激活函數在發展過程中又產生了很多的變體。我就大致做個總結,整理一下這些主要的激活函數和變體的發展與演變。
??此外,回想我們機器學習提取特征的時候,如果模型不能很好對數據建模,可以考慮進行特征變換或者核變換的方式,對核函數或者特征變換函數做泰勒展開,我們就可以大致了解核函數組合了哪些特征。事實上,激活函數一定程度上也做了特征組合的事情,很多激活函數都有 e x e^x ex項,這就是一定程度上對特征進行了組合。
??想要作為激活函數還是需要有很多的限制的,可以看到激活函數需要給神經網絡帶來非線性,那么顯然線性函數是不可以的。
??激活函數需要滿足幾乎處處可微的特性,神經網絡需要反向傳播,誤差回傳更新參數梯度,如果中間有一個節點不可微分的話就會導致損失無法回傳,所以需要可微,但是可以適當的放縮,幾乎處處可微就可以了,允許在特殊的點不可微,然后不要讓這些個別的點影響了大局觀就可以。如ReLU在x=0的點就是不可微的。
??激活函數的發展就是不斷發現已有函數的問題,然后去應對這個問題,提出新的方法,這本來就是一種優化,講到發展的時候可能會提到一些概念,提前將這些概念進行梳理。
?? 飽和,是指激活函數在趨于無窮的時候,激活函數的導數極限為0,與導數極限一樣,飽和分為左飽和右飽和,左飽和是指激活函數左邊導數收斂到0,也就是 x → ? ∞ x\rightarrow-\infty x→?∞,右飽和則是 x → + ∞ x\rightarrow+\infty x→+∞。如果左右兩邊都飽和,則可以稱為飽和。
lim ? x → ∞ f ′ ( x ) = 0 \lim_{x\rightarrow\infty }f'(x)=0 x→∞lim?f′(x)=0
?? 硬飽和、軟飽和,硬飽和是指不是極限等于0,而是真的就等于0,當 ∣ x ∣ > c |x|>c ∣x∣>c之后, f ′ ( x ) ≡ 0 f'(x)\equiv0 f′(x)≡0。這就意味著 f ( x ) ≡ C f(x)\equiv C f(x)≡C。顯然ReLU函數,在左邊是恒等于0的,所以導數也是恒等于0,是左硬飽和。飽和特性對于噪聲有一定的敏感性,不至于因為個別絕對值特別大的值而影響函數的輸出,但是飽和會帶來一個缺點就是梯度消失,這個分析具體會在后面展開。
??為了保證文章撰寫的邏輯清晰,我將每個激活函數組織成一篇文章,不至于在看的時候對于龐大的概念而暈倒。
系列文章:
神經網絡中的激活函數總述
sigmoid激活函數
tanh激活函數
ReLU系列激活函數
maxout激活函數
Swish激活函數
激活函數發展的新里程——EvoNorms
總結
- 上一篇: [阶段4 企业开发进阶] 8. Dock
- 下一篇: 如何改变computed执行_皓儿日记2