I. Where You Are — The Distribution of Understanding
Like an investment, your understanding of any concept follows a probability distribution. Most learners cluster around shallow familiarity — they’ve “heard of” backpropagation but can’t implement it. The goal of Day 1 is to push you rightward on this curve: from awareness to comprehension.
II. The Value Class — A Number That Remembers
A regular Python number like 3.0 is dead. It knows nothing about where it came from
or what created it. The Value class is a number that is alive — it remembers
its parents, the operation that created it, and can trace back through every step of its creation.
This “memory” is what makes backpropagation possible.
The Key Insight
Every Value node stores: (1) its data, (2) its gradient, (3) its children (inputs), and (4) the operation that created it. This is the entire backbone of neural network training. Without this graph, gradients have no path to flow backward.
III. The Implementation — Code That Captures the Graph
IV. The Pendulum — Where Beginners Swing Too Far
Howard Marks describes how markets oscillate between extremes, rarely resting at equilibrium. Learners do the same. Here’s the pendulum of Day 1 mistakes:
V. The Matrix — What Matters on Day 1
Just as Marks separates what you can know from what you can’t, here’s how to allocate your limited hours today:
DO FIRST
Install Python, PyTorch, Jupyter. Type out the Value class line by line. Run a + b and inspect ._prev and ._op.
DO IF TIME
Prettify your notebook, add markdown headers, organize file structure. Nice but not essential today.
DO CAREFULLY
Draw the computation graph by hand for 3 different expressions. This is slow but builds deep intuition for tomorrow’s backward pass.
AVOID TODAY
Reading ahead about backprop, watching 5 other videos “for context”, setting up a fancy IDE. Stay focused. Go deep on one thing.
VI. Today’s Deliverables
- Environment: Python 3.10+, PyTorch, Jupyter Notebook — all working
- Value class: Implement
__init__,__add__,__mul__,__repr__ - Test it: Create
a = Value(2.0); b = Value(-3.0); c = a * b— verifyc.data == -6.0 - Trace it: Print
c._prevandc._op— confirm the graph is being built - Draw it: Hand-draw the computation graph for
(a * b) + con paper - Stretch: Add
__sub__and__truediv__on your own — think about what_childrenshould be
Complete, runnable implementation of the Value class with computation graph building, visualization, and exercises.