1. 程式人生 > >cs231n-assignment1-SVM/Softmax/two-layer-nets梯度求解

cs231n-assignment1-SVM/Softmax/two-layer-nets梯度求解

上週完成了cs231n的assignment1,作業中的難點是SVM/Softmax/two-layer-nets的梯度求導,特此寫篇部落格進行總結。
作業assignment1的資源連結在這裡:http://download.csdn.net/detail/pjia_1008/9797177

  • SVM梯度求導
    SVM的梯度求導要考慮兩種情況,j==yi 和 j!=yi,此處 j表示誤分類項,yi表示正確分類的項。比如,輸入貓的圖片,共有三個進行預測的類別:狗、貓和車。在進行預測的時候“貓”這一項就是ground true正確分類的項,其餘兩項“狗”和“車”就是誤分類的項。可以根據course note中的例子進行理解:
    這裡寫圖片描述


    分別對這兩種情況進行梯度求導,以下為筆記中的梯度求導公式:
    這裡寫圖片描述
    乍一看感覺怎麼這麼複雜,其實括號裡面是個指示函式,對應原函式max的求導,只有在損失項大於零的時候,對應的求導值才大於零,上面的式子可以轉換如下,更易於理解:
    這裡寫圖片描述
    第一種情況,j==yi,是針對正確項的梯度進行求偏導,也就是-WyiXi這一項;第二種情況,j!=yi,是針對誤分類項的梯度進行求導,WjXi這一項。這裡的分情況求導的思想也適用於Softmax和two-layer-nets的梯度求導。

  • Softmax梯度求導
    Softmax與SVM,只是換了個損失函式,求導的思想類同,也需要分兩種情況 j==yi 和 j!=yi , Softmax損失函式和求導步驟公式如下:
    softmax loss function


    具體看一下這個損失函式,這裡的 f 對應著scores
    這裡寫圖片描述
    所以,這裡要運用鏈式法則,對梯度求偏導一共有兩層:
    這裡寫圖片描述
    dscores/dw比較簡單,主要解釋dloss/dscores:
    j!=yi 針對錯誤項分母進行求偏導:
    這裡寫圖片描述
    j==yi 針對分子進行求偏導:
    這裡寫圖片描述
    dloss/dscores到這裡就完成了,再繼續求dscores/dw=x,最終再乘上dloss/dscores就完成了softmax的梯度求導了!

  • two-layer-nets梯度求導
    兩層神經網路最後採用了softmax作為歸一化輸出,所以dloss/dscores的求導與softmax的求導相同,完成dloss/dscores求導後再依次向前一層w2求偏導,RELU求偏導,w1求偏導,這裡不再重複贅述。

cs231n的視訊課中說computing the gradient 使用 analytically with calculus是error prone to implement,是因為運用微分求導時,首先需要通過損失函式進行手動梯度求導公式的推導,這裡面涉及分情況和分層,當神經網路的層數加深的時候,這個求偏導過程涉及的求導步驟也隨之增多,極易出錯,所以要使用後期的gradient check