softmax函數(shù)
softmax用于多分類過程中,它將多個(gè)神經(jīng)元的輸出突委,映射到(0,1)區(qū)間內(nèi),可以看成概率來理解冬三,從而來進(jìn)行多分類匀油!
假設(shè)我們有一個(gè)數(shù)組,V长豁,Vi表示V中的第i個(gè)元素钧唐,那么這個(gè)元素的softmax值就是
更形象的如下圖表示:
softmax直白來說就是將原來輸出是3,1,-3通過softmax函數(shù)一作用,就映射成為(0,1)的值匠襟,而這些值的累和為1(滿足概率的性質(zhì))钝侠,那么我們就可以將它理解成概率,在最后選取輸出結(jié)點(diǎn)的時(shí)候酸舍,我們就可以選取概率最大(也就是值對(duì)應(yīng)最大的)結(jié)點(diǎn)帅韧,作為我們的預(yù)測(cè)目標(biāo)!
舉一個(gè)我最近碰到利用softmax的例子:我現(xiàn)在要實(shí)現(xiàn)基于神經(jīng)網(wǎng)絡(luò)的句法分析器啃勉。用到是基于轉(zhuǎn)移系統(tǒng)來做忽舟,那么神經(jīng)網(wǎng)絡(luò)的用途就是幫我預(yù)測(cè)我這一個(gè)狀態(tài)將要進(jìn)行的動(dòng)作是什么?比如有10個(gè)輸出神經(jīng)元淮阐,那么就有10個(gè)動(dòng)作叮阅,1動(dòng)作,2動(dòng)作泣特,3動(dòng)作...一直到10動(dòng)作浩姥。(這里涉及到nlp的知識(shí),大家不用管状您,只要知道我現(xiàn)在根據(jù)每個(gè)狀態(tài)(輸入)勒叠,來預(yù)測(cè)動(dòng)作(得到概率最大的輸出),最終得到的一系列動(dòng)作序列就可以完成我的任務(wù)即可)
原理圖如下圖所示:
那么比如在一次的輸出過程中輸出結(jié)點(diǎn)的值是如下:
[0.2,0.1,0.05,0.1,0.2,0.02,0.08,0.01,0.01,0.23]
那么我們就知道這次我選取的動(dòng)作是動(dòng)作10膏孟,因?yàn)?.23是這次概率最大的眯分,那么怎么理解多分類呢?很容易柒桑,如果你想選取倆個(gè)動(dòng)作弊决,那么就找概率最大的倆個(gè)值即可~(這里只是簡(jiǎn)單的告訴大家softmax在實(shí)際問題中一般怎么應(yīng)用)
softmax相關(guān)求導(dǎo)
當(dāng)我們對(duì)分類的Loss進(jìn)行改進(jìn)的時(shí)候,我們要通過梯度下降魁淳,每次優(yōu)化一個(gè)step大小的梯度丢氢,這個(gè)時(shí)候我們就要求Loss對(duì)每個(gè)權(quán)重矩陣的偏導(dǎo)傅联,然后應(yīng)用鏈?zhǔn)椒▌t。那么這個(gè)過程的第一步疚察,就是對(duì)softmax求導(dǎo)傳回去,不用著急仇奶,我后面會(huì)舉例子非常詳細(xì)的說明貌嫡。在這個(gè)過程中,你會(huì)發(fā)現(xiàn)用了softmax函數(shù)之后该溯,梯度求導(dǎo)過程非常非常方便岛抄!
下面我們舉出一個(gè)簡(jiǎn)單例子,原理一樣狈茉,目的是為了幫助大家容易理解夫椭!
我們能得到下面公式:
z4 = w41o1+w42o2+w43*o3
z5 = w51o1+w52o2+w53*o3
z6 = w61o1+w62o2+w63*o3
z4,z5,z6分別代表結(jié)點(diǎn)4,5,6的輸出,01,02,03代表是結(jié)點(diǎn)1,2,3往后傳的輸入.
那么我們可以經(jīng)過softmax函數(shù)得到
好了氯庆,我們的重頭戲來了蹭秋,怎么根據(jù)求梯度,然后利用梯度下降方法更新梯度堤撵!
要使用梯度下降仁讨,肯定需要一個(gè)損失函數(shù),這里我們使用交叉熵作為我們的損失函數(shù)实昨,為什么使用交叉熵?fù)p失函數(shù)洞豁,不是這篇文章重點(diǎn),后面有時(shí)間會(huì)單獨(dú)寫一下為什么要用到交叉熵函數(shù)(這里我們默認(rèn)選取它作為損失函數(shù))
交叉熵函數(shù)形式如下:
其中y代表我們的真實(shí)值荒给,a代表我們softmax求出的值丈挟。i代表的是輸出結(jié)點(diǎn)的標(biāo)號(hào)!在上面例子志电,i就可以取值為4,5,6三個(gè)結(jié)點(diǎn)(當(dāng)然我這里只是為了簡(jiǎn)單曙咽,真實(shí)應(yīng)用中可能有很多結(jié)點(diǎn))
現(xiàn)在看起來是不是感覺復(fù)雜了,居然還有累和溪北,然后還要求導(dǎo)桐绒,每一個(gè)a都是softmax之后的形式!
但是實(shí)際上不是這樣的之拨,我們往往在真實(shí)中茉继,如果只預(yù)測(cè)一個(gè)結(jié)果,那么在目標(biāo)中只有一個(gè)結(jié)點(diǎn)的值為1蚀乔,比如我認(rèn)為在該狀態(tài)下烁竭,我想要輸出的是第四個(gè)動(dòng)作(第四個(gè)結(jié)點(diǎn)),那么訓(xùn)練數(shù)據(jù)的輸出就是a4 = 1,a5=0,a6=0,哎呀吉挣,這太好了派撕,除了一個(gè)為1婉弹,其它都是0,那么所謂的求和符合终吼,就是一個(gè)幌子镀赌,我可以去掉啦!
為了形式化說明际跪,我這里認(rèn)為訓(xùn)練數(shù)據(jù)的真實(shí)輸出為第j個(gè)為1商佛,其它均為0!
****那么Loss就變成了Loss = -yilnaj(yi,aj的i姆打,j均為下標(biāo)良姆,公式不好打)****,累和已經(jīng)去掉了,太好了♂O罚現(xiàn)在我們要開始求導(dǎo)數(shù)了玛追!
我們?cè)谡硪幌律厦婀剑瑸榱烁用靼椎目闯鱿嚓P(guān)變量的關(guān)系:
其中yj=1,,那么形式變?yōu)長(zhǎng)oss = -lnaj
那么形式越來越簡(jiǎn)單了闲延,求導(dǎo)分析如下:
參數(shù)的形式在該例子中痊剖,總共分為w41,w42,w43,w51,w52,w53,w61,w62,w63.這些,那么比如我要求出w41,w42,w43的偏導(dǎo)慨代,就需要將Loss函數(shù)求偏導(dǎo)傳到結(jié)點(diǎn)4邢笙,然后再利用鏈?zhǔn)椒▌t繼續(xù)求導(dǎo)即可,舉個(gè)例子此時(shí)求w41的偏導(dǎo)為:
w51.....w63等參數(shù)的偏導(dǎo)同理可以求出侍匙,那么我們的關(guān)鍵就在于Loss函數(shù)對(duì)于結(jié)點(diǎn)4,5,6的偏導(dǎo)怎么求氮惯,如下:
這里分為倆種情況:
j=i對(duì)應(yīng)例子里就是如下圖所示:
比如我選定了j為4,那么就是說我現(xiàn)在求導(dǎo)傳到4結(jié)點(diǎn)這想暗!
那么由上面求導(dǎo)結(jié)果再乘以交叉熵?fù)p失函數(shù)求導(dǎo)
Loss = -lnaj,它的導(dǎo)數(shù)為-1/aj,與上面的aj(1-aj)相乘為aj-1(形式非常簡(jiǎn)單妇汗,這說明我只要正向求一次得出結(jié)果,然后反向傳梯度的時(shí)候说莫,只需要將它結(jié)果減1即可杨箭,后面還會(huì)舉例子!)那么我們可以得到Loss對(duì)于4結(jié)點(diǎn)的偏導(dǎo)就求出了了(這里假定4是我們的預(yù)計(jì)輸出)
第二種情況為:
這里對(duì)應(yīng)我的例子圖如下储狭,我這時(shí)對(duì)的是j不等于i互婿,往前傳:
那么由上面求導(dǎo)結(jié)果再乘以交叉熵?fù)p失函數(shù)求導(dǎo)
Loss = -lnaj,它的導(dǎo)數(shù)是-1/aj,與上面-ajai相乘為ai(形式非常簡(jiǎn)單,這說明我只要正向求一次得出結(jié)果辽狈,然后反向傳梯度的時(shí)候慈参,只需要將它結(jié)果保存即可,后續(xù)例子會(huì)講到)這里就求出了除4之外的其它所有結(jié)點(diǎn)的偏導(dǎo)刮萌,然后利用鏈?zhǔn)椒▌t繼續(xù)傳遞過去即可驮配!我們的問題也就解決了!
下面我舉個(gè)例子來說明為什么計(jì)算會(huì)比較方便,給大家一個(gè)直觀的理解
舉個(gè)例子壮锻,通過若干層的計(jì)算琐旁,最后得到的某個(gè)訓(xùn)練樣本的向量的分?jǐn)?shù)是[ 2, 3, 4 ],
那么經(jīng)過softmax函數(shù)作用后概率分別就是=[e2/(e2+e3+e4),e3/(e2+e3+e4),e4/(e2+e3+e4)] = [0.0903,0.2447,0.665],如果這個(gè)樣本正確的分類是第二個(gè)的話,那么計(jì)算出來的偏導(dǎo)就是[0.0903,0.2447-1,0.665]=[0.0903,-0.7553,0.665]猜绣,是不是非常簡(jiǎn)單;遗埂!然后再根據(jù)這個(gè)進(jìn)行back propagation就可以了
到這里掰邢,這篇文章的內(nèi)容就講完了验懊,我希望根據(jù)自己的理解,通過列出大量例子尸变,直白的給大家講解softmax的相關(guān)內(nèi)容,讓大家少走彎路减俏,真心希望對(duì)大家的理解有幫助召烂!歡迎交流指錯(cuò)!畫圖整理不易娃承,覺得有幫助的給個(gè)贊唄奏夫,哈哈!
參考:
softmax的log似然代價(jià)函數(shù)(公式求導(dǎo))
交叉熵代價(jià)函數(shù)(作用及公式推導(dǎo))
轉(zhuǎn)自:http://www.reibang.com/p/ffa51250ba2e