🧱
Lektion 2 · Grundlagen

Autograd mit Value

Die Kettenregel Knoten für Knoten – das Herz von microgpt

Tempo
1 / 14
Vorbereitung Daten Forward Verlust Backward Update Sampling Ergebnis

📜Quelltext

Zeile 1
1class Value:
2 def __init__(self, data, children=(), local_grads=()):
3 self.data = data # Wert aus dem Forward-Pass
4 self.grad = 0 # dL/d(dieser Knoten), aus dem Backward-Pass
5 self._children = children # Eingaben dieses Knotens
6 self._local_grads = local_grads # lokale Ableitungen nach den Eingaben
7 def __add__(self, other):
8 return Value(self.data + other.data, (self, other), (1, 1))
9 def __mul__(self, other):
10 return Value(self.data * other.data, (self, other), (other.data, self.data))
11 def backward(self):
12 topo, visited = [], set()
13 def build_topo(v):
14 if v not in visited:
15 visited.add(v)
16 for child in v._children: build_topo(child)
17 topo.append(v)
18 build_topo(self)
19 self.grad = 1
20 for v in reversed(topo):
21 for child, local_grad in zip(v._children, v._local_grads):
22 child.grad += local_grad * v.grad
23 
24a = Value(2.0)
25b = Value(3.0)
26c = a * b # c = 6.0
27L = c + a # L = 8.0
28L.backward()
29print(a.grad) # 4.0
30print(b.grad) # 2.0

🖥️Konsole (stdout)

— noch keine Ausgabe —

🔎Variablen (locals)

🟡 = geändert

Noch keine Variablen – das Programm hat gerade erst begonnen.

🧰 VorbereitungZeile 1

Autograd: Lego-Steine mit eingebauter Ableitung

Training braucht für jeden Parameter die Antwort auf: „Wenn ich diese Zahl ein wenig erhöhe – steigt oder fällt der Verlust, und wie stark?“ Genau das ist der Gradient. microgpt berechnet ihn mit einer einzigen Klasse Value: Jede Rechnung merkt sich ihre Eingaben und ihre lokale Ableitung. Den Rest erledigt die Kettenregel.

🎬Visualisierung

🧱

Die Lego-Steine von microgpt

  • 1a + b → ∂/∂a = 1, ∂/∂b = 1
  • 2a · b → ∂/∂a = b, ∂/∂b = a
  • 3aⁿ → n·aⁿ⁻¹ · log(a) → 1/a · exp(a) → eᵃ
  • 4relu(a) = max(0, a) → 1 falls a > 0, sonst 0