302頁吳恩達Deeplearning.ai課程筆記,詳記基礎知識與作業代碼

  

  吳恩達的 DeepLearning.ai 已經於 1 月 31 日發佈了最後一門課程。近日,來自重慶大學的 Wan Zhen 製作了一份深度學習專項課程筆記,該筆記從神經網絡與深度學習基礎、提升深度神經網絡性能和卷積神經網絡三門課程出發詳細解釋了關鍵概念與作業代碼。本文概括性地介紹了這三課的主要內容,並選擇每個課程主題比較有意思的知識點進行介紹。

  

  資源鏈接:https://pan.baidu.com/s/1oAqpmUe 提取密碼(已失效)

  在這份筆記中,Wan Zhen 不僅介紹了每個課程的關鍵知識點,同時還詳細解釋了各課程的編程作業。在第一門課程《神經網絡與深度學習基礎》中,該課程筆記不僅提供了最基礎的 Python 和 NumPy 操作筆記,同時還從最基礎的 Logistic 迴歸推導到最一般的深度全連接網絡。當然,還介紹了必要的損失函數與反向傳播方法。而在第二門課程中,該筆記詳細記錄了提升深度網絡性能所需要的技巧與基礎,例如初始化、正則化和梯度檢驗等在實踐上大大提升模型性能的方法,以及一般 SGD、動量法和適應性學習率方法等常見的最優化方法。最後,第二門課程重點介紹了 TensorFlow,包括該框架的常用函數和實際構建網絡的過程等。最後一章節主要記錄了卷積神經網絡,包括基本的卷積運算、殘差網絡和目標檢測框架等。

  以下是該課程筆記的簡要框架與一些詳細的知識點。

  1. 神經網絡與深度學習

  這一部分對應的是吳恩達深度學習課程的第一課,主要介紹必要的編程語言和編程工具,並逐步進階介紹線性網絡、非線性網絡、隱藏層網絡到深度網絡的實現方法,細節詳盡,附有完整的代碼。通過這一部分的學習,你將理解神經網絡的結構和數據流(前向傳播和反向傳播),非線性激活函數和隱藏層對學習複雜函數的作用,並知道如何一步步構建完整的(任意結構的、自定義的)神經網絡,體會向量化和模塊化編程思想的妙處。

  1.1 Python 基礎和 Numpy

  本章第一節介紹瞭如何使用 Python 的 Numpy 工具包、iPython Notebook 等基本的編程工具。然後介紹如何用這些工具構建神經網絡,特別是理解神經網絡計算的向量化思想和 Python 廣播的使用。

  1.2 logistic 迴歸

  第 2 節介紹如何構建一個準確率為 70% 的 logistic 迴歸神經網絡分類器(圖像識別網絡)來識別貓,並介紹如何進一步將準確率提高的方法,以及損失函數的偏導數更新參數的過程。其中特別強調了儘量用向量化結構而不要用循環結構,除非有必要(比如 epoch 的迭代就必須使用循環結構)。

  1.2.1 介紹必要的 Python 工具包;1.2.2 介紹數據集的結構;1.2.3 介紹整個學習算法的宏觀架構;1.2.4 介紹構建算法的基本步驟;1.2.5 和 1.2.6 總結前述內容進行代碼實現,並進行了可視化分析;1.2.7 介紹如何用自己的數據集訓練該神經網絡;1.2.8 展示了 logistic 迴歸神經網絡的完整代碼。

  其中 1.2.4 介紹的構建算法的基本步驟為:

  定義模型結構;

  初始化模型參數;

  循環迭代結構:

  計算當前損失函數值(前向傳播)

  計算當前梯度值(反向傳播)

  更新參數(梯度下降)

  通常 1—3 部分是分開構建的,然後整合到一個函數 model() 中。

  1.2.5 對 model() 進行了代碼實現,並畫出了損失函數和梯度的圖像。

  圖 1.2.3:損失函數

  圖 1.2.4:三種不同學習率的學習曲線對比

  1.3 用隱藏層分類平面數據點

  第 3 節介紹如何在神經網絡中添加隱藏層以對平面數據點進行分類,本節將教你理解反向傳播的工作過程、隱藏層對捕捉非線性關係的作用,以及構建輔助函數的方法。

  重點內容包括:用單個隱藏層實現二分類器;使用非線性激活函數;計算交叉熵損失;實現前向和反向傳播。

  1.3.1 介紹必要的工具包;1.3.2 介紹數據集的構成(平面上的紅點和藍點);1.3.3 介紹無隱藏層的 logistic 迴歸對該數據集的分類結果;1.3.4 介紹添加了隱藏層的完整模型的實現過程和對該數據集的分類;1.3.5 展示了完整代碼。

  其中 1.3.3 的分類結果如下圖所示:

  圖 1.3.3:logistic 迴歸

  1.3.4 中使用的神經網絡的架構:

  圖 1.3.4:神經網絡模型

  1.3.4 構建神經網絡的方法和 1.2.4 基本相同,重點強調了如何定義隱藏層結構和非線性激活函數的使用,實現代碼後,得到的運行結果為:

  圖 1.3.6:有隱藏層分類器的決策邊界

  其中,添加了隱藏層之後,必須使用非線性激活函數,因為不使用非線性激活函數的線性層堆疊是無意義的,無法增大模型的複雜度和容量。

  1.4 一步步構建完整的深度神經網絡

  第 4 節介紹深度神經網絡的完整架構,以及如何構建自定義的模型。完成這部分後,你將學會:使用 ReLU 激活函數提升模型的性能、構建更深的模型(隱藏層數大於 1),以及實現易用的神經網絡(模塊化思想)。

  1.4.1 介紹必要的工具包;1.4.2 介紹任務概述;1.4.3 介紹從 2 層網絡到 L 層網絡的初始化過程;1.4.4 介紹前向傳播模塊的構建,從線性前向傳播、線性+非線性激活前向傳播,再到 L 層網絡的前向傳播;1.4.5 介紹損失函數;1.4.6 介紹反向傳播模塊的構建,從線性反向傳播、線性+非線性激活反向傳播,再到 L 層網絡的反向傳播;1.4.7 展示了深度神經網絡的完整代碼。

  圖 1.4.1:任務概述

  圖 1.4.3:前向傳播和反向傳播的線性—ReLU—線性—sigmoid 的過程圖示。上方表示前向傳播,下方表示反向傳播。

  1.5 深度神經網絡的圖像分類應用

  通過前面四節的學習,你已學會如何一步一步構建完整的深度神經網絡。第 5 節介紹如何用深度神經網絡構建貓識別分類器。此前在 logistic 迴歸網絡中,識別準確率只能達到 68%,而在完整的深度網絡中,識別準確率能達到 80%!

  完成本節後,你將學會:用前面介紹的所有輔助函數構建任意結構的神經網絡;試驗不同結構的神經網絡,並進行分析;理解構建輔助函數對構建網絡的好處(對比從零開始)。

  1.5.1 介紹必要的工具包;1.5.2 介紹數據集(貓 vs. 非貓);1.5.3 介紹模型架構,其中分別構建了 2 層和 L 層的神經網絡;1.5.4 介紹 2 層神經網絡的訓練和測試結果;1.5.5 介紹 2 層神經網絡的訓練和測試結果;1.5.6 對結果進行分析;1.5.7 介紹如何用你自己的圖像訓練分類模型;1.5.8 展示了完整代碼。

  其中,2 層神經網絡的運行結果:

  圖 1.5.4:2 層神經網絡的損失函數

  運行結果:

  圖 1.5.5:L 層神經網絡的損失函數

  運行結果:

  通過比較可知,更深的網絡有助於提高識別準確率(0.72 vs. 0.8;2 層 vs. 5 層)。

  1.5.6 簡單總結了影響識別錯誤的因素:

  貓出現在非常規的位置;

  貓的顏色和背景相似;

  非常規的貓毛色和品種;

  拍攝角度;

  照片的亮度;

  貓的佔圖比例太小或太大。

  這些識別錯誤可能跟全連接網絡自身的侷限性有關,包括參數共享、過擬合傾向(參數數量)和層級特徵方面,而這些問題將在卷積神經網絡裡得到改善。

《更多精彩内容,按讚追蹤Gooread·精選!》
喜歡這篇文章嗎?立刻分享出去讓更多人知道~

    相關閱讀


您可能感興趣