前言:
關於Sparse coding目標函數的優化會涉及到矩陣求數問題,因為里面有好多矩陣范數的導數,加上自己對矩陣運算不熟悉,推導前面博文Deep learning:二十六(Sparse coding簡單理解)中關於拓撲(非拓撲的要簡單很多)Sparse coding代價函數對特征變量s導數的公式時,在草稿紙上推導了大半天也沒有正確結果。該公式表達式為:

后面繼續看UFLDL教程,發現這篇文章Deriving gradients using the backpropagation idea中已經給出了我想要的答案,作者是應用BP神經網絡中求網絡代價函數導數的思想,將上述代價函數演變成一個多層的神經網絡,然后利用每層網絡中節點的誤差值來反向推導出每一層網絡節點的導數。Andrew Ng真值得人佩服,給出的教程切中了我們的要害。
在看怎樣使用BP思想計算矩陣范數的導數時,先看下針對這種問題求解的BP算法形式(和以前經典的BP算法稍有不同,比如說最后一層網絡的誤差值計算方法,暫時還沒弄明白這樣更改的理由):
- 對網絡(由代價函數轉換成的網絡)中輸出層中節點的誤差值,采用下面公式計算:

2. 從網絡的倒數第2層一直到第2層,依次計算網絡每層的誤差值:

3. 計算網絡中l層的網絡參數的偏導(如果是第0層網絡,則表示是求代價函數對輸入數據作為參數的偏導):

比如在上篇博文中Deep learning:二十七(Sparse coding中關於矩陣的范數求導),就使用過將矩陣范數轉換成矩陣的跡形式,然后利用跡的求導公式得出結果,那時候是求sparse coding中非拓撲網絡代價函數對權值矩陣A的偏導數,現在用BP思想來求對特征矩陣s的導數,代價函數為:

將表達式中s當做網絡的輸入,依次將公式中各變量和轉換關系變成下面的網絡結構:

列出每一層網絡的權值,activation函數及其偏導數,誤差值,每一層網絡的輸入,如下所示:

求最后一層網絡的誤差值時按照前面BP算法的方法此處是:最后一層網絡的輸出值之和J對最后一層某個節點輸入值的偏導,這里的J為:
因為此時J對Zi求導是只對其中關於Zi的那一項有效,所以它的偏導數為2*Zi。
最終代價函數對輸入X(這里是s)的偏導按照公式可以直接寫出如下:

下面繼續來看那個我花了解決一天時間也沒推倒出來的偏導數,即在拓撲sparse coding代價函數中關於特征矩陣s的偏導公式。也就是本文一開始給出的公式。
用同樣的方法將其轉換成對應的網絡結構如下所示:

也同樣的,列出它對應網絡的參數:


其中的輸出函數J如下:

最終那個神奇的答案為:
看來這種方法得掌握,如果日后自己論文用到什么公式需要推導的話。
參考資料:
Deep learning:二十六(Sparse coding簡單理解)
Deriving gradients using the backpropagation idea
Deep learning:二十七(Sparse coding中關於矩陣的范數求導)
