先快速複習一下NN裡面Gradient Descent的做法
在NN裡面,我們有一個Network parameters θ = {w1, w2, ..., b1, b2, ...}
$$ \nabla L(\theta)=\begin{bmatrix} \partial(\theta)/ \partial w_1 \\[6pt] \partial(\theta)/ \partial w_2\\ \vdots\\ \partial(\theta)/ \partial b_1 \\[6pt]\partial(\theta)/ \partial b_2\\\vdots\end{bmatrix} $$
$$ \text{Compute } \nabla L(\theta^0)\hspace{30pt} \theta^1=\theta^0-\eta \nabla L(\theta^0)\\[10pt]\text{Compute } \nabla L(\theta^1)\hspace{30pt} \theta^2=\theta^1-\eta \nabla L(\theta^1)\\\vdots $$
有些複雜的問題,例如語音辨識,可能有有上百萬的變數,因此vector可能有上百萬維,計算量非常大。而Backpropagation其實就是有效的做這件事的方法。
Backpropagation 其實就是 Gradient Descent,沒有不同,只是它是一個更有效率的演算法,讓我們再算 Gradient 這個vector時,可以更有效率。
Backpropagation 會使用到微積分中的Chain Rule概念
回到NN,假若給我們的NN一組參數θ,給進一個x,輸出一個y。我們定義一個 cost C(θ),若y與ŷ的距離越接近,cost 會越小,代表loss越,cost可用 cross entropy 或 MSE
$$ \text{Total Loss, }L(\theta)=\sum_{n=1}^{N}C^n(\theta) \hspace{10pt} \Rightarrow \hspace{10pt} \frac{\partial L(\theta)}{\partial w}=\sum_{n=1}^{N}{\frac{\partial{C^n}(\theta)}{\partial w}} $$
因此,只要會計算一筆data的 ∂C / ∂w,把所有data的結果都加起來,就可以算出total loss 對某一個參數的偏微分