How the model works
Adam does not train the news vectors, and it does not train the snapshot. It only trains a small write network that decides how each click is written into a per-user notepad. The notepad itself is runtime state, not a weight.
Three pieces
Snapshot
Mean of the user’s first training clicks, in frozen 64-d Qwen article space. Looked up once and held fixed for the whole run.
Notepad
Two dense 64×64 matrices (like / dislike). Starts empty. Written during the forward pass. Not stored as model weights.
Write network
Shared trunk plus key, value, and two gates. Also action embeddings and two memory-gain scalars. About 35k numbers.
One visit
Score is a dot product. The snapshot is the slow taste. The notepad is the short-term correction. Writes are keyed off the frozen snapshot, not off the current corrected query.
Write network
Shared trunk, four heads. Input is 140 numbers: frozen snapshot (64), frozen article (64), trained action embedding (8), click sign (1), and three time features from the gap since the last event. Hidden size 128. Residual keys and values, then a delta-rule write.
Key becomes normalize(snapshot + 0.1 Δk). Value becomes normalize(article + 0.1 Δv). Like-gate scales the write into M+; dislike-gate scales the write into M−. Decay is 0.99 / 0.9 and is not learned.
Keep the pad versus wipe
Same snapshot, same write network, same articles. The only training difference is whether the notepad lives across visits. That contrast is a run, not this page.
Keep the notepad
Walk each user in time. Write only new clicks. Score the current slate. Keep the matrices. Every four visits: one backward pass, then cut the graph but leave the values. Never wipe.
Wipe and rebuild
At every score, start a blank pad, replay the last 20 events, score, throw the pad away. Trains the same write rule, but only under that rebuild-from-scratch habit.
Pieces
| Piece | Role | Updated by Adam? |
|---|---|---|
| Qwen article vectors | 64-d frozen news embeddings | No |
| Snapshot | Mean of first training clicks | No |
| Notepad M⁺, M⁻ | Per-user 64×64 memory, written on the fly | No (state) |
| Write network | Turns a click into a notepad write | Yes |
| Gains + action embeddings | How strongly likes/dislikes move the query | Yes |
Trainable count 34,908 of 10,229,916 is from the Modal keep-the-pad job on MIND-small, seed 42, with write-time features. This page is the layout. Scores live on the experiment pages.