簡(jiǎn)單易懂的softmax交叉熵?fù)p失函數(shù)求導(dǎo)來寫一個(gè)softmax求導(dǎo)的推導(dǎo)過程,不僅可以給自己理清思路,還可以造福大眾,豈不美哉~ softmax 函數(shù)softmax(柔性最大值)函數(shù),一般在神經(jīng)網(wǎng)絡(luò)中, softmax可以作為分類任務(wù)的輸出層。其實(shí)可以認(rèn)為softmax輸出的是幾個(gè)類別選擇的概率,比如我有一個(gè)分類任務(wù),要分為三個(gè)類,softmax函數(shù)可以根據(jù)它們相對(duì)的大小,輸出三個(gè)類別選取的概率,并且概率和為1。 softmax函數(shù)的公式是這種形式: S_i代表的是第i個(gè)神經(jīng)元的輸出。 神經(jīng)元的輸出設(shè)為: 其中w_{ij}是第i個(gè)神經(jīng)元的第j個(gè)權(quán)重,b是偏移值。z_i表示該網(wǎng)絡(luò)的第i個(gè)輸出。 a_i代表softmax的第i個(gè)輸出值,右側(cè)就是套用了softmax函數(shù)。 損失函數(shù) loss function在神經(jīng)網(wǎng)絡(luò)反向傳播中,要求一個(gè)損失函數(shù),這個(gè)損失函數(shù)其實(shí)表示的是真實(shí)值與網(wǎng)絡(luò)的估計(jì)值的誤差,知道誤差了,才能知道怎樣去修改網(wǎng)絡(luò)中的權(quán)重。 損失函數(shù)可以有很多形式,這里用的是交叉熵函數(shù),主要是由于這個(gè)求導(dǎo)結(jié)果比較簡(jiǎn)單,易于計(jì)算,并且交叉熵解決某些損失函數(shù)學(xué)習(xí)緩慢的問題。交叉熵的函數(shù)是這樣的: 其中y_i表示真實(shí)的分類結(jié)果。 最后的準(zhǔn)備在我最開始看softmax推導(dǎo)的時(shí)候,有時(shí)候看到一半不知道是怎么推出來的,其實(shí)主要是因?yàn)橐恍┣髮?dǎo)法則忘記了,唉~ 推導(dǎo)過程好了,這下正式開始~ 根據(jù)復(fù)合函數(shù)求導(dǎo)法則: 有個(gè)人可能有疑問了,這里為什么是a_j而不是a_i,這里要看一下softmax的公式了,因?yàn)閟oftmax公式的特性,它的分母包含了所有神經(jīng)元的輸出,所以,對(duì)于不等于i的其他輸出里面,也包含著z_i,所有的a都要納入到計(jì)算范圍中,并且后面的計(jì)算可以看到需要分為i = j和i ≠ j兩種情況求導(dǎo)。 第二個(gè)稍微復(fù)雜一點(diǎn),我們先把它分為兩種情況: ok,接下來我們只需要把上面的組合起來: 最后的結(jié)果看起來簡(jiǎn)單了很多,最后,針對(duì)分類問題,我們給定的結(jié)果y_i最終只會(huì)有一個(gè)類別是1,其他類別都是0,因此,對(duì)于分類問題,這個(gè)梯度等于: |
|