前言:
什么是激活函數?它在神經網絡模型中是如何使用的?
激活函數(Activation functions)對於人工神經網絡模型去學習、理解非常復雜和非線性的函數來說具有十分重要的作用。它們將非線性特征引入到我們的網絡中。其目的是將A-NN模型(A-NN:它是一個強健有力的,同時也是非常復雜的機器學習技術,它可以模仿人類的大腦,繼而模仿大腦運作)中一個節點的輸入信號轉換成一個輸出信號。該輸出信號現在被用在堆疊中下一層的輸入。
而在A-NN中的具體操作是這樣的,我們做輸入(X)和它們對應的權重(W)的乘積之和,並將激活函數f(x)應用於其獲取該層的輸出,並將其作為輸入送到下一層。
問題是,為什么我們不能在不激活輸入信號的情況下完成此操作呢?
如果我們不應用激活函數的話,則輸出信號將僅僅是一個簡單的線性函數。線性函數一個一級多項式。現如今,線性方程是很容易解決的,但是它們的復雜性有限,並且從數據中學習復雜數據映射功能的能力更小。一個沒有激活函數的神經網絡將只不過是一個線性回歸模型(Linear regression Model)罷了,它功能有限,並且大多情況下執行得並不好。我們希望我們的神經網絡不僅僅可以學習和計算線性函數,而且還要比這復雜得多。同樣是因為沒有激活函數,我們的神經網絡將無法學習和模擬其他復雜類型的數據,例如圖像處理、視頻、音頻、語音等。這就是為什么我們要使用人工神經網絡技術,諸如深度學習(Deep Learning),來理解一下復雜的事情,一些相互之間具有很多隱藏層的非線性問題,而這也可以幫助我們了解復雜的數據。
那為什么我們需要非線性函數?
非線性函數是那些一級以上的函數,而且當繪制非線性函數時它們具有曲率。現在我們需要一個可以學習和表示幾乎任何東西的神經網絡模型,以及可以將輸入映射到輸出的任意復雜函數。神經網絡被認為是通用函數近似器(Universal Function Approximators)。這意味着他們可以計算和學習任何函數。幾乎我們可以想到的任何過程都可以表示為神經網絡中的函數計算。
而這一切都要歸結於這一點,我們需要應用激活函數f(x),以便網絡更強大,增加它的能力,使它可以學習復雜的實物,復雜的表達數據,以及表示輸入輸出之間非線性的復雜的任意函數映射。因此,使用非線性激活函數,我們便能夠從輸入輸出之間生成非線性映射。
激活函數的另一個重要特征是:它應該是可以區分的。我們需要這樣做,以便在網絡中向后推進以計算相對於權重的誤差(丟失)梯度時執行反向優化策略,然后相應地使用梯度下降或任何其他優化技術優化權重以減少誤差。
只要永遠記住要做:輸入時間權重,添加偏差和激活函數
1、class torch.nn.Tanh
輸出值的范圍[-1,1]。對輸入的每個元素:
shape:
輸入:(N,*),*表示任意維度組合
輸出:(N,*),與輸入有相同的shape屬性
import torch import torch.nn as nn m = nn.Tanh() input = torch.randn(2,3) print(input) output = m(input) print(output) 輸出: tensor([[-0.4821, 0.8067, -1.2425], [ 0.8380, 0.1969, -0.8734]]) tensor([[-0.4479, 0.6678, -0.8462], [ 0.6847, 0.1943, -0.7031]])
參考: