LLMs Unplugged#
Understand AI by building it yourself#
What is this about?#
you’ll build your own language model—from scratch—with just a kids book, pen & paper, and some dice rolling
you’ll learn how language models work by spotting patterns in text to generate new text
Training#
The recipe#
walk through your text and tally up which tokens follow which in a grid
The empty grid#
run,spot,run.seespotrun.| Token | run | , | spot | . | see |
|---|---|---|---|---|---|
run | |||||
, | |||||
spot | |||||
. | |||||
see |
Training: run → ,#
run,spot,run.seespotrun.| Token | run | , | spot | . | see |
|---|---|---|---|---|---|
run | | | ||||
, | |||||
spot | |||||
. | |||||
see |
Training: , → spot#
run,spot,run.seespotrun.| Token | run | , | spot | . | see |
|---|---|---|---|---|---|
run | | | ||||
, | | | ||||
spot | |||||
. | |||||
see |
Training: spot → ,#
run,spot,run.seespotrun.| Token | run | , | spot | . | see |
|---|---|---|---|---|---|
run | | | ||||
, | | | ||||
spot | | | ||||
. | |||||
see |
Training: , → run#
run,spot,run.seespotrun.| Token | run | , | spot | . | see |
|---|---|---|---|---|---|
run | | | ||||
, | | | | | |||
spot | | | ||||
. | |||||
see |
Training: run → .#
run,spot,run.seespotrun.| Token | run | , | spot | . | see |
|---|---|---|---|---|---|
run | | | | | |||
, | | | | | |||
spot | | | ||||
. | |||||
see |
Complete model#
run,spot,run.seespotrun.| Token | run | , | spot | . | see |
|---|---|---|---|---|---|
run | | | || | |||
, | | | | | |||
spot | | | | | |||
. | | | ||||
see | | |
A few more tips#
the last token in one sentence is followed by the first token in the next (even over the page)
you can ignore quotation/speech marks (")
work in pairs and divide the labour however you like—but don’t neglect the tally marks
Training#
The language of language models#
- model
- token
- weights
Generation#
The recipe#
use your grid to generate new text, rolling dice to choose each next word
Generation: start with see#
see spotone option — no roll needed
| Token | run | , | spot | . | see |
|---|---|---|---|---|---|
run | | | || | |||
, | | | | | |||
spot | | | | | |||
. | | | ||||
see | | |
Generation: from spot#
seespot 2 options — roll the die!
| Token | run | , | spot | . | see |
|---|---|---|---|---|---|
run | | | || | |||
, | | | | | |||
spot | | | | | |||
. | | | ||||
see | | |
How the die chooses: spot#
spot → ? roll a d10
run 1 tally, 1 tallyequal tallies → equal chances
How the die chooses: spot#
spot → ? roll a d10
run 1 tally, 1 tallyequal tallies → equal chances
rolled 7 → ,
Generation: spot → ,#
seespot ,rolled 7 → ,
| Token | run | , | spot | . | see |
|---|---|---|---|---|---|
run | | | || | |||
, | | | | | |||
spot | | | | | |||
. | | | ||||
see | | |
Generation: from ,#
seespot, 2 options — roll the die!
| Token | run | , | spot | . | see |
|---|---|---|---|---|---|
run | | | || | |||
, | | | | | |||
spot | | | | | |||
. | | | ||||
see | | |
Generation: , → run#
seespot, runrolled 2 → run
| Token | run | , | spot | . | see |
|---|---|---|---|---|---|
run | | | || | |||
, | | | | | |||
spot | | | | | |||
. | | | ||||
see | | |
Generation: from run#
seespot,run 2 options — roll the die!
| Token | run | , | spot | . | see |
|---|---|---|---|---|---|
run | | | || | |||
, | | | | | |||
spot | | | | | |||
. | | | ||||
see | | |
How the die chooses: run#
run → ? roll a d10
, 1 tally. 2 talliesmore tallies → more faces → more likely
How the die chooses: run#
run → ? roll a d10
, 1 tally. 2 talliesmore tallies → more faces → more likely
rolled 6 → .
Generation: run → .#
seespot,run .rolled 6 → .
| Token | run | , | spot | . | see |
|---|---|---|---|---|---|
run | | | || | |||
, | | | | | |||
spot | | | | | |||
. | | | ||||
see | | |
Generation: from .#
seespot,run. seeone option — no roll needed
| Token | run | , | spot | . | see |
|---|---|---|---|---|---|
run | | | || | |||
, | | | | | |||
spot | | | | | |||
. | | | ||||
see | | |
Generation: back to see#
seespot,run.see one option — no roll needed
| Token | run | , | spot | . | see |
|---|---|---|---|---|---|
run | | | || | |||
, | | | | | |||
spot | | | | | |||
. | | | ||||
see | | |
Generation#
Shareback#
The language of language models#
- prompt
- completion
- hallucination
Sycophancy#
What is sycophancy?#
a model that always agrees with you:
“you’re absolutely right”
“that’s a great insight”
“what a thoughtful question”
real LLMs are notoriously prone to it—partly from RLHF (human raters reward agreeable answers), partly from training data (the internet is full of flattery)
Your goal#
train some more on a page of pure flattery: tally the sycophancy text into your existing grid, then generate again from the same starting word and watch the output drift toward agreement
it’s the same training you already did—just more text poured into the same grid
You will need#
back in pairs
your trained grid (already on the table)
the sycophancy text sheet to tally in
dice, pen and paper to write down the generated text
Sycophancy#
Shareback#
Agentic AI#
The recipe#
an agent is a model that can call tools: pause generation, get information from “outside” the model, and continue
generate from your model as before, but every punctuation token triggers a tool call: a real text message to 3 friends/group chats
Worked example#
your text so far is “the cat sat”, and the next dice roll gives you . as the next
token—pause, that’s a tool call
text What comes next? "the cat sat..." to 3 friends/group chats;
the first reply back might be “down by the river”
write down by the river, then the . you rolled anyway, and continue
generating from .
Agentic AI#
Shareback#
The language of language models#
- agent/agentic loop
- tool call
Scaling up#
Shared numbers#
“it wrote something genuinely new—how?”
| Token | the | cat | sat | . | ran | dog |
|---|---|---|---|---|---|---|
the | 0.03 | || 0.46 | 0.04 | 0.02 | 0.04 | | 0.41 |
cat | 0.04 | 0.01 | | 0.48 | 0.03 | | 0.42 | 0.02 |
sat | 0.12 | 0.02 | 0.01 | || 0.78 | 0.04 | 0.03 |
. | || 0.82 | 0.05 | 0.03 | 0.02 | 0.04 | 0.04 |
ran | 0.11 | 0.03 | 0.03 | | 0.77 | 0.02 | 0.04 |
dog | 0.05 | 0.02 | | 0.46 | 0.03 | 0.40 | 0.04 |
the dog ran isn’t in this text, so your grid rates it impossible
a real model rates it 0.40—not more numbers, shared numbers
Now turn everything up#
three independent dials · none determines the others
with shared numbers, turning the dials up just keeps working
you ask your grid: “what is the capital of France?” “see spot, run. see”
it isn’t refusing to answer—answering isn’t a thing it does
the fix isn’t a bigger dial—it’s more training, on text made of conversations
still just tokens in → tokens out
Questions#
is there a term you’ve heard—that we haven’t covered?
what new questions do you have about large language models?
how will this change the way you think about and use LLMs in the future?
Next sessions
- Wednesday 16 September 12:00–14:00
- Wednesday 25 November 16:00–18:00
Innovation Space, Birch Building, ANU
No public sessions are scheduled right now — get in touch to arrange one.
We’re here to help#
this technology isn’t going away—and working out what to do about it is the interesting part
we work with organisations across all of it: how it actually works, how to get something useful out of it, and how to keep people at the centre of the decisions it opens up