1. 程式人生 > >極簡機器學習課程:使用Python構建和訓練一個完整的人工神經網

極簡機器學習課程:使用Python構建和訓練一個完整的人工神經網

直接閱讀技術類的教材是困難的,理論的密集程度常常令人生畏,而Welch Labs的視訊用有趣的短片形式,以達到教學的目的,並結合相關資源介紹技術背景,使你能熟練掌握主題。


而本文介紹的系列,將帶領大家使用Python構建和訓練一個完整的人工神經網路。

1.資料+架構

要想使用一種機器學習的方法,我們首先需要資料。獲取到資料後,我們會使用程式語言Python,在二維numpy庫裡儲存資料。資料準備好後,就可以用它訓練一個模型了。機器學習中有大量的模型,本文訓練的是當前特別火的人工神經網路。
Ps:把資料放進模型之前,我們需要考慮資料單位間的差異。
 




2.正向傳播
上一節我們建立了神經網路,這次我們將用Python程式語言來實現它。
對深度學習模型按照輸入層、靠近輸入層的隱含層、靠近輸出層的隱含層和輸出層的次序,依次計算並存儲模型的中間變數叫做正向傳播(forward-propagation)。在本節中,我們介紹如何使用Python實現正向傳播。




3.梯度下降
本節重點放在如何改進神經網路,使預測更準確。

梯度下降法,是當今最流行的優化(optimization)演算法,亦是至今最常用的優化神經網路的方法。本視訊通過舉例,介紹了梯度下降是如何優化神經網路的。




4.反向傳播
反向傳播(back-propagation)是計算深度學習模型引數梯度的方法。總的來說,反向傳播中會依據微積分中的鏈式法則,按照輸出層、靠近輸出層的隱含層、靠近輸入層的隱含層和輸入層的次序,依次計算並存儲模型損失函式的得分與引數梯度。

反向傳播可能比較簡單,但不會太簡單。反向傳播中的錯誤是讓神經網路學習的關鍵。在這個視訊中,用高中數學水平淺顯易懂地介紹了反向傳播背後的推導和思考過程。




5.數值梯度檢查
當構建複雜的系統,如神經網路時,檢查部分工作可以避免以後許多問題。在這裡,我們將藉助對導數的簡單理解和一些小技巧來檢查梯度計算部分。
如果程式碼通過了這個測試,那可以確信,我們已經正確地計算和編碼了梯度。


6.訓練
經過以上工作,現在是時候訓練神經網路了。我們將使用BFGS數值優化演算法並檢視結果。




7.過擬合,測試和正則化
我們已經建立並訓練了神經網路,但是在開香檳慶祝之前,還要保證我們的模型適用於現實世界。
實踐中,如果測試資料集是給定的,我們通常用機器學習模型,在該測試資料集上的誤差來表示泛化誤差。基於上述重要結論,以下兩種擬合問題值得注意:

  • 欠擬合:機器學習模型無法得到較低訓練誤差。
  • 過擬合:機器學習模型的訓練誤差遠小於其在測試資料集上的誤差。


我們要儘可能同時避免欠擬合和過擬合的出現。可以使用正則化來應對過擬合問題。

推薦下我自己建立的Python學習交流群935711829,這是Python學習交流的地方,不管你是小白還是大牛,小編都歡迎,不定期分享乾貨,包括我整理的一份適合零基礎學習Python的資料和入門教程。