說一說啟用函式是個啥

2021-09-29 01:53:50 字數 3278 閱讀 3082

什麼是啟用函式

我們知道,在深度學習中,我們訓練乙個神經網路的過程是,首先輸入資料,然後分別對每個輸入和輸出對分配權值。我們把輸入資料和權值相乘並進行累加,再加上乙個偏置量,就得到了乙個輸出的結果。但是這個過程是線性的,而啟用函式的作用就是把這些線性訊號轉化為非線性,而這種非線性使得我們能夠學習到輸入與輸出之間任意複雜的變換關係。

如上圖所示是乙個典型的xor函式,當輸入為(0,1)、(1,0)時,黃色圓圈輸出為1,當輸入為(0,0)、(1,1)時,藍色叉輸出為0. 此時我們想要對這個函式的結果進行乙個分類,很顯然,我們無法用一條筆直的線將他們分開。因此我們需要利用非線性的決策邊界來進行影象輸出的區分。

啟用函式的任務之一就是將線性函式轉化為非線性函式,使得函式的擬合性更好。

啟用函式的另乙個重要特性就是將輸出約束在乙個範圍內,防止結果無線變大。我們知道神經網路的網路結構非常巨大,特別是引數加權求和的值,有時候是很大的乙個值,如果將這個值代入到下一步繼續計算,會給計算機增加很大的計算負擔,因此,我們會用啟用函式將輸出對映在某乙個範圍內(例如0-1的區間)。

1 sigmoid啟用函式

sigmoid也被稱為邏輯啟用函式(logistic activation function)。它將乙個實數值壓縮到0至1的範圍內。當我們的最終目標是**概率時,它可以被應用到輸出層。它使很大的負數向0轉變,很大的正數向1轉變。在數學上表示為:

最早使用的啟用函式,將輸入對映到0到1之間,現在基本沒人使用。

輸出均值非0,同時當輸入x

xx過大或過小時,容易出現過飽和現象,此時梯度趨近於0,反向傳播時,無法進行引數傳遞。

過飽和現象會導致梯度消失:當x

xx取絕對值很大的正值時,sigmoid會飽和接近於1;當x

xx取絕對值很大的負值時,sigmoid會飽和接近0.這個特性會讓基於梯度下降的優化演算法變得困難。

sigmoid與softmax的區別

sigmoid將乙個real value對映到(0,1)的區間,用來做二分類。而 softmax 把乙個 k 維的real value向量(a1,a2,a3,a4….)對映成乙個(b1,b2,b3,b4….)其中 bi 是乙個 0~1 的常數,輸出神經元之和為 1.0,所以相當於概率值,然後可以根據 bi 的概率大小來進行多分類的任務。二分類問題時 sigmoid 和 softmax 是一樣的,求的都是 cross entropy loss,而 softmax 可以用於多分類問題多個logistic回歸通過疊加也同樣可以實現多分類的效果,但是 softmax回歸進行的多分類,類與類之間是互斥的,即乙個輸入只能被歸為一類;多個logistic回歸進行多分類,輸出的類別並不是互斥的,即"蘋果"這個詞語既屬於"水果"類也屬於"3c"類別。

2 tanh啟用函式

t an

h(x)

=sin

h(x)

cosh

(x)=

ex−e

−xex

+e−x

tanh(x)=\frac=\frac-e^}+e^}

tanh(x

)=co

sh(x

)sin

h(x)

​=ex

+e−x

ex−e

−x​tanh也被稱為雙曲正切啟用函式。類似sigmoid,tanh也是把乙個實數值壓縮。與sigmoid不同的是,tanh在-1到1的輸出範圍內是零均值的,因此使用效果比sigmoid要好(思考一下原因)

tanh的缺點就是,依然會出現梯度消失現象。

3 線性整流函式(relu)

啟用函式的導數如圖所示,relu啟用函式從底部進行了半矯正(half-rectified)。在數學上,它可以由這個簡單的表示式表達:

f (z

)=ma

x(0,

z)f(z)=max(0,z)

f(z)=m

ax(0

,z)這意味著,當輸入z<0時,輸出為0。當輸入z>0時,輸出就是輸入z的值。這個啟用函式能夠使網路更快的收斂。沒有飽和意味著至少在正數範圍內,能夠對梯度消失有抵抗能力,所以神經元至少在一半的輸入範圍內不會反向傳播,全部都是0的結果。relu在計算上非常有效率,因為它是使用簡單的閾值實現的。

與sigmoid/tanh函式相比,relu啟用函式的優點是:

使用梯度下降(gd)法時,收斂速度更快

相比relu只需要乙個門限值,即可以得到啟用值,計算速度更快

relu函式是目前應用比較廣泛的啟用函式。它計算簡單,可以快速收斂,同時杜絕了過飽和現象。缺點就是在小於0時,梯度為0,容易進入死區。

relu函式是非線性的,效果類似於劃分和摺疊空間,組合多個(線性操作 + relu)就可以任意的劃分空間(想一想,這是為什麼)。

優化後的relu函式

4 leaky relu啟用函式

該函式是乙個想要緩解relu消亡問題的嘗試。它的函式表示式如下:

從上圖可以看出來,為了解決小於0時,梯度為0的尷尬現象,,leak 給所有負值賦予乙個非零斜率, leak是乙個很小的常數 ,這樣保留了一些負軸的值,使得負軸的資訊不會全部丟失。

以上是目前幾種常見的啟用函式,關於他們的具體意義,我們還需要近一步求證,更多關於啟用函式的說明大家可以參考

說一說 r與 n

今天在用python讀取txt檔案的時候,遇到了乙個比較坑的問題,那就是 n 和 r 究竟有什麼區別?在計算機還沒有出現之前,人們設計了一種機器叫做電傳打字機,這種機器每秒鐘可以打10個字元。不過它有個問題,就是打完一行換行的時候,需要0.2s,正好可以列印兩個字元,如果這個時候有新的字元傳過來,那...

簡單的說一說mmap

mmap memory map,就是記憶體對映 簡單的說就是將檔案對映到使用者的位址空間中。這麼做有什麼好處呢?1.傳統檔案訪問方式是,首先用open系統呼叫開啟檔案,然後使用read,write等呼叫進行順序或者隨即的i o.這種方式是非常低效的,每一次i o操作都需要一次系統呼叫.而通過mmap...

說一說JS的IIFE

iife immediately invoked function expression,意為立即呼叫的函式表示式,也就是說,宣告函式的同時立即呼叫這個函式。對比一下,這是不採用iife時的函式宣告和函式呼叫 function foo foo 下面是iife形式的函式呼叫 functionfoo 函...