神經網路的反向傳播公式的推導
神經網路的反向傳播公式的推導
前言:
早該開始入坑CNN,RNN的博主總覺得要先能用python加numpy手擼一個神經網路,才能更好理解其他神經網路的原理(強迫症)。於是…這一拖就是快兩月(懶),最近填坑的時候才發現以為自己很通透的反向傳播過程,寫起程式碼推起來就…。
光看西瓜書覺得反向傳播就是損失函式反向對每一層引數求偏導的過程。但西瓜書推導僅在三層網路上,各層引數符號定義也不統一(博主太笨)。於是又結合吳恩達《machine learning》課程才算推匯出能夠寫成程式碼迭代形式的公式。同時發現吳恩達老師視訊有關鍵步驟是簡略帶過,讓基礎較差初學者推導起來也很生硬。於是,博主在他網路課基礎上再推導一遍記成筆記。水平有限,有疏漏錯誤歡迎指正。
正文
神經網路的前向傳播和符號
在《machine learning》裡神經網路的前向傳播部分的公式被定義如下:
輸入層是x
,中間有兩層隱藏層,輸出層是$ a^{(4)} $。
在這個神經網路裡面的g(x)是每個神經元的啟用函式,採用sigmoid模型:
而sigmoid函式有一個在推導過程使用到性質,對它求導有:
吳老師講解神經網路給的損失函式模型是交叉熵:
化成矩陣的同時方便下面推導形式有:
而在周志華老師西瓜書的推導裡,給出神經網路的損失函式是均方誤差模型:
這裡y是標記的正確輸出結果。
但其無論該神經網路損失函式是什麼,他們反向傳播的原理都是一致的。(埋伏筆,下面有解釋)
我們先和吳恩達視訊裡一樣先定義$ \delta^{(i)} $來表示神經網路裡第i層的誤差。(先不要糾結為什麼這麼定義,繼續看下去)。
同時在吳恩達視訊裡最難理解一步就是誤差
只給出較為抽象的解釋。
實際上他這裡定義的誤差
有公式: