Appearance
概念卡片 — 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 流程:
- 拓撲排序
- 根節點
grad = 1 - 逆序呼叫
_backward()
- 關鍵:梯度是多路累加的(
+=)
卡片 5:鏈鎖律(Chain Rule)
- 數學形式:
∂L/∂x = ∂L/∂z · ∂z/∂x - 在 micrograd 中:每個運算的
_backward()實作了局部鏈鎖律 - 範例:
- 加法:梯度直接傳遞(
∂z/∂x = 1) - 乘法:交叉相乘(
∂(xy)/∂x = y)
- 加法:梯度直接傳遞(
卡片 6:閉包(Closure)
- 定義:捕獲外部變數的函式
- micrograd 使用:每個運算的
_backward捕獲了self、other、out.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 ──────────┘