訓(xùn)練一個(gè) Softmax 分類器(Training a Softmax classifier)
上一個(gè)筆記中我們學(xué)習(xí)了Softmax層和Softmax激活函數(shù)臀规,在這個(gè)筆記中绪爸,你將更深入地了解Softmax分類着裹,并學(xué)習(xí)如何訓(xùn)練一個(gè)使用了Softmax層的模型。
回憶一下我們之前舉的的例子踏施,輸出層計(jì)算出的z^([l])如下问畅,
我們有四個(gè)分類C=4,z^([l])可以是4×1維向量爆存,我們計(jì)算了臨時(shí)變量t
對(duì)元素進(jìn)行冪運(yùn)算蛉顽,最后如果你的輸出層的激活函數(shù)g^([L]) ()是Softmax激活函數(shù),那么輸出就會(huì)是這樣的:
簡(jiǎn)單來(lái)說(shuō)就是用臨時(shí)變量t將它歸一化先较,使總和為1携冤,于是這就變成了a^([L]),你注意到向量z中闲勺,最大的元素是5曾棕,而最大的概率也就是第一種概率。
Softmax這個(gè)名稱的來(lái)源是與所謂hardmax對(duì)比菜循,hardmax會(huì)把向量z變成這個(gè)向量
翘地,hardmax函數(shù)會(huì)觀察z的元素,然后在z中最大元素的位置放上1,其它位置放上0子眶,所這是一個(gè)hard max瀑凝,也就是最大的元素的輸出為1序芦,其它的輸出都為0臭杰。與之相反,Softmax所做的從z到這些概率的映射更為溫和谚中,我不知道這是不是一個(gè)好名字渴杆,但至少這就是softmax這一名稱背后所包含的想法,與hardmax正好相反宪塔。
有一點(diǎn)我沒(méi)有細(xì)講磁奖,但之前已經(jīng)提到過(guò)的,就是Softmax回歸或Softmax激活函數(shù)將logistic激活函數(shù)推廣到C類某筐,而不僅僅是兩類比搭,結(jié)果就是如果C=2,那么C=2的Softmax實(shí)際上變回了logistic回歸南誊,我不會(huì)在這個(gè)筆記中給出證明身诺,但是大致的證明思路是這樣的,
如果C=2抄囚,并且你應(yīng)用了Softmax霉赡,那么輸出層a^([L])將會(huì)輸出兩個(gè)數(shù)字,如果C=2的話幔托,也許輸出0.842和0.158穴亏,對(duì)吧?這兩個(gè)數(shù)字加起來(lái)要等于1重挑,因?yàn)樗鼈兊暮捅仨殲?嗓化,其實(shí)它們是冗余的,也許你不需要計(jì)算兩個(gè)谬哀,而只需要計(jì)算其中一個(gè)刺覆,結(jié)果就是你最終計(jì)算那個(gè)數(shù)字的方式又回到了logistic回歸計(jì)算單個(gè)輸出的方式。
這算不上是一個(gè)證明玻粪,但我們可以從中得出結(jié)論隅津,Softmax回歸將logistic回歸推廣到了兩種分類以上。
接下來(lái)我們來(lái)看怎樣訓(xùn)練帶有Softmax輸出層的神經(jīng)網(wǎng)絡(luò)劲室,具體而言伦仍,我們先定義訓(xùn)練神經(jīng)網(wǎng)絡(luò)使會(huì)用到的損失函數(shù)。
舉個(gè)例子很洋,我們來(lái)看看訓(xùn)練集中某個(gè)樣本的目標(biāo)輸出充蓝,真實(shí)標(biāo)簽是
,用上一個(gè)筆記中講到過(guò)的例子,這表示這是一張貓的圖片谓苟,因?yàn)樗鼘儆陬?官脓,現(xiàn)在我們假設(shè)你的神經(jīng)網(wǎng)絡(luò)輸出的是^y,^y是一個(gè)包括總和為1的概率的向量涝焙,
卑笨,你可以看到總和為1,這就是a^([l])仑撞,
對(duì)于這個(gè)樣本神經(jīng)網(wǎng)絡(luò)的表現(xiàn)不佳赤兴,這實(shí)際上是一只貓,但卻只分配到20%是貓的概率隧哮,所以在本例中表現(xiàn)不佳桶良。
那么你想用什么損失函數(shù)來(lái)訓(xùn)練這個(gè)神經(jīng)網(wǎng)絡(luò)?
在Softmax分類中沮翔,我們一般用到的損失函數(shù)是
我們來(lái)看上面的單個(gè)樣本來(lái)更好地理解整個(gè)過(guò)程陨帆。
注意在這個(gè)樣本中y_1=y_3=y_4=0,因?yàn)檫@些都是0采蚀,只有y_2=1疲牵,如果你看這個(gè)求和,所有含有值為0的y_j的項(xiàng)都等于0搏存,最后只剩下-y_2 tlog^y_2瑰步,
因?yàn)楫?dāng)你按照下標(biāo)j全部加起來(lái),所有的項(xiàng)都為0璧眠,除了j=2時(shí)缩焦,又因?yàn)閥_2=1,所以它就等于- log^y_2责静。
這就意味著袁滥,如果你的學(xué)習(xí)算法試圖將它變小,因?yàn)樘荻认陆捣ㄊ怯脕?lái)減少訓(xùn)練集的損失的灾螃,要使它變小的唯一方式就是使-log^y_2變小题翻,要想做到這一點(diǎn),就需要使^y_2盡可能大腰鬼,因?yàn)檫@些是概率嵌赠,所以不可能比1大,但這的確也講得通熄赡,因?yàn)樵谶@個(gè)例子中x是貓的圖片姜挺,你就需要這項(xiàng)輸出的概率盡可能地大
概括來(lái)講,損失函數(shù)所做的就是它找到你的訓(xùn)練集中的真實(shí)類別彼硫,然后試圖使該類別相應(yīng)的概率盡可能地高炊豪,如果你熟悉統(tǒng)計(jì)學(xué)中最大似然估計(jì)凌箕,這其實(shí)就是最大似然估計(jì)的一種形式。但如果你不知道那是什么意思词渤,也不用擔(dān)心牵舱,用我們剛剛講過(guò)的算法思維也足夠了。
這是單個(gè)訓(xùn)練樣本的損失缺虐,整個(gè)訓(xùn)練集的損失J又如何呢芜壁?
也就是設(shè)定參數(shù)的代價(jià)之類的,還有各種形式的偏差的代價(jià)志笼,它的定義你大致也能猜到沿盅,就是整個(gè)訓(xùn)練集損失的總和把篓,把你的訓(xùn)練算法對(duì)所有訓(xùn)練樣本的預(yù)測(cè)都加起來(lái)纫溃,
因此你要做的就是用梯度下降法,使這里的損失最小化韧掩。
最后還有一個(gè)實(shí)現(xiàn)細(xì)節(jié)紊浩,注意因?yàn)镃=4,y是一個(gè)4×1向量疗锐,y也是一個(gè)4×1向量坊谁,如果你實(shí)現(xiàn)向量化,矩陣大寫Y就是[y^((1)) y^((2))…… y^((m) )]滑臊,例如如果上面這個(gè)樣本是你的第一個(gè)訓(xùn)練樣本口芍,那么矩陣
那么這個(gè)矩陣Y最終就是一個(gè)4×m維矩陣。類似的雇卷,^Y=[^y^((1)) ^y^((2))…… ^y^((m))]鬓椭,這個(gè)其實(shí)就是^y^((1))
,或是第一個(gè)訓(xùn)練樣本的輸出关划,那么
小染,^Y本身也是一個(gè)4×m維矩陣。
最后我們來(lái)看一下贮折,在有Softmax輸出層時(shí)如何實(shí)現(xiàn)梯度下降法裤翩,這個(gè)輸出層會(huì)計(jì)算z^([l]),它是C×1維的调榄,在這個(gè)例子中是4×1踊赠,然后你用Softmax激活函數(shù)來(lái)得到a^([l])或者說(shuō)y,然后又能由此計(jì)算出損失每庆。
我們已經(jīng)講了如何實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)前向傳播的步驟筐带,來(lái)得到這些輸出,并計(jì)算損失扣孟,那么反向傳播步驟或者梯度下降法又如何呢烫堤?
其實(shí)初始化反向傳播所需要的關(guān)鍵步驟或者說(shuō)關(guān)鍵方程是這個(gè)表達(dá)式dz^([l])=^y-y,你可以用^y這個(gè)4×1向量減去y這個(gè)4×1向量,你可以看到這些都會(huì)是4×1向量鸽斟,當(dāng)你有4個(gè)分類時(shí)拔创,在一般情況下就是C×1,這符合我們對(duì)dz的一般定義富蓄,這是對(duì)z^([l])損失函數(shù)的偏導(dǎo)數(shù)(dz^([l])=?J/(?z^([l]) ))剩燥,如果你精通微積分就可以自己推導(dǎo),或者說(shuō)如果你精通微積分立倍,可以試著自己推導(dǎo)灭红,但如果你需要從零開始使用這個(gè)公式,它也一樣有用口注。
有了這個(gè)变擒,你就可以計(jì)算dz^([l]),然后開始反向傳播的過(guò)程寝志,計(jì)算整個(gè)神經(jīng)網(wǎng)絡(luò)中所需要的所有導(dǎo)數(shù)娇斑。
在后面,我們會(huì)講解一些深度學(xué)習(xí)編程框架材部,對(duì)于這些編程框架毫缆,通常你只需要專注于把前向傳播做對(duì),只要你將它指明為編程框架乐导,前向傳播苦丁,它自己會(huì)弄明白怎樣反向傳播,會(huì)幫你實(shí)現(xiàn)反向傳播物臂,所以這個(gè)表達(dá)式值得牢記(dz^([l])=^y-y)旺拉,如果你需要從頭開始,實(shí)現(xiàn)Softmax回歸或者Softmax分類