吳恩達機器學習筆記(7)——神經網絡的一個學習算法

一、代價函數

首先我們定義:
L = 神經網絡的總層數
​si = 第L層的單元數量(不含偏置單元)
K = 輸出單元/類型的數量
​hΘ(x)k​ = 假設函數中的第k個輸出

因爲邏輯迴歸裏的代價函數爲:
在這裏插入圖片描述

推廣到神經網絡中:
在這裏插入圖片描述




二、代價函數的優化算法——反向傳播算法(backpropagation algorithm)

1、含義
神經網絡的代價函數已經求出來了,那麼現在要進行min J也就是優化算法。這一節的主要目的是計算J的偏導數。
每當模型預測發生錯誤時,就需要調整模型參數,進行提高識別精度,這種情況中最有代表性的就是“誤差反向傳播”
反向傳播算法從直觀上說,就是對每一個節點,我們計算這樣一項:
在這裏插入圖片描述

當得到最後一層的預測誤差後,我們便通過取微分調整,使得上一層的誤差變小。這樣逐層遞推回去,就使得總體的誤差變小了。

2、簡要步驟
首先我們可以得到最後一層的誤差項和激活項的關係:
在這裏插入圖片描述
然後我們可以得到前幾層的誤差項:
在這裏插入圖片描述
PS:因爲第一層沒有誤差,因此第一個誤差項不存在。

3、一般步驟
對於一個給定的訓練集:
在這裏插入圖片描述
結束for循環後:

在這裏插入圖片描述

公式推導可以點這裏




三、理解反向傳播

反向傳播和前向傳播的過程其實極爲類似,只是計算方向不一樣而已,都是權重乘以單元值。

前向傳播:
在這裏插入圖片描述

反向傳播:
在這裏插入圖片描述

PS:一些編程小技巧:矩陣和向量的轉換:octave中使用reshape命令。




四、梯度檢測(gradient checking)

1、目的:
反向傳播算法有許多細節,實現起來比較困難,而且有一個不好的特性,就是容易產生bug。有時候神經網絡可能在迭代過程中確實得到了很好的結果,但是有bug的情況下會比無bug高出一個量級。梯度檢測就是專門解決這種bug的存在的。它將完全保證你的前向傳播和反向傳播是百分百正確。

2、數學方法
使用雙側差分算法:
在這裏插入圖片描述

3、僞代碼:
在這裏插入圖片描述
在這裏插入圖片描述
一般的,epsolon被設置爲10-4.

PS:注意!一旦使用梯度檢測算法驗證正確,就要關閉,不然會導致神經網絡算法的速度減慢。




五、隨機初始化(random initialization)

在神經網絡開始梯度下降之前,我們都要Θ設置一個初始值。如果都設置爲0,就會出現對稱問題(symmetry breaking),即所有的單元值相等。
隨機初始化就是解決這種問題的方法。

具體做法:
在這裏插入圖片描述




六、總體回顧

總而言之,訓練一個神經網絡的方法:首先要將權重隨機初始化爲一個接近0的數,然後進行反向傳播,再進行梯度檢驗,最後使用梯度下降或者其他高級優化算法來最小化代價函數J。
具體步驟如下:
1、選擇一種網絡構架:
輸入單元是由特徵數目決定的。
輸出單元是由所要區分的類別個數確定
隱藏層單元個數與數目:只使用單個隱藏層,如果隱藏層大於1 ,那麼默認每一
個隱藏層都有相同數目的單元數(單元數越多越
好)。
2、訓練一個神經網絡:
(1)隨機初始化權重
for循環:
(2)前向傳播,得到h值
(3)計算代價函數J
(4)反向傳播,得到偏導值
結束循環
(5)梯度檢測
(6)停用梯度檢測,梯度下降法計算J的最小值

PS第四次作業:1.求代價函數時,是X和對應的Y相乘,也就是對應元素相乘。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章