問題描述 激活函數(shù)是深度學習,也是人工神經網絡中一個十分重要的學習內容,對于人工神經網絡模型去學習、理解非常復雜和非線性的函數(shù)來說具有非常重要的作用。那么,激活函數(shù)的作用應該如何來理解呢? 首先,當我們不用激活函數(shù)時,網絡中各層只會根據權重w和偏差b進行線性變換,就算有多層網絡,也只是相當于多個線性方程的組合,依然只是相當于一個線性回歸模型,解決復雜問題的能力有限。如果希望神經網絡能夠處理復雜任務,但線性變換無法執(zhí)行這樣的任務,使用激活函數(shù)就能對輸入進行非線性變換,使其能夠學習和執(zhí)行更復雜的任務。下面,就一起來了解常用的激活函數(shù)吧。 解決方案 常用激活函數(shù): (1)Sigmoid函數(shù) sigmoid函數(shù)可以將輸入的整個實數(shù)范圍內的任意值映射到[0,1]范圍內,當輸入值較大時,會返回一個接近于1的值,當輸入值較小時,則返回一個接近于0的值。在tensorflow中,用tf.sigmoid(x)直接調用這個函數(shù)使用。 Sigmoid函數(shù)的數(shù)學公式和函數(shù)圖像如下: 優(yōu)點:輸出在映射區(qū)間(0,1)內單調連續(xù),非常適合用作輸出層,并且比較容易求導。 缺點:其解析式中含有冪運算,計算機求解時相對比較耗時,對于規(guī)模比較大的深度網絡,會較大地增加訓練時間。 (2)Softmax函數(shù) softmax函數(shù)實際上是在sigmoid函數(shù)上做一個推廣,它可以將所有輸出映射成概率的形式,即值在[0,1]范圍且概率總和為1。tensorflow中可以用tf.nn.softmax()來調用。 Softmax函數(shù)的數(shù)學公式如下: 舉例說明一下,假如輸入變量為[1.5,4.4,2.0],經過softmax函數(shù)激活后,輸出為[0.04802413, 0.87279755, 0.0791784 ],分別對應屬于1、2、3類的概率。代碼實現(xiàn)則為: tf.nn.softmax(tf.constant([[1.5,4.4,2.0]]))。 (3)Tanh函數(shù) tanh函數(shù)相似于sigmoid函數(shù),但它能將值映射到[-1,1]的范圍。于sigmoid函數(shù)相比,它的輸出均值是0,使得其收斂速度要比sigmoid快,減少迭代次數(shù),但冪運算的問題依然存在。 Tanh函數(shù)數(shù)學公式和函數(shù)圖像如下: (4)Relu函數(shù) relu函數(shù),是目前被使用最為頻繁得激活函數(shù),relu函數(shù)在x < 0時,輸出始終為0。由于x > 0時,relu函數(shù)的導數(shù)為1,即保持輸出為x,所以relu函數(shù)能夠在x > 0時保持梯度不斷衰減,從而緩解梯度消失的問題,還能加快收斂速度。 relu函數(shù)數(shù)學公式和函數(shù)圖像如下: 前向傳播的實例,就需要借助這個函數(shù),小編發(fā)布過這個實例的詳解,其中包括代碼演示,感興趣的話可以去看看《TensorFlow前向傳播實例》這篇文章。 結語 簡單來說,激活函數(shù)的作用就是能夠給神經網絡加入一些非線性因素,使得神經網絡可以更好地解決較為復雜的問題。在神經網絡中,隱藏層之間的輸出大多需要通過激活函數(shù)來映射,在構建模型時,需要根據實際數(shù)據情況選擇激活函數(shù)。TensorFlow中的激活函數(shù)不止這4種,本文只是介紹最常用的4個,當然,其他激活函數(shù)大多是這幾個激活函數(shù)的擴展變換形式。 編 輯 | 王楠嵐 責 編 | 吳怡辰 where2go 團隊 |
|