本文是吳恩達《機器學習》影片筆記第57篇,對應第5周第7個影片。
“Neural Networks Learning:——Putting it together”
前面幾個小節都講了神經網路的一些東東,因為神經網路在機器學習中的地位實在是太重要了,所以需要單獨一節把前面學到的事總結一下。
確定神經網路的結構神經網路的結構呢,無非就是輸入層、輸出層外加隱藏層,那隱藏層有幾層?每一層有多少個神經元?輸入層、輸出層分別又有多少個單元?
那這些多少,到底該是多少呢?在進行神經網路訓練之前必須回答這些問題。
首先,輸入層的單元數是由你的自變數的維度決定的;
其次,輸出層的單元數又是由要分類的問題最終分成多少個類來決定的。
因此,神經網路結構的選擇問題,實質上就是要確定隱藏層的層數以及各隱藏層的單元數目。
以3個輸入單元、4個輸出單元的神經網路為例,常見的隱藏層的設定如下圖所示。
按分類的效果來說呢,隱藏層的單元數是越多越好的,但是過多的神經元會讓訓練相當的緩慢,因此需要平衡一下,一般將隱藏層的單元數設定為輸入層單元數的2~4倍為宜。而隱藏層的層數呢就以1、2、3層比較常見。
神經網路訓練的一般步驟Step1:隨機初始化權重;
Step2:實現前向傳播演算法,拿到各個輸入的啟用函式;
Step3:編碼計算代價函式;
Step4:實現反向傳播計算啟用函式的偏導數。
看一下虛擬碼:
程式碼中的m是訓練樣本的個數。
Step5:使用梯度檢驗驗證反向傳播計算偏導數的程式碼是否正確,如果正確就關閉掉梯度檢驗部分的程式碼。
Step6:結合一些更優秀的演算法算出能使代價函式最小的那些引數。