機器學習-神經網路(二)
上一篇:機器學習-神經網路(一)
神經網路的代價函式
符號 | 意義 |
---|---|
神經網路結構總層數 | |
第 層的單元數量 (不包括偏差單元) | |
輸出層的單元數量 |
(日了個仙人闆闆,手寫一直渲染錯誤只能貼圖了,: ) 浪費好久時間 )
代價函式中 總是被忽略的,因為我們並不想把 加入到正則化裡,也不想使它為 0,即不把偏差項正則化。
反向傳播
為什麼使用反向傳播
在神經網路中,我們的 數量居多,如果一個一個計算代價函式的偏導項再進行梯度下降計算,計算量實在是太大了,在使用梯度下降演算法進行訓練時速度會特別慢。因此,為了計算代價函式的偏導項,我們選擇使用反向傳播計算每一個神經節點激勵值與期望神經節點激勵值的誤差,然後通過誤差與神經元的激勵值再次計算得出偏導項的計算結果。
思想
我們能夠明白,如果輸出層的輸出與期望得到的輸出 存在誤差,那麼當下的每個神經元的激勵值必定與得到期望輸出時的每個神經元的激勵值 也存在誤差,我們將使用 代表第 層的第 個神經元當下激勵值與期望神經元的激勵值之間存在的誤差。
而反向傳播演算法從直觀上說,就是從輸出層開始到輸入層為止,反向推匯出每一個神經節點的激勵值的誤差 。
方法
使用反向傳播前,也就是求代價函式的導數前,首先需要使用前向傳播將每一個神經節點的激勵值算出,然後從後向前計算每一個神經節點的 。我們還要明白的就是:我們此時只知道輸出層神經節點的期望激勵值,因此我們只能夠從輸出層開始計算。
那麼,假設我們有一層輸入層,一層輸出層,兩層隱藏層,一共四層,我們能夠以 表示輸出層的第二個神經節點的激勵值誤差, 並且它的值能夠通過計算得出: ,通常我們會以向量化的形式表示整個一層的誤差值 即 = 。
而我們會使用這樣一個公式,反向計算上一層的誤差值:
如 第 3 層:
代表兩個向量(矩陣)對應值兩兩相乘。
代表激勵函式,通過計算能夠得出
同樣的,我們能夠計算出 第 2 層 ,但是我們並不需要計算 ,因為輸入層是明確的已知值。
如何計算代價函式的導數項
不使用求導的方法,我們能夠通過以下公式得到導數項的最終結果(忽略正則化):
也就是代價函式 對 第 層 第 行 列 的 求偏導 第 層 第 個 神經節點的激勵值 × 第 層 第 個 神經節點的誤差值
由此,我們能夠很快求出 所有引數 的偏導數。
但是
由於每條訓練集資料都不相同,因此針對與每條資料,得到的輸出層結果與期望結果也總是不同的,那麼 雖然每層的引數矩陣 一直不變,但由於每條資料的每層的誤差 各不相同,那麼每條資料的代價函式求導自然得出的值也不相同。
所以我們需要計算出針對於每層 的每條資料的代價偏導 ,然後進行相加,最終得出針對 條資料算出的第 層的總體代價函式偏導值: