Skip to content

CS336 自學筆記 Week 1:Micrograd 深度拆解

當我們把「可怕的術語」翻譯成「12 歲也懂的白話文」,一切就不一樣了。

作者:Ray
日期:2025 年 12 月


前言:這週我學了什麼?

按照先修攻略的規劃,Week 1-2 要跟著 Karpathy 的 micrograd 影片 學習自動微分。

但在動手寫程式之前,我發現自己對很多「基礎概念」其實一知半解。這篇文章記錄了我在學習過程中問自己的問題,以及我找到的答案。

我的學習原則:如果不能用 12 歲小朋友聽得懂的話解釋,代表我自己也沒真正理解。


Part 1:Micrograd 是什麼?

🔬 名字拆解

Micro + grad = Micrograd

部分意思
Micro微小的——整個專案只有約 150 行程式碼
gradGradient(梯度)的縮寫——這是整個專案的核心功能

所以 Micrograd = 微型的梯度計算引擎

它想表達的是:「這是一個超級小、但能真正計算梯度的引擎」。

這個專案在做什麼?

Micrograd 實現了兩件事:

  1. 自動微分引擎(約 100 行):讓電腦自動計算梯度
  2. 神經網路模組(約 50 行):用這個引擎建構神經網路

相比之下,PyTorch 有幾十萬行程式碼。Micrograd 就像把大象縮小成螞蟻,但螞蟻還是會走路!

命名傳統

在深度學習領域,很多框架都用類似的命名:

名稱意思
AutogradPyTorch 的自動微分模組
Micrograd超迷你版的 autograd
Tinygrad另一個小型框架(比 micrograd 大一些)

Part 2:核心概念的白話解釋

學習 micrograd 之前,需要理解幾個核心概念。以下是我整理的「12 歲版」解釋。

🧠 神經網路 (Neural Network)

想像一下你的大腦 🧠

你的大腦裡有很多「神經元」,它們彼此連接。當你學習新東西時,這些連接會變強或變弱。

神經網路就是模仿大腦的電腦程式

  • 有很多小「節點」(像神經元)
  • 節點之間有「連線」(像神經連接)
  • 學習時,連線的「強度」會調整

例子:教電腦分辨貓和狗

  1. 給電腦看很多貓狗照片
  2. 電腦猜錯時,調整連線強度
  3. 猜對越來越多,就學會了!

📈 前向傳播 vs 反向傳播

這是神經網路的「去程」和「回程」。

前向傳播 (Forward Pass):計算的「去程」

想像你在算一道數學題:

a = 2
b = 3
c = a + b      → c = 5
d = c × 2      → d = 10

你從最開始的數字(a、b),一步一步算到最後的答案(d)。資料往前流動

反向傳播 (Backpropagation):計算的「回程」

想像你考試考了 60 分,想知道「哪裡錯了」:

  • 你往回檢查每一題
  • 找出哪些地方需要改進

反向傳播就是這樣:

  1. 電腦算出一個答案
  2. 發現答案不對(有「誤差」)
  3. 往回追查:是哪些數字、哪些連線造成的?
  4. 找出每個部分的「責任」有多大

🎯 梯度 (Gradient)

梯度就是告訴我們**「要怎麼調整才會變好」**的指引。

想像你在爬山,但你閉著眼睛:

  • 梯度就像告訴你「往左走會上坡,往右走會下坡」
  • 如果你想下山(減少誤差),就往梯度說的方向走

數學上:梯度告訴我們「如果我把這個數字調大一點點,最終答案會變大還是變小?變多少?」


🌳 計算圖 / DAG

DAG 是「有向無環圖」(Directed Acyclic Graph),聽起來很複雜,其實很簡單。

想像一個家族樹 🌳:

  • 爺爺奶奶 → 爸爸媽媽 → 你
  • 有方向(從上到下)
  • 不會繞圈(你不會是自己的祖先)

計算圖就是把數學計算畫成這樣的樹:

    a        b
     \      /
      \    /
        +        ← 加法節點
        |
        c
        |
        ×        ← 乘法節點(c × 2)
        |
        d

這樣電腦就知道「d 是怎麼從 a、b 一步步算出來的」,反向傳播時就能順著這棵樹往回走。


🔌 ReLU 激活函數

ReLU 是神經網路裡最常用的「開關」。

規則超級簡單:

  • 如果數字 > 0,就保持原樣
  • 如果數字 ≤ 0,就變成 0
ReLU(5)  = 5
ReLU(-3) = 0
ReLU(0)  = 0

為什麼需要它?

如果神經網路只有加法和乘法,它只能學「直線」的關係。有了 ReLU 這種「非線性」的東西,神經網路才能學會複雜的「彎彎曲曲」的關係!


Part 3:微積分不可怕

學 micrograd 一定會碰到微積分。很多人聽到就害怕,但其實核心概念很直覺。

微積分在解決什麼問題?

只有兩個:

  1. 東西變化的速度有多快? (微分)
  2. 把很多小東西加起來是多少? (積分)

就這樣!

🚗 微分:用汽車來理解

想像你坐在車上,看著儀表板:

  • 里程表:顯示你「總共走了多遠」(例如:50 公里)
  • 時速表:顯示你「現在有多快」(例如:60 公里/小時)

這兩個數字有什麼關係?

時速就是「距離變化的速度」

微分就是:已知「總量」,求出「變化速度」

數學說法白話文
對位置微分求速度(位置變化多快)
對速度微分求加速度(速度變化多快)

🍕 積分:用披薩來理解

想像你要算一個奇形怪狀的披薩面積。正方形、三角形有公式,但怪形狀怎麼辦?

積分的方法:切成很多小塊!

把它切成很多很多細長條,每個長條近似長方形,長方形面積很好算,然後把所有長條的面積加起來

切越細 → 越準確。切到無限細 → 完美準確!

這就是積分:把無限多的小東西加起來

🔄 微分和積分是相反的!

這是微積分最美妙的發現:

        微分
    ──────────→
距離              速度
    ←──────────
        積分

它們互為逆運算,就像加法和減法一樣!

這跟 Micrograd 有什麼關係?

在訓練神經網路時:

  1. 我們有一個「損失函數」:衡量 AI 的答案有多錯
  2. 我們想找出「怎麼調整權重才能減少錯誤」
  3. 這就需要微分! 對損失函數微分(求梯度),梯度告訴我們怎麼調整
  4. Micrograd 的 backward() 就是在自動做微分

Part 4:為什麼數學術語這麼難懂?

學習過程中,我一直有個疑問:為什麼這些術語這麼不直覺?

「微積分」這三個字

其實是兩個詞組合:微分 + 積分

意思
微分微小的分割(把變化切成極小來分析)
積分累積的份量(把微小的部分加起來)

英文 Calculus 來自拉丁文,意思是「小石頭」——古羅馬人用小石頭來算數。

數學命名的荒謬案例

術語問題
虛數 (Imaginary)叫「虛」是因為當年數學家覺得「不可能存在」。但它在物理學、工程學超級有用,一點都不「虛」!
無理數 (Irrational)原意是「不理性的、瘋狂的」。古希臘人發現 √2 無法寫成分數,嚇壞了。但 π 超級有用,哪裡「瘋狂」?
負數 (Negative)Negative 有「負面」的意思,但 -10°C 只是方向相反,沒有什麼「不好」。

為什麼不改掉?

  1. 慣性太強:幾百年的教科書都用這些詞
  2. 國際溝通:全世界用同樣術語,改了會混亂
  3. 數學家不在乎:「定義清楚就好,名字只是標籤」

我的結論

數學術語「定義精準」,但「命名不精準」

術語只是標籤,重要的是背後的概念。不管叫「微分」還是「求變化速度」,本質都是「某個東西變化有多快」。

給初學者的建議

  1. 不要被術語嚇到——很多嚇人的名字背後是簡單的概念
  2. 先理解概念,再記術語
  3. 在腦中建立「白話翻譯」
  4. 不要以為聽不懂是自己笨——有時候真的是命名的問題!

Part 5:Micrograd 程式結構

engine.py — 核心引擎

主要是一個叫 Value 的類別:

python
a = Value(2.0)    # 創造一個「有記憶的數字」
b = Value(3.0)
c = a + b          # c 會記得它是 a + b 來的

每個 Value 包含:

屬性功能
data實際的數字值
grad這個數字的梯度
_backward如何往回傳梯度
_prev記得自己是從哪些數字算出來的

nn.py — 神經網路模組

類別功能
Neuron一個神經元
Layer一層(很多神經元)
MLP多層神經網路

Part 6:本週總結

概念對照表

專有名詞12 歲版解釋
神經網路模仿大腦的電腦程式,會學習
純量一個單獨的數字
前向傳播從輸入算到輸出
反向傳播從輸出往回找,看誰要負責
梯度告訴你「往哪調整會變好」的箭頭
自動微分電腦自動幫你算梯度
計算圖把計算過程畫成家族樹
損失函數衡量「錯多少」的分數
ReLU負數變 0,正數不變的開關
MLP好幾層神經元疊在一起
權重連線的強度
微分求變化速度
積分把小東西累加起來

本週心得

  1. 先理解「為什麼」比「怎麼做」更重要:知道梯度的意義,比死背公式有用
  2. 術語是障礙,但可以克服:翻譯成白話文,一切就清楚了
  3. Micrograd 的精髓是簡單:150 行程式包含 AI 學習的所有核心概念

下週預告

Week 2 會繼續深入 micrograd,實際動手寫程式碼,實作:

  • Chain rule 的程式碼實現
  • 完整的反向傳播流程
  • 簡單的神經網路訓練

延伸資源

本週使用的資源

如果你卡住了


下一篇:Week 2 - Micrograd 實作篇

如果這篇文章對你有幫助,歡迎分享給同樣在自學 LLM 的朋友!

MIT Licensed