Neural-Networks

minibatch 梯度下降如何更新批次中每個示例的權重?

  • March 12, 2017

如果我們批量處理 10 個示例,我知道我們可以對每個示例的損失求和,但是在更新每個示例的權重方面,反向傳播如何工作?

例如:

  • 示例 1 –> 損失 = 2
  • 示例 2 –> 損失 = -2

這導致平均損失為 0(E = 0),那麼這將如何更新每個權重並收斂?僅僅是通過批次的隨機化,我們“希望”遲早會收斂嗎?這不是只計算最後一個處理示例的第一組權重的梯度嗎?

梯度下降並不完全按照您建議的方式工作,但可能會出現類似的問題。

我們不計算批次的平均損失,我們計算損失函數的平均梯度。梯度是損失相對於權重的導數,在神經網絡中,一個權重的梯度取決於該特定示例的輸入,它還取決於模型中的許多其他權重。

如果您的模型有 5 個權重並且您的小批量大小為 2,那麼您可能會得到:

示例 1. 損失 = 2,

示例 2. 損失 = 3,

計算這個小批量中梯度的平均值,它們是

對幾個示例進行平均的好處是梯度的變化較小,因此學習更加一致,並且較少依賴於一個示例的細節。注意第三個權重的平均梯度如何,這個權重不會改變這個權重更新,但是對於選擇的下一個使用不同權重計算的示例,它可能是非零的。

根據評論進行編輯:

在我上面的示例中,計算了梯度的平均值。對於小批量大小我們計算損失的地方對於每個示例,我們的目標是獲得損失相對於權重的平均梯度.

我在示例中編寫它的方式是平均每個漸變,例如:

您在評論中鏈接到的教程代碼使用 Tensorflow 來最小化平均損失。

TensorFlow 旨在最小化

為了最小化這一點,它計算了每個權重的平均損失梯度,並使用梯度下降來更新權重:

可以將微分帶入總和中,因此它與我示例中方法的表達式相同。

引用自:https://stats.stackexchange.com/questions/266968

comments powered by Disqus