對於一個標準的機器學習問題,例如MNIST上的圖像分類,損失函數是固定的,因此優化過程可以簡單地通過調用函數和饋入輸入進入他們。沒有必要手工推導出梯度並編碼體面的程序。有沒有什麼辦法可以完成隨機梯度下降不是從零開始
但是現在我很困惑,當遇到一些複雜的表述時。假設我們正在解決半監督問題,而損失函數有兩個部分:Ls + lambda * Lu
。第一部分是一個正常的分類公式,例如交叉熵損失。第二部分各不相同。在我的情況下,Lu
是矩陣分解損失,具體爲:Lu = MF(D, C * W)
。總損失函數可以寫爲:
L = \sum log p(yi|xi) + MF(D, C * W) = \sum log p(yi|Wi) + MF(D, C * W) = \sum log p(yi|T * Wi + b) + MF(D, C * W)
如果參數是W, C, T
和b
。第一部分是分類損失,輸入xi
是W
的原始數據,即Wi
,大小爲(d, 1)
的向量。並且標籤yi
可以是大小爲(c, 1)
的單熱矢量,因此參數T
和b
將輸入映射到標籤大小。第二部分是矩陣分解損失。
現在我很困惑,當我要使用sgd優化這個函數。它可以通過寫下公式推導梯度來解決,然後從頭開始完成一個培訓程序。但我想知道是否有更簡單的方法?因爲使用像Tensorflow或Keras這樣的深度學習工具可以輕鬆地訓練分類模型,所有您需要做的就是構建網絡並提供數據。
所以同樣,有沒有一種工具可以在我定義損失函數後自動計算梯度?因爲從頭開始獲取漸變是非常煩人的。分類損失和矩陣分解損失是非常普遍的,所以我認爲可以徹底實現組合。
非常感謝。我正在閱讀Tensorflow的手冊,因爲我之前沒有使用它。我會問我是否遇到其他問題。感謝你的建議。還有一個問題,我是否需要導出漸變?或者我只需要制定損失函數? –