一、與梯度的關係:
如:y=x**2
Y.backward()
X.grad==d(y)/d(x),則說明x的梯度是反向傳播函數關於x的導數,即哪個函數backward,用哪個函數進行求導。
二、與損失函數的關係:
參考資料:https://www.jianshu.com/p/964345dddb70
反向傳播旨在優化權重參數,從而得到最優的全局參數矩陣,進而將多層神經網絡應用到分類(前向傳播)或者回歸任務(權重或參數求取)中去,主要應用在包含隱藏層的情況。反向傳播工作原理,當輸出值與真實值不一致時,損失函數會提出一個變量的修改方向與多少,由於隱藏層的存在,無法直接根據損失函數進行輸入在隱藏層中權重矩陣或參數的修改,使用反響傳播可以使隱藏層間接獲得修改指示。具體傳播過程如下所示:
接着對輸入層的w11進行參數更新,更新之前我們依然從後往前推導,直到預見第一層的w11爲止(只不過這次需要往前推的更久一些):
因此誤差對輸入層的w11求偏導如下:
求導得如下公式(有點長(ฅ́˘ฅ̀)):
同理,輸入層的其他三個參數按照同樣的方法即可求出各自的偏導,在這不再贅述。在每個參數偏導數明確的情況下,帶入梯度下降公式即可(不在重點介紹):
至此,需要更新的權重已經獲得,其實就是原始權重加上損失函數對某一權重的偏導數乘以學習率。
Y.backward()==d
詳情參考:https://gitee.com/ski133/PytorchTest/blob/master/PyTorchTest/%E4%BA%A4%E5%8F%89%E7%86%B5%E6%8D%9F%E5%A4%B1%E5%87%BD%E6%95%B0.docx