Skip to content

概念卡片 — micrograd

每一張卡片是一個獨立概念,利於 Obsidian 鏈結與圖譜檢視。


卡片 1:Value

  • 定義:封裝一個標量值與其梯度的基礎類別
  • 位置engine.py
  • 關鍵屬性data, grad, _prev, _backward, _op
  • 數學意義:計算圖中的一個節點

卡片 2:計算圖(Computational Graph)

  • 定義:有向無環圖(DAG),節點是運算/值,邊是資料流
  • micrograd 實作:透過 Value._prev(set of parent nodes)
  • 用途:記錄運算歷史,供反向傳播使用

卡片 3:拓撲排序(Topological Sort)

  • 定義:DAG 中節點的線性排列,保證所有邊從前往後
  • micrograd 實作:DFS 後序遍歷(build_topo
  • 用途:確保反向傳播時子節點先於父節點被處理

卡片 4:反向傳播(Backpropagation)

  • 定義:從輸出到輸入依鏈鎖律計算梯度
  • micrograd 流程
    1. 拓撲排序
    2. 根節點 grad = 1
    3. 逆序呼叫 _backward()
  • 關鍵:梯度是多路累加的(+=

卡片 5:鏈鎖律(Chain Rule)

  • 數學形式∂L/∂x = ∂L/∂z · ∂z/∂x
  • 在 micrograd 中:每個運算的 _backward() 實作了局部鏈鎖律
  • 範例
    • 加法:梯度直接傳遞(∂z/∂x = 1
    • 乘法:交叉相乘(∂(xy)/∂x = y

卡片 6:閉包(Closure)

  • 定義:捕獲外部變數的函式
  • micrograd 使用:每個運算的 _backward 捕獲了 selfotherout.grad
  • 優勢:不需要為每種運算建立一個類別

卡片 7:Neuron(神經元)

  • 計算act = w·x + b,可選 ReLU
  • 參數:權重 w(list of Value)+ 偏置 b(Value)
  • 初始化:權重 ~U(-1,1),偏置 0

卡片 8:MLP(多層感知機)

  • 結構:多個 Layer 串接
  • 最後一層:不使用 ReLU(nonlin=False),輸出 logit
  • 範例MLP(2, [16, 16, 1]) → 337 個參數

卡片 9:SVM Max-Margin Loss

  • 定義loss = max(0, 1 - yi * scorei)
  • 目的:讓正確類別的分數比錯誤類別高至少 1
  • micrograd 實作(1 + -yi*scorei).relu()

卡片 10:學習率退火(Learning Rate Annealing)

  • 公式lr = 1.0 - 0.9 * k/100
  • 效果:前期大步收斂,後期小步 fine-tune
  • micrograd 使用:SGD 更新步驟中

鏈結圖譜建議

Value ──► 計算圖 ──► 拓撲排序 ──► 反向傳播 ──► 鏈鎖律
  │                                                    │
  └──► Neuron ──► Layer ──► MLP ──► SVM Loss ──────────┘