AI002

應用深度學習於 PyTorch(從零到精通)

本課程提供使用 PyTorch 的深度學習全面入門,PyTorch 是機器學習研究中最受歡迎的框架。從張量基礎開始,學生將逐步掌握完整的機器學習工作流程、電腦視覺、模組化軟體工程、遷移學習以及模型部署。課程採「以程式為先」的教學方式,強調實作與實驗。

5.0 評分
512 學生

課程總覽

📚 內容摘要

本課程提供使用 PyTorch 進行深度學習的全面入門,PyTorch 是目前機器學習研究中最受歡迎的框架。從張量基礎開始,學生將逐步掌握完整的機器學習工作流程、電腦視覺、模組化軟體工程、遷移學習以及模型部署。課程採「以代碼為先」的教學方式,強調實作與實驗,確保學生不僅理解理論,還能建立、優化並部署穩健的深度學習系統。

核心目標簡述:熟練掌握整個 PyTorch 生態系統,從基礎數學出發,最終實現可投入生產的電腦視覺應用。

🎯 學習目標

  1. 從基礎的張量操作到模型訓練、評估與儲存,完整實現 PyTorch 機器學習工作流程。
  2. 設計並部署深度學習架構,包括人工神經網絡(ANN)與卷積神經網絡(CNN),用於複雜分類與電腦視覺任務。
  3. 透過採用標準化的工程實務與目錄結構,將實驗性程式碼轉換為可投入生產、模組化的軟體。
  4. 使用進階技術如遷移學習與系統性的實驗追蹤(TensorBoard),在自訂資料集上取得最尖端的成果。
  5. 處理並部署訓練完成的模型至互動式網頁應用程式,並利用現代 PyTorch 2.0 特性加速推理效能。

🔹 第一課:PyTorch 基礎

概述: 本基礎課程介紹 PyTorch 及其核心資料結構——張量。我們將從解釋為何 PyTorch 是現代深度學習研究的首選框架開始,特別強調其動態計算圖的優勢。技術核心在於掌握張量的操作技巧。學生將學習如何以多種方法(例如 torch.zeros()torch.rand())初始化張量——從 0D 的純量到高維矩陣。關鍵運算將包括元素級算術運算(加法、乘法),以及專門的線性代數運算,如矩陣乘法(torch.matmul)。我們也會探討結構管理技術,例如索引、切片、重塑(.view().reshape())及去除冗餘維度(.squeeze())。最後,我們將介紹利用不同裝置(CPU 與 GPU)的關鍵概念,透過 .to() 方法,為後續課程中的加速運算做好準備。

學習成果:

  • 解釋張量在深度學習與 PyTorch 中作為基本資料結構的角色。
  • 使用內建方法建立並初始化各種維度的 PyTorch 張量(純量、向量、矩陣)。
  • 執行標準的張量算術運算,以及矩陣乘法等特殊運算。
  • 使用索引、切片、重塑與壓縮技術來操控張量結構。
  • 高效地在 CPU 與 GPU 裝置之間移動張量,以加速運算。

🔹 第二課:PyTorch 工作流程

概述: 本課程建立可重複使用的基礎 PyTorch 工作流程,透過從零開始實作一個簡單的線性迴歸模型。我們從資料準備開始,重點在生成合成資料並分割成訓練與測試集,強調資料類型與裝置對齊(CPU/GPU)的重要性。接著,我們正確繼承 torch.nn.Module 來定義模型架構,並實作 forward() 步驟。工作流程的核心在於選擇合適的損失函數(如針對迴歸的 nn.L1Loss)與優化器(隨機梯度下降或 SGD)。接下來,我們將仔細建構訓練迴圈(前向傳播、損失計算、梯度歸零、反向傳播、優化器步進)與測試/評估迴圈,以衡量性能。最後,我們學習使用 torch.save() 儲存訓練完成的模型狀態字典,並在需要時重新載入以進行推論或重用,完整完成端到端的機器學習週期。

學習成果:

  • 結構化並實作 PyTorch 端到端機器學習工作流程的六個基礎步驟。
  • 透過正確定義繼承自 torch.nn.Module 的類別,建立簡單的線性模型。
  • 對基本迴歸任務應用合適的損失函數(nn.L1Loss)與優化器(torch.optim.SGD)。
  • 定義並執行訓練迴圈,包含反向傳播與梯度下降,以及獨立的評估迴圈。
  • 使用 PyTorch 工具實作儲存與載入模型狀態字典的功能,以達成模型持久化。

🔹 第三課:神經網絡分類

概述: 本課程將 PyTorch 工作流程應用於解決非線性分類問題,超越單純的線性迴歸。我們首先區分二元與多類別情境,並示範如何使用 Sigmoid(二元)與 Softmax(多類別)激活函數來設定輸出層。關鍵概念「非線性」透過在隱藏層中整合 ReLU 激活函數引入,使網路能夠學習複雜的決策邊界。學生將實作適用於分類任務的正確損失函數:BCEWithLogitsLossCrossEntropyLoss。實務部分包含在複雜的合成資料集(例如「moons」資料集)上生成並訓練神經網絡,並以視覺化方式繪製結果決策表面,確認網路有效分離非線性資料點的能力,確保掌握基礎深度學習模型架構的精髓。

學習成果:

  • 区分並實作適用於二元與多類別分類任務的 PyTorch 模型。
  • 解釋非線性激活函數(ReLU、Sigmoid、Softmax)對於實現複雜決策邊界的必要性。
  • 應用適當的損失函數(BCEWithLogitsLossCrossEntropyLoss)並計算分類準確率指標。
  • 在非線性資料集上完整實作 PyTorch 分類工作流程。
  • 可視化模型所學得的決策邊界,並解讀其分類資料點的能力。

🔹 第四課:以 CNN 進行電腦視覺

概述: 本課程標誌著從處理結構化資料過渡到處理高維影像資料的關鍵轉折,需要專門的深度學習架構。我們將從釐清影像如何表示為多維度的 PyTorch 張量開始,聚焦於標準形狀符號(N, C, H, W:批次大小、通道數、高度、寬度)。理論核心介紹卷積神經網絡(CNN),說明卷積層(nn.Conv2d)如何高效提取局部空間特徵,以及池化層(nn.MaxPool2d)如何降低維度同時保留重要資訊。透過以代碼為先的方法,我們將從零開始建構並訓練一個完整的、小型的 CNN 架構——類似 TinyVGG 的模型,提供一個功能型電腦視覺模型的實際範例。最後,我們比較此 CNN 架構與先前使用的線性網路之間的根本差異,深化對為什麼 CNN 在影像模式識別上表現卓越的理解。

學習成果:

  • 解釋並運用 (N, C, H, W) 張量格式來在 PyTorch 中表示影像資料。
  • 在 PyTorch 模型中實作卷積層(nn.Conv2d)與池化層(nn.MaxPool2d)。
  • 建構並訓練一個完整的、小型的 CNN 架構(類似 TinyVGG 模型),用於分類任務。
  • 阐明線性層與 CNN 之間在特徵萃取與權重共享能力上的根本差異。

🔹 第五課:自訂資料集

概述: 本關鍵課程彌補了結構化玩具範例(如 MNIST)與複雜、非結構化的現實世界影像資料之間的差距,為實務上的「FoodVision」電腦視覺專案奠定基礎。我們將從學習如何正確組織資料目錄以供 PyTorch 使用開始,利用效率極高的 torchvision.datasets.ImageFolder 類別自動從檔案路徑載入資料並推斷標籤。關鍵在於掌握自訂 torch.utils.data.Dataset 類別的概念,該類別賦予完全控制資料載入邏輯、預處理與標籤處理的能力,適用於任意資料格式。接著,我們引入 DataLoader 來管理高效的資料批次、打亂與多執行緒載入。最後,課程涵蓋重要的資料增強技術與 PyTorch Transforms,這些對於擴展有限資料集的有效規模,並提升模型的泛化能力與魯棒性至關重要。

學習成果:

  • 將現實世界的影像資料整理成 PyTorch 工具預期的目錄格式。
  • 使用 torchvision.datasets.ImageFolder 從磁碟高效載入自訂影像資料集。
  • 實作自訂的 torch.utils.data.Dataset 類別,以處理獨特或複雜的資料載入需求。
  • 應用一系列 torchvision.transforms 進行預處理(調整大小、轉換為張量)與資料增強(旋轉、翻轉)。
  • DatasetDataLoader 整合,以處理批次、打亂與最佳化的平行資料載入。

🔹 第六課:模組化設計(軟體工程)

概述: 本課程對於將實驗性的 Jupyter Notebook 程式碼轉換為可持續、可投入生產的軟體工程實務至關重要。我們將介紹將單一筆記本程式碼重構為結構化、可重用 Python 檔案的必要步驟。核心概念在於建立標準化的 PyTorch 項目結構,將關注點分離至專門模組。需建立的關鍵模組包括:data_setup.py(負責資料載入、轉換與 DataLoader)、model_builder.py(包含繼承自 nn.Module 的模型定義),以及 engine.py(管理訓練與測試迴圈)。最後,學生將學習如何直接從命令列使用標準 Python 執行方式,初始化並執行完整的訓練流程——包括定義超參數與裝置選擇——這對於部署與大規模實驗至關重要。

學習成果:

  • 解釋實驗性筆記本程式碼與結構化、模組化 Python 檔案架構之間的差異。
  • 實作為可擴展與協作設計的標準 PyTorch 項目目錄結構。
  • 將現有的模型訓練邏輯重構為獨立且可重用的模組(例如 data_setup.pymodel_builder.pyengine.py)。
  • 建立主執行檔,以命令列方式執行完整的訓練程序。
  • 描述模組化程式碼在測試、版本控制與生產部署就緒方面的實際優勢。

🔹 第七課:遷移學習

概述: 遷移學習是一種強大的技術,讓我們能利用在大型資料集(如 ImageNet)上訓練的模型所獲得的知識,並有效地應用於較小、專門化的問題。本課程介紹核心理論,強調為何預訓練權重(特別是來自 ResNet 或 EfficientNet 等模型,透過 torchvision.models)對於在減少資料與計算時間的情況下取得頂尖成果至關重要。實務實作聚焦於「特徵提取」:學生將學習如何載入模型,使用 PyTorch 的 requires_grad=False 冷凍其卷積基底層的參數,然後策略性地僅替換並訓練針對新目標領域(例如持續進行的「FoodVision」專案)的最終分類頭。我們也會將此方法與更耗資源的「微調」整個網路的方法做對比。

學習成果:

  • 解釋遷移學習的理論優勢及其常見應用情境。
  • 使用 PyTorch torchvision.models 工具載入並檢視常見的預訓練模型架構。
  • 透過成功冷凍基底卷積層的參數,實作特徵提取。
  • 修改預訓練模型的分類器頭,使其能處理新的自訂分類任務。
  • 辨別特徵提取(冷凍)與微調(解凍)策略之間的差異。

🔹 第八課:實驗追蹤(里程碑專案 1)

概述: 隨著我們從訓練單一模型進展到進行複雜比較(例如比較傳統 CNN 與遷移學習模型),手動記錄已不再足夠。本課程建立系統性實驗追蹤的關鍵實務。我們將介紹並實作 PyTorch 原生方案 torch.utils.tensorboard.SummaryWriter,用於記錄與管理性能資料。學生將學習如何在訓練迴圈中加入儀器,以記錄關鍵的標量指標,例如每階段的訓練與測試損失、準確率與學習率。主要目標是掌握啟動與使用 TensorBoard 界面,以視覺化方式並排比較多項執行結果,從而客觀分析超參數變更、架構決策與優化策略的影響,確保可重現性並加速模型改進。

學習成果:

  • 解釋系統性實驗追蹤對於確保深度學習可重現性與效率的必要性。
  • 在 PyTorch 訓練迴圈中實作 torch.utils.tensorboard.SummaryWriter 類別,以記錄標量指標(損失、準確率)。
  • 啟動並導航 TensorBoard 界面,以視覺化指標曲線並比較不同實驗執行的表現。
  • 應用追蹤技術,系統性比較不同超參數設定(例如批次大小、學習率)與模型架構的影響。

🔹 第九課:論文複製(里程碑專案 2)

概述: 本課程是課程的巔峰,挑戰學生將理論上的深度學習研究轉化為功能性程式碼,透過複製科學論文中的一個現代架構。我們將從解析典型 ML 論文的結構開始,特別聚焦於如何從方法論部分提取架構細節與數學公式。核心技術任務在於將複雜的數學方程式——如注意力機制或新型層型的規則——直接映射為 PyTorch 模組,使用自訂的 nn.Module 類別。以現代範例(如視覺變壓器 ViT)為案例進行實作。重點放在複雜、多元件模型所需的系統性除錯策略,解決如形狀相容性、權重初始化與梯度流驗證等挑戰,確保學生能成功從零實作尖端模型。

學習成果:

  • 解構並分析機器學習研究論文中呈現的架構描述與數學符號。
  • 將複雜的演算法步驟與公式(例如自我注意機制)直接轉譯為符合慣例的 PyTorch 程式碼,使用自訂 nn.Module 類別。
  • 完整從零實作並整合現代、複雜深度學習架構(例如視覺變壓器)所需的所有組件。
  • 應用進階除錯策略,解決複製頂尖模型時遇到的形狀錯誤、裝置不匹配與邏輯缺陷。

🔹 第十課:模型部署與 PyTorch 2.0

概述: 本最後一課專注於將訓練完成的 PyTorch 模型從研究環境轉換為公開可存取、互動式的網頁應用。我們將從學習準備模型以供部署的關鍵步驟開始,重點在於生產環境下的高效載入與推論。核心實作活動涉及使用快速原型工具(如 Gradio 或 Streamlit)建立功能性的網頁示範,讓終端使用者可以輸入資料並立即獲得預測結果。我們將涵蓋這些應用程式的實際部署策略,利用 Hugging Face Spaces 等平台。最後,我們將花時間探索框架的未來發展,特別是 PyTorch 2.0 引入的效能提升與編譯功能,展示像 'torch.compile' 這樣的創新如何為訓練與部署帶來顯著的加速。

學習成果:

  • 準備訓練完成的 PyTorch 模型檔案,以實現生產環境下的高效載入與推論。
  • 利用 Gradio 或 Streamlit 建立功能性的互動式網頁示範介面。
  • 將開發完成的機器學習應用程式上傳至公開平台(例如 Hugging Face Spaces)。
  • 解釋 PyTorch 2.0 'torch.compile' 功能的核心概念與運作機制。
  • 將部署知識與先前的模組化程式碼實務結合,創造最終的端到端專案。