Date: 04/01/2018
一般的神經(jīng)網(wǎng)絡(luò)課程在講述BP算法的時(shí)候都會(huì)用sigmoid 函數(shù)來作為最后一層的激活函數(shù)來實(shí)現(xiàn)二分類,這是因?yàn)槠鋝igmoid求導(dǎo)的便利,非常適合用來講課(吳大大的課也是如此)。
但是對于多分類的問題很多小伙伴表示喜歡直接調(diào)庫。其實(shí)了解softmax反向傳播原理,或者可以自己手推一遍softmax的BP算法,才能彰顯一個(gè)AI從業(yè)人員的內(nèi)功。
此文會(huì)通過一個(gè)案例為大家一步一步講解softmax 反向傳播的多個(gè)知識點(diǎn),只要仔細(xì)看完此文你會(huì)對整個(gè)流程豁然開朗。
現(xiàn)有如下的分類問題,可以通過動(dòng)物的4個(gè)特征來區(qū)分此動(dòng)物到底是什么種類(貓,狗,人 3個(gè)類別)
我們可以建立如下NN模型來解決這個(gè)問題:
在開始講解之前,首先定義一下此文的統(tǒng)一符號命名,(很重要)
紅色的是Input 簡寫為
藍(lán)色的是Output 簡寫為 O
紅色和藍(lán)色之間的是權(quán)重矩陣 簡寫為 W
綠色的是Output經(jīng)過Softmax之后的結(jié)果 簡寫為 yhat
1 、正向傳播:
O = X W
yhat = Softmax(O)
@此時(shí)softmax 有三個(gè)神經(jīng)元輸出 m = 3
重要:
X (Shape 為(1,4)的向量)
W (Shape為(4,3)的矩陣)
yhat (Shape 為(1,3)的向量)
2、反向傳播
1) 求損失
因?yàn)槭欠诸悊栴},我們采用交叉熵作為 loss function(關(guān)于為什么交叉熵可以作為損失函數(shù)我會(huì)在后期寫一篇文章進(jìn)行介紹,敬請期待), 如下:
2) 求梯度
我先給出梯度公式也就是項(xiàng)目中的error-term :
?x?(yhat?y) **
想必各位想知道這個(gè)公式到底怎么推導(dǎo)得到的呢?
接下來我會(huì)講解此文的重點(diǎn)
重要 求權(quán)重的梯度需要運(yùn)用鏈?zhǔn)角髮?dǎo)法則,如下:
我們來分別計(jì)算后面的三項(xiàng):
第一項(xiàng):
第二項(xiàng):
稍微有點(diǎn)復(fù)雜。
為什么yhat下標(biāo)為i 而O下標(biāo)為j 呢?
這是由于softmax 函數(shù)的分母有多個(gè)輸出,但是針對yhati 需要計(jì)算所有的softmax
由于softmax有多個(gè)輸出,所以需要考慮 i = j 與 i != j 兩種情形。
當(dāng) i != j 時(shí):
當(dāng) i = j 時(shí):
將 j 替換為 i如下
第三項(xiàng):
第三項(xiàng)非常簡單,我們先來算前兩項(xiàng)
到這里別忘了 我們經(jīng)過softmax 的輸出只有一個(gè)類別也就是 yi = 1, 其他的都等于0
所以前兩項(xiàng)的結(jié)果為:最終我們就得到了結(jié)果:
但是Error - term 為 ?x?(yhat?y) **
這里為什么有個(gè)負(fù)號?
是因?yàn)槟P蛻?yīng)該朝著負(fù)梯度的方向優(yōu)化,所以加了一個(gè)負(fù)號。
到此softmax 的正向與反向傳播都講清楚了,歡迎支持 《原理就是這么簡單系列》