Skip to content

用 NumPy 拆開 Neural Network 與 Backpropagation|CMU 10-301 作業 5

2026年8月22日1 分鐘
TL;DRHW5 的價值在於不靠自動微分,親手追蹤 forward shapes、cache 與 backward gradients。

🌏 English version

官方 handout 完整題名是 Homework 5: Neural Networks,屬於 written+programming。Written 以 feed-forward/backpropagation 手算與 empirical questions 為主;程式要用單一 hidden layer、sigmoid 與 softmax 做 OCR 字母分類。ZIP 提供 neuralnet.py starter、small train/validation CSV、tests.py、unit-test data、incorrect finder 與 visualizer;medium/large datasets 與正式 reference solution 不在公開 ZIP。

從計算圖讀程式

為每個 tensor 標 shape,forward 時只存 backward 真正需要的 cache。反向傳播先寫局部導數,再沿圖累積;不要一口氣抄成長公式。batch 維度、bias broadcasting 與 loss normalization 是最常見的靜默錯誤。

第一個可執行動作與完成判準

先在 bundle 的 handout 目錄跑:

python -m unittest tests

再用 small CSV 執行 handout 的 neuralnet.py 介面,做 finite-difference gradient check,最後嘗試 overfit 極小子集。完成判準是公開 unit tests 通過、small data 的每 epoch loss 與 labels/metrics 格式正確、數值梯度吻合;官方明說公開 tests 不完整,因此不能等同 Gradescope 全過。

先在小計算圖追導數

以下是本文自編的教學例子,不是官方作業答案。

自編純量圖:x=2,h=wx,o=vh,loss=0.5(o-y)²;設 w=3、v=0.5、y=1。forward 得 h=6、o=3、loss=2。backward 從 dloss/do=o-y=2 開始,dloss/dv=2h=12,dloss/dw=2vx=2。

檢查與答案: 若只把 x 改成 1,梯度還是同一組嗎?答案不是:h=3、o=1.5,dloss/dv=0.5×3=1.5,dloss/dw=0.5×0.5×1=0.25。這是線性小圖,不取代官方 sigmoid/softmax 網路。

更新紀錄

  • 2026-10-11:補上自編例子、完整計算或推理,以及理解檢查答案。

參考資料