Neural-Networks
minibatch 梯度下降如何更新批次中每個示例的權重?
如果我們批量處理 10 個示例,我知道我們可以對每個示例的損失求和,但是在更新每個示例的權重方面,反向傳播如何工作?
例如:
- 示例 1 –> 損失 = 2
- 示例 2 –> 損失 = -2
這導致平均損失為 0(E = 0),那麼這將如何更新每個權重並收斂?僅僅是通過批次的隨機化,我們“希望”遲早會收斂嗎?這不是只計算最後一個處理示例的第一組權重的梯度嗎?
梯度下降並不完全按照您建議的方式工作,但可能會出現類似的問題。
我們不計算批次的平均損失,我們計算損失函數的平均梯度。梯度是損失相對於權重的導數,在神經網絡中,一個權重的梯度取決於該特定示例的輸入,它還取決於模型中的許多其他權重。
如果您的模型有 5 個權重並且您的小批量大小為 2,那麼您可能會得到:
示例 1. 損失 = 2,
示例 2. 損失 = 3,
計算這個小批量中梯度的平均值,它們是
對幾個示例進行平均的好處是梯度的變化較小,因此學習更加一致,並且較少依賴於一個示例的細節。注意第三個權重的平均梯度如何,這個權重不會改變這個權重更新,但是對於選擇的下一個使用不同權重計算的示例,它可能是非零的。
根據評論進行編輯:
在我上面的示例中,計算了梯度的平均值。對於小批量大小我們計算損失的地方對於每個示例,我們的目標是獲得損失相對於權重的平均梯度.
我在示例中編寫它的方式是平均每個漸變,例如:
您在評論中鏈接到的教程代碼使用 Tensorflow 來最小化平均損失。
TensorFlow 旨在最小化
為了最小化這一點,它計算了每個權重的平均損失梯度,並使用梯度下降來更新權重:
可以將微分帶入總和中,因此它與我示例中方法的表達式相同。