在上一篇專題中瞄桨,我們以三層神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)為例话速,介紹了如何利用Python和Numpy編程實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的計(jì)算。其中芯侥,中間(隱藏)層和輸出層的激活函數(shù)分別選擇了 sigmoid函數(shù)和恒等函數(shù)泊交。此刻,我們心中不難發(fā)問(wèn):為什么要花一個(gè)專題來(lái)介紹輸出層及其激活函數(shù)柱查?它和中間層又有什么區(qū)別廓俭?softmax函數(shù)何來(lái)何去?下面我們帶著這些疑問(wèn)進(jìn)入本專題的知識(shí)點(diǎn):
1 輸出層概述
2 回歸問(wèn)題及恒等函數(shù)
3 分類問(wèn)題及softmax函數(shù)
4 Python編程softmax函數(shù)
1 輸出層概述
神經(jīng)網(wǎng)絡(luò)/深度學(xué)習(xí)本質(zhì)上都屬于機(jī)器學(xué)習(xí)問(wèn)題物赶,而我們知道白指,機(jī)器學(xué)習(xí)一般分為監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí),生活中酵紫,我們應(yīng)用更多的是監(jiān)督學(xué)習(xí)(簡(jiǎn)單來(lái)說(shuō)需要事先通過(guò)已知的輸入輸出數(shù)據(jù)進(jìn)行學(xué)習(xí)告嘲,然后對(duì)未知的輸入數(shù)據(jù)進(jìn)行預(yù)測(cè)),以神經(jīng)網(wǎng)絡(luò)為例奖地,學(xué)習(xí)的結(jié)果橄唬,即輸出層的輸出值y。該輸出值既可以是一個(gè)連續(xù)的無(wú)范圍約束的數(shù)值(回歸問(wèn)題)参歹,也可以是一個(gè)離散的范圍被限制(一般在0至1之間)的數(shù)值(分類問(wèn)題)仰楚。所以針對(duì)不同的問(wèn)題,我們對(duì)輸出層的設(shè)計(jì),即激活函數(shù)的設(shè)計(jì)應(yīng)不同僧界。一般情況下侨嘀,在神經(jīng)網(wǎng)絡(luò)中,回歸問(wèn)題選擇恒等函數(shù)作為激活函數(shù)捂襟,分類問(wèn)題選擇softmax函數(shù)作為激活函數(shù)咬腕。
小提示:
監(jiān)督學(xué)習(xí)又分為回歸問(wèn)題和分類問(wèn)題。如果想對(duì)機(jī)器學(xué)習(xí)有一個(gè)透徹而全面的理解葬荷,給大家推薦一本OReilly出版的書(shū)籍《Introduction to MachineLearning with Python》涨共,不知道現(xiàn)在是否發(fā)布了中文版,但網(wǎng)上已經(jīng)有了很多讀者自己上傳的中文筆記宠漩,大家也可在我的博客中獲取本人上傳的閱讀筆記举反。
2 回歸問(wèn)題及恒等函數(shù)
“回歸”一詞對(duì)于理工科的人來(lái)說(shuō)并不陌生,直觀地講扒吁,回歸問(wèn)題是根據(jù)輸入來(lái)預(yù)測(cè)一個(gè)連續(xù)的數(shù)值的問(wèn)題锌订。比如根據(jù)一個(gè)人的日常飲食量來(lái)預(yù)測(cè)這個(gè)人的體重眨猎,這就是一個(gè)回歸問(wèn)題。為讓大家更加明白,我們以數(shù)學(xué)表達(dá)式為例:
上面這個(gè)回歸問(wèn)題些己,以神經(jīng)網(wǎng)絡(luò)模型為例吊骤,首先需要向神經(jīng)網(wǎng)絡(luò)提供已知的正確的輸入(食飯量和食肉量)和輸出(體重)捧存,通過(guò)這些信息捷绒,模型學(xué)到了變量的權(quán)重。然后就可以對(duì)輸入進(jìn)行輸出預(yù)測(cè)捉貌。
不難理解支鸡,我們并不需要對(duì)這樣的信號(hào)加權(quán)和進(jìn)行其他處理,也就是說(shuō)我們直接輸出食飯量和食肉量的加權(quán)和即可趁窃。因此牧挣,在輸出層的設(shè)計(jì)中,輸入信號(hào)應(yīng)該原封不動(dòng)地被輸出醒陆,即激活函數(shù)h()應(yīng)該選擇恒等函數(shù)(用σ()表示)瀑构,如下圖:
由于激活函數(shù)選擇的是恒等函數(shù),因此輸出值沒(méi)有在我們的預(yù)定范圍內(nèi)刨摩。
3 分類問(wèn)題及softmax函數(shù)
3.1 分類問(wèn)題
顧名思義寺晌,“分類”就是判斷一個(gè)數(shù)據(jù)集所描述的類別,比如判斷圖像中的人是男還是女澡刹,這里的數(shù)據(jù)集是圖像數(shù)據(jù)呻征,類別有男和女兩個(gè)類別。既然是判斷罢浇,那么它應(yīng)該是一個(gè)概率性的問(wèn)題陆赋,打個(gè)比方沐祷,一個(gè)畫(huà)了濃妝艷抹的男扮女裝,僅看照片攒岛,我們?yōu)榱朔乐拐f(shuō)話過(guò)于絕對(duì)赖临,會(huì)以這樣的方式表達(dá):我覺(jué)得這照片有可能是男的;我覺(jué)得這照片很有可能是男的阵子。以概率描述:我覺(jué)得這張照片是男性的可能性為60%(0.6)思杯;我覺(jué)得這張照片是男性的可能性是90%(0.9)。
因此挠进,我們對(duì)分類問(wèn)題的判斷結(jié)果,實(shí)際上是來(lái)自于概率誊册。我們用上圖來(lái)分析分類問(wèn)題:圖中的輸出信號(hào)有三個(gè)y1领突、y2、y3案怯,我們可以理解為這是一個(gè)三類別分類君旦,對(duì)于輸入的數(shù)據(jù)集,神經(jīng)網(wǎng)絡(luò)通過(guò)計(jì)算后得到值y1嘲碱、y2金砍、y3。這三個(gè)值的大小都應(yīng)該在0至1之間麦锯,且它們的和應(yīng)該為1恕稠。對(duì)于一個(gè)輸入來(lái)說(shuō),神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)的結(jié)果就是y1扶欣、y2鹅巍、y3中最大值所對(duì)應(yīng)的類別。比如y1料祠、y2骆捧、y3的值分別為0.2、0.7髓绽、0.1敛苇,那么神經(jīng)網(wǎng)絡(luò)對(duì)這個(gè)輸入的預(yù)測(cè)結(jié)果就是類別“乙”。
3.2 softmax函數(shù)
通過(guò)上面的分析顺呕,回歸問(wèn)題我們只需將輸出層的輸入信號(hào)原封不動(dòng)地輸出即可枫攀,而分類問(wèn)題我們需要考慮兩個(gè)問(wèn)題:
(1)每個(gè)輸出信號(hào)值在0至1之間。
(2)所有輸出信號(hào)的和為1塘匣。
基于以上要求脓豪,分類問(wèn)題中,輸出層的激活函數(shù)常用softmax函數(shù):
exp(x)表示ex的指數(shù)函數(shù)忌卤,ak是輸出層中第k個(gè)輸入信號(hào)扫夜,exp(ak)表示ak的指數(shù)函數(shù)。分母表示輸出層共有n個(gè)輸出信號(hào)(神經(jīng)元),并計(jì)算所有輸出層中的輸入信號(hào)的指數(shù)和笤闯。yk是第k個(gè)神經(jīng)元的輸出堕阔。
仔細(xì)分析,該函數(shù)實(shí)際上等同于一個(gè)求占比的公式颗味,讀者可驗(yàn)證超陆,信號(hào)加權(quán)和經(jīng)softmax函數(shù)處理后完全滿足上面兩點(diǎn)要求∑致恚可以說(shuō)时呀,softmax函數(shù)很普通,只需完成指數(shù)運(yùn)算晶默、求和運(yùn)算谨娜、除法運(yùn)算。
顧名思義磺陡,“分類”就是判斷一個(gè)數(shù)據(jù)集所描述的類別趴梢,比如判斷圖像中的人是男還是女,這里的數(shù)據(jù)集是圖像數(shù)據(jù)币他,類別有男和女兩個(gè)類別坞靶。既然是判斷,那么它應(yīng)該是一個(gè)概率性的問(wèn)題蝴悉,打個(gè)比方彰阴,一個(gè)畫(huà)了濃妝艷抹的男扮女裝,僅看照片辫封,我們?yōu)榱朔乐拐f(shuō)話過(guò)于絕對(duì)硝枉,會(huì)以這樣的方式表達(dá):我覺(jué)得這照片有可能是男的;我覺(jué)得這照片很有可能是男的倦微。以概率描述:我覺(jué)得這張照片是男性的可能性為60%(0.6)妻味;我覺(jué)得這張照片是男性的可能性是90%(0.9)。
因此欣福,我們對(duì)分類問(wèn)題的判斷結(jié)果责球,實(shí)際上是來(lái)自于概率。我們用上圖來(lái)分析分類問(wèn)題:圖中的輸出信號(hào)有三個(gè)y1拓劝、y2雏逾、y3,我們可以理解為這是一個(gè)三類別分類郑临,對(duì)于輸入的數(shù)據(jù)集栖博,神經(jīng)網(wǎng)絡(luò)通過(guò)計(jì)算后得到值y1、y2厢洞、y3仇让。這三個(gè)值的大小都應(yīng)該在0至1之間典奉,且它們的和應(yīng)該為1。對(duì)于一個(gè)輸入來(lái)說(shuō)丧叽,神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)的結(jié)果就是y1卫玖、y2、y3中最大值所對(duì)應(yīng)的類別踊淳。比如y1假瞬、y2、y3的值分別為0.2迂尝、0.7脱茉、0.1,那么神經(jīng)網(wǎng)絡(luò)對(duì)這個(gè)輸入的預(yù)測(cè)結(jié)果就是類別“乙”雹舀。
3.2 softmax函數(shù)
通過(guò)上面的分析芦劣,回歸問(wèn)題我們只需將輸出層的輸入信號(hào)原封不動(dòng)地輸出即可,而分類問(wèn)題我們需要考慮兩個(gè)問(wèn)題:
(1)每個(gè)輸出信號(hào)值在0至1之間说榆。
(2)所有輸出信號(hào)的和為1。
基于以上要求寸认,分類問(wèn)題中签财,輸出層的激活函數(shù)常用softmax函數(shù):
exp(x)表示ex的指數(shù)函數(shù),ak是輸出層中第k個(gè)輸入信號(hào)偏塞,exp(ak)表示ak的指數(shù)函數(shù)唱蒸。分母表示輸出層共有n個(gè)輸出信號(hào)(神經(jīng)元),并計(jì)算所有輸出層中的輸入信號(hào)的指數(shù)和灸叼。yk是第k個(gè)神經(jīng)元的輸出神汹。
仔細(xì)分析,該函數(shù)實(shí)際上等同于一個(gè)求占比的公式古今,讀者可驗(yàn)證屁魏,信號(hào)加權(quán)和經(jīng)softmax函數(shù)處理后完全滿足上面兩點(diǎn)要求∽叫龋可以說(shuō)氓拼,softmax函數(shù)很普通,只需完成指數(shù)運(yùn)算抵碟、求和運(yùn)算桃漾、除法運(yùn)算。
4 Python編程softmax函數(shù)
我們已經(jīng)知道了y1拟逮、y2撬统、y3都會(huì)有一個(gè)0至1之間的數(shù)值。而最后的分類結(jié)果則取決于這三個(gè)值中最大值所對(duì)應(yīng)的類別敦迄。借助numpy的廣播功能就能輕松實(shí)現(xiàn)這樣的操作恋追。在這之前凭迹,我們需要考慮一個(gè)數(shù)值過(guò)大(溢出)的問(wèn)題:softmax需要計(jì)算指數(shù)和,比如當(dāng)ak中的某個(gè)值為1000時(shí)几于,其指數(shù)將是無(wú)窮大蕊苗,由于計(jì)算機(jī)處理數(shù)值位數(shù)有限,因此有可能無(wú)法進(jìn)行指數(shù)或求和運(yùn)算沿彭。
為了解決這個(gè)潛在問(wèn)題朽砰,我們對(duì)softmax函數(shù)作一下處理:
公式表明在進(jìn)行softmax的指數(shù)運(yùn)算時(shí),加上某個(gè)常數(shù)不會(huì)改變運(yùn)算的結(jié)果喉刘。為了防止結(jié)果值溢出瞧柔,一般會(huì)使用輸入信號(hào)中的最大值的負(fù)數(shù)為這個(gè)常數(shù),Python編程代碼如下:
import numpy as np
def softmax(a):
c=np.max(a) #求數(shù)組中的最大值
exp=np.exp(a-c) #指數(shù)運(yùn)算
sum_exp=np.sum(exp) #指數(shù)求和
y=exp/sum_exp #softmax函數(shù)值
return y
"""測(cè)試"""
a=np.array([0.4,5,3])
y=softmax(a)
print(y) #輸出[0.00877593 0.87306727 0.11815681]
程序是不是很簡(jiǎn)單睦裳?是的造锅,在上一專題講過(guò)的三層神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)的代碼中只需將恒等函數(shù)equal_function()替換為softmax()函數(shù)即可。softmax函數(shù)的輸出是0到1廉邑,且輸出值的總和為1哥蔚,因此把softmax函數(shù)的輸出概率解釋為“概率”。一般而言蛛蒙,神經(jīng)網(wǎng)絡(luò)只把輸出值最大的神經(jīng)元所對(duì)應(yīng)的類別作為識(shí)別結(jié)果糙箍。比如測(cè)試代碼中計(jì)算得到y(tǒng)的輸出最大值為y[1]=0.87,因此對(duì)于這個(gè)輸入數(shù)據(jù)而言,預(yù)測(cè)的分類為“乙類”牵祟,也可以說(shuō)有87%的概率認(rèn)為預(yù)測(cè)結(jié)果為“乙類”深夯。
總結(jié)一下,這個(gè)專題介紹了輸出層及其激活函數(shù)诺苹、回歸問(wèn)題咕晋、分類問(wèn)題、恒等函數(shù)和softmax函數(shù)收奔。在介紹這些知識(shí)點(diǎn)的過(guò)程中掌呜,我們始終以預(yù)測(cè)結(jié)果為背景展開(kāi)的,因此閱讀完這篇文章筹淫,讀者應(yīng)該對(duì)機(jī)器學(xué)習(xí)或者神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)的流程有一定了解站辉。