本文大量參照 David E. Rumelhart, Geoffrey E. Hinton and Ronald J. Williams, Learning representation by back-propagating errors, Nature, 323(9): 533-536, 1986.
在現代神經網絡中, 使用最多的算法當是反向傳播(BP). 雖然BP有着收斂慢, 容易陷入局部最小等缺陷, 但其易用性, 准確度卻是其他算法無可比擬的.
在本文中, $w_{ji}$為連接前一層$unit_{i}$和后一層$unit_{j}$的權值.
在MLP中, 對於輸出層神經元$unit_{j}$, 它的輸入$x_{j}$按下式進行計算(忽略偏置):
$x_{j} = \sum_{i} y_{i} w_{ji}$
可以看到它的輸入等於前一層所有神經元的輸出$y_{i}$和對應連接的加權和, 如上圖
而$unit_{j}$的輸出按下式計算:
$y_{j} = \frac{1}{1+e^{-x_{j}}}$. 這就是一個非線性變換sigmoid,
對於有監督訓練, 期望輸出$d$和實際輸出$y$現在都是已知的, 定義誤差為:
$E=\frac{1}{2}\sum_{c} \sum_{j}(y_{j,c}-d_{j,c})^2$
其中的$c$是輸入-輸出樣本對的標號, $j$是輸出層神經元的標號.
為求出$\partial E/\partial w_{ji}$,
我們先求$\partial E/\partial y_{j}$(之后就知道為何如此):
$\partial E/\partial y_{j} = y_{j} - d_{j}$, 此為誤差$E$對神經元$unit_{j}$輸出的偏導.
由鏈式法則:
$\partial E/\partial x_{j} = \partial E/\partial y_{j} * d y_{j}/d x_{j}$, 及上面的輸入輸出的關系式
$d y_{j}/d x_{j} = (\frac{1}{1+e^{-x_{j}}})' = \frac{e^{-x_{j}}}{(1+e^{-x_{j}})^{2}} = y_{j} * (1-y_{j})$
我們可以求出誤差$E$對$unit_{j}$的輸入$x_{j}$的偏導:
$\partial E/\partial x_{j} = \partial E/\partial y_{j} * y_{j} * (1-y_{j})$
至此, 我們得到了誤差$E$對於$unit_{j}$輸入$x_{j}$的偏導, 但網絡訓練的是權值(偏置), 所以我們必須知道$E$對於$w_{ji}$的偏導表達式.
同樣由鏈式法則:
$\partial E/\partial w_{ji} = \partial E/\partial x_{j} * \partial x_{j}/\partial w_{ji}$, 及本層輸入和權值的關系式:
$x_{j} = \sum_{i} y_{i} w_{ji}$, 可得 $\partial x_{j}/\partial w_{ji} = y_{i}$, 即:
$\partial E/\partial w_{ji} = \partial E/\partial x_{j} * y_{i}$,
其中$y_{i}$為前一層神經元$unit_{i}$的輸出, $y_{j}$為后一層神經元$unit_{j}$的輸出.
為了處理中間層, 我們同樣是按照鏈式法則, 對於第i個神經元, 我們可以求得誤差$E$對其輸出$y_{i}$的梯度(注意這里是$y_{i}$, 不是$y_{j}$):
$\partial E/\partial y_{i} = \partial E/\partial x_{j} * \partial x_{j}/\partial y_{i} = \partial E/\partial x_{j} * w_{ji}$,
考慮到第i個神經元的所有連接, 可以得到:
$\partial E/\partial y_{i} = \sum_{j}\partial E/\partial x_{j} * w_{ji}$ (1)
這里的$\partial E/\partial x_{j}$為誤差對於后一層的神經元$unit_{j}$輸入$x_{j}$的偏導.
我們梳理一下:
對於連接神經元$i$和神經元$j$的權值$w_{ji}$, 主要有3個偏導分子, 輸入$x_{j}$, 輸出$y_{j}$和權值$ w_{ji}$, 他們的關系如下:
$\partial E/\partial x_{j} = \partial E/\partial y_{j} * y_{j} * (1-y_{j})$ (2)[基於$y_{j}$和$x_{j}$的非線性轉換關系式];
$\partial E/\partial w_{ji} = \partial E/\partial x_{j} * y_{i}$ (3)[基於$x_{j}$和$y_{i}$的加權求和公式].
為求得上面的式(3), 我們需要求得$\partial E/\partial x_{j}$, 而為求得$\partial E/\partial x_{j}$, 需要求得$\partial E/\partial y_{j}$.
對於輸出層(最后一層), $\partial E/\partial y_{j}=y_{j} - d_{j}$;
對於中間層, $\partial E/\partial y_{i}$按式(1)進行計算, 而式(1)中的$\partial E/\partial x_{j}$是由$\partial E/\partial y_{j}=y_{j} - d_{j}$算出來的. 當我們算出中間層的$\partial E/\partial y_{i}$之后, 把式(2)中的$y_{j}$全部替換成$y_{i}$就可以計算出$\partial E/\partial x_{i}$從而計算出式(3), 注意此時的式(3)中的$y_{i}$應該變為第i個神經元的前一層的對應神經元.
如此迭代, 我們就可以更新所有的權值啦.
權值調整的公式如下:
$\delta w = -\epsilon \partial E/\partial w$
總結:
BP的精髓: 如何通過鏈式法則求出$\partial E/\partial w_{ji}$
求法:
注意, 以下推導, 統一使用$i$ 作為當前層前一層的神經元下標, $j$ 作為當前層的神經元下標, $k$ 作為后一層神經元下標.
對於最后一層:
$\partial E/\partial w_{ji} = \partial E/\partial x_{j} * \partial x_{j}/\partial w_{ji}$ (1)
其中,
$\partial E/\partial x_{j} = \partial E/\partial y_{j} * \partial y_{j}/\partial x_{j}$ (2)
$\partial x_{j}/\partial w_{ji} = y_{i}$ (3, 已求出, 謝謝背鍋俠指正)
式(2)中,
$ \partial E/\partial y_{j} = y_{j} - d_{j}$ (已求出)
$ \partial y_{j}/\partial x_{j} = y_{j} * (1 - y_{j})$ (已求出)
從而計算出誤差對[最后一層到倒數第二層的權值]的梯度.
$\partial E/\partial w_{ji} = ( y_{j} - d_{j}) * y_{j} * (1 - y_{j}) * y_{i}$
對於倒數第二層:
唯一變化的只有 $ \partial E/\partial y_{j} $ 的求法. 同樣適用鏈式法則展開:
$ \partial E/\partial y_{j} = \partial E/\partial y_{k} * \partial y_{k}/\partial y_{j}$, 其中 $y_{k}$ 為后一層(最后一層)的第$k$個神經元輸出.
由於$\partial E/\partial y_{k} = y_{k} - d_{k}$(非固定, 每層表達式取前一層計算結果),
而$\partial y_{k}/\partial y_{j} = \partial y_{k}/\partial x_{k} * \partial x_{k}/\partial y_{j}$,
其中 $\partial y_{k}/\partial x_{k} = y_{k} * (1 - y_{k})$ (固定的, 每層表達式都一樣)
$\partial x_{k}/\partial y_{j} = w_{kj}$ (固定的, 每層表達式都一樣)
故$\partial y_{k}/\partial y_{j} = y_{k} * (1 - y_{k}) * w_{kj}$ (固定的, 每層表達式都一樣)
從而有 $ \partial E/\partial y_{j} = \partial E/\partial y_{k} * y_{k} * (1 - y_{k}) * w_{kj}$ (非固定, 用於下一層的誤差梯度計算)
最終: $\partial E/\partial w_{ji} = \partial E/\partial y_{j} * y_{j} * (1 - y_{j}) * y_{i}$
倒數第三層
可將倒數第二層求出的的$\partial E/\partial y_{j}$作為本層的$\partial E/\partial y_{k}$, 可計算出 $\partial E/\partial y_{j}$, 從而計算出 $\partial E/\partial w_{ji}$.