python 深度學習中的4種激活函數(shù)
這篇文章用來整理一下入門深度學習過程中接觸到的四種激活函數(shù),下面會從公式、代碼以及圖像三個方面介紹這幾種激活函數(shù),首先來明確一下是哪四種:
Sigmoid函數(shù) Tahn函數(shù) ReLu函數(shù) SoftMax函數(shù)激活函數(shù)的作用
下面圖像A是一個線性可分問題,也就是說對于兩類點(藍點和綠點),你通過一條直線就可以實現(xiàn)完全分類。
當然圖像A是最理想、也是最簡單的一種二分類問題,但是現(xiàn)實中往往存在一些非常復(fù)雜的線性不可分問題,比如圖像B,你是找不到任何一條直線可以將圖像B中藍點和綠點完全分開的,你必須圈出一個封閉曲線。
而激活函數(shù)就是幫助'繪制'這個封閉曲線的非線性函數(shù),有了激活函數(shù)的幫助,很多算法的處理能力會得到加強,也可以處理線性不可分問題。
Sigmoid函數(shù)
Sigmoid函數(shù)曾在介紹邏輯回歸時提起過,它的數(shù)學表達式為:
其中 e 為納皮爾常數(shù),其值為2.7182... 它的圖像如下:
可以觀察出圖像的一些特點:
曲線的值域為(0,1) 當x = 0時,Sigmoid函數(shù)值為0.5 隨著 x 不斷增大,Sigmoid函數(shù)值無限趨近于1 隨著 x 不斷減小,Sigmoid函數(shù)值無限趨近于0對于梯度下降法而言,信息的更新很大程度上都取決于梯度,而Sigmoid函數(shù)一個很明顯的缺點就是當函數(shù)值特別靠近0或1這兩端時,因為它的曲線已經(jīng)近乎平緩,所以此時的梯度幾乎為0,這樣非常不利于權(quán)重的更新,從而就會導(dǎo)致模型不收斂。
Sigmoid函數(shù)的代碼如下:
import numpy as npdef tanh(x): return (exp(x)-exp(-x))/(exp(x)+exp(-x))
Tanh函數(shù)
Tanh函數(shù)是雙曲正切函數(shù),它的的數(shù)學表達式為:
Tanh函數(shù)和Sigmoid函數(shù)非常相近,這點從圖像上可以很好的體現(xiàn):
這兩個函數(shù)相同的是,當輸入的 x 值很大或者很小時,對應(yīng)函數(shù)輸出的 y 值近乎相等,同樣的缺點也是梯度特別小,非常不利于權(quán)重的更新;不同的是Tanh函數(shù)的值域為(-1,1),并且當 x = 0 時,輸出的函數(shù)值為0。
Tanh函數(shù)的代碼如下:
import numpy as npdef tanh(x): return (exp(x)-exp(-x))/(exp(x)+exp(-x))
ReLu函數(shù)
ReLu是線性整流函數(shù),又稱為修正性線性單元,它的函數(shù)的數(shù)學表達式為
Tanh是一個分段函數(shù),它的圖像如下:
圖像很容易理解,若輸入的 x 值小于0,則輸出為也為0;若輸入的 x 值大于0,則直接輸出 x 值,需要注意的是ReLu函數(shù)在x = 0 處不連續(xù)(不可導(dǎo)),但同樣也可以作為激活函數(shù)。
與Sigmoid函數(shù)和Tanh函數(shù)相比,ReLu函數(shù)一個很明顯的優(yōu)點就是在應(yīng)用梯度下降法是收斂較快,當輸入值為整數(shù)時,不會出現(xiàn)梯度飽和的問題,因為大于0的部分是一個線性關(guān)系,這個優(yōu)點讓ReLu成為目前應(yīng)用較廣的激活函數(shù)。
ReLu函數(shù)的代碼如下:
import numpy as npdef relu(x): return np.maximum(0,x)
SoftMax函數(shù)
分類問題可以分為二分類問題和多分類問題,Sigmoid函數(shù)比較適合二分類問題,而SoftMax函數(shù)更加適合多分類問題。SoftMax函數(shù)的數(shù)學表達式為:
其中Vi表示分類器的輸出,i表示類別索引,總的類別個數(shù)為C,Si表示當前元素的指數(shù)與所有元素指數(shù)和的比值。概括來說,SoftMax函數(shù)將多分類的輸出值按比例轉(zhuǎn)化為相對概率,使輸出更容易理解和比較。
為了防止SoftMax函數(shù)計算時出現(xiàn)上溢出或者下溢出的問題,通常會提前對 V 做一些數(shù)值處理,即每個 V 減去 V 中的最大值,假設(shè)D=max(V),SoftMax函數(shù)數(shù)學表達式更改為:
因為SoftMax函數(shù)計算的是概率,所以無法用圖像進行展示,SoftMax函數(shù)的代碼如下:
import numpy as npdef softmax(x): D = np.max(x) exp_x = np.exp(x-D) return exp_x / np.sum(exp_x)
以上就是python 深度學習中的4種激活函數(shù)的詳細內(nèi)容,更多關(guān)于python 激活函數(shù)的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. nestjs實現(xiàn)圖形校驗和單點登錄的示例代碼2. html小技巧之td,div標簽里內(nèi)容不換行3. 以PHP代碼為實例詳解RabbitMQ消息隊列中間件的6種模式4. laravel ajax curd 搜索登錄判斷功能的實現(xiàn)5. python爬蟲實戰(zhàn)之制作屬于自己的一個IP代理模塊6. Python 如何將integer轉(zhuǎn)化為羅馬數(shù)(3999以內(nèi))7. 將properties文件的配置設(shè)置為整個Web應(yīng)用的全局變量實現(xiàn)方法8. python實現(xiàn)自動化辦公郵件合并功能9. Echarts通過dataset數(shù)據(jù)集實現(xiàn)創(chuàng)建單軸散點圖10. css進階學習 選擇符
