|
|
||
|---|---|---|
| .. | ||
| lab | ||
| OwnFramework.ipynb | ||
| README.md | ||
README.md
神經網路簡介:多層感知器
在上一節中,你學習了最簡單的神經網路模型——單層感知器,一種線性二分類模型。
在本節中,我們將擴展這個模型,構建一個更靈活的框架,使我們能夠:
- 除了二分類之外,還能執行多分類
- 除了分類問題之外,還能解決迴歸問題
- 區分那些無法線性分離的類別
我們還將在 Python 中開發自己的模組化框架,讓我們能夠構建不同的神經網路架構。
課前測驗
機器學習的形式化
讓我們從形式化機器學習問題開始。假設我們有一個訓練數據集 X 和標籤 Y,我們需要構建一個模型 f,以便做出最準確的預測。預測的質量由損失函數 ℒ 來衡量。以下是常用的損失函數:
- 對於迴歸問題,當我們需要預測一個數值時,可以使用絕對誤差 ∑i|f(x(i))-y(i)|,或平方誤差 ∑i(f(x(i))-y(i))2
- 對於分類問題,我們使用0-1損失(本質上與模型的準確率相同),或者邏輯損失。
對於單層感知器,函數 f 被定義為線性函數 f(x)=wx+b(其中 w 是權重矩陣,x 是輸入特徵向量,b 是偏置向量)。對於不同的神經網路架構,這個函數可以採用更複雜的形式。
在分類問題中,通常希望將網路輸出轉換為對應類別的概率。為了將任意數字轉換為概率(例如對輸出進行正規化),我們通常使用softmax函數 σ,這樣函數 f 就變為 f(x)=σ(wx+b)
在上述 f 的定義中,w 和 b 被稱為參數 θ=⟨w,b⟩。給定數據集 ⟨X,Y⟩,我們可以將整個數據集上的總誤差表示為參數 θ 的函數。
✅ 神經網路訓練的目標是通過調整參數 θ 來最小化誤差
梯度下降優化
梯度下降是一種著名的函數優化方法。其核心思想是,我們可以計算損失函數相對於參數的導數(在多維情況下稱為梯度),並調整參數以減少誤差。這可以形式化為以下步驟:
- 用隨機值初始化參數 w(0), b(0)
- 重複以下步驟多次:
- w(i+1) = w(i)-η∂ℒ/∂w
- b(i+1) = b(i)-η∂ℒ/∂b
在訓練過程中,優化步驟應基於整個數據集計算(記住損失是通過所有訓練樣本的總和計算的)。然而,在實際操作中,我們通常取數據集的小部分,稱為小批量(minibatches),並基於數據子集計算梯度。由於每次隨機選取子集,這種方法被稱為隨機梯度下降(SGD)。
多層感知器與反向傳播
如上所述,單層網路能夠分類線性可分的類別。為了構建更豐富的模型,我們可以將多層網路結合起來。數學上,這意味著函數 f 將具有更複雜的形式,並通過以下多個步驟計算:
- z1=w1x+b1
- z2=w2α(z1)+b2
- f = σ(z2)
這裡,α 是非線性激活函數,σ 是 softmax 函數,參數 θ=<w1,b1,w2,b2>。
梯度下降算法保持不變,但計算梯度會更加困難。根據鏈式法則,我們可以計算導數如下:
- ∂ℒ/∂w2 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂w2)
- ∂ℒ/∂w1 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂α)(∂α/∂z1)(∂z1/∂w1)
✅ 鏈式法則用於計算損失函數相對於參數的導數。
注意,所有這些表達式的最左部分是相同的,因此我們可以從損失函數開始,沿著計算圖“向後”計算導數。因此,多層感知器的訓練方法被稱為反向傳播(backpropagation),簡稱“backprop”。
TODO: 圖片來源
✅ 我們將在筆記本範例中更詳細地介紹反向傳播。
結論
在本課中,我們構建了自己的神經網路庫,並將其用於一個簡單的二維分類任務。
🚀 挑戰
在隨附的筆記本中,你將實現自己的框架來構建和訓練多層感知器。你將能夠詳細了解現代神經網路的運作方式。
請前往 OwnFramework 筆記本並完成相關內容。
課後測驗
複習與自學
反向傳播是人工智慧和機器學習中常用的算法,值得深入研究
作業
在本次實驗中,你需要使用本課中構建的框架來解決 MNIST 手寫數字分類問題。
免責聲明:
本文件使用 AI 翻譯服務 Co-op Translator 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。