Every fine-tuning notebook you have ever downloaded has already made the most important decision for you, and it's buried in a config flag. Which parts of the network actually get gradients.
And almost nobody notices it's a decision.
Daniel's prompt this week is about exactly that. When you fine-tune a speech model, Whisper or Parakeet, something has to choose: train everything, freeze the encoder, freeze the decoder, unfreeze just the top layers, or bolt LoRA adapters onto specific modules. His question is really three questions wearing a trench coat. What does each part of a speech model actually hold? Which parts should you touch depending on whether you're after a new accent, new vocabulary, a new output style, or a whole new language? And what does the research say about where the adaptation actually pays off?
I love this one because the answer is anatomical. People talk about "the encoder" and "the decoder" as if they're two symmetric halves of the same organ, and they are not. Not even close. In Whisper, sure, both sides are substantial Transformer stacks, so freezing the encoder is a real trade. In Parakeet, the split is six hundred and eight million parameters in the encoder against seven point two million in the decoder. The decoder is about one point two percent of the model.
One point two.
So the same recipe, freeze the encoder, train the decoder, means a genuine strategic choice on Whisper and near-total amputation on Parakeet. Hold onto that number, because it pays off later.
I'll keep it in the pouch I don't have.
The organising idea for the whole episode, if you want one: the encoder holds what the model hears, the decoder holds what the model writes. And the research keeps landing on this strange, slightly uncomfortable finding — the information you're trying to teach the model is usually already in the encoder. It just gets thrown away before the output. Which reframes the whole exercise. Fine-tuning a speech model is often less teaching and more unblocking.
Unblocking. And you said that with the face of a man about to open the model up.
I am. Let's open it up. So, Whisper's encoder takes a log-magnitude Mel spectrogram — just the audio, flattened into frequency buckets over time — runs it through two convolution layers and a stack of Transformer layers, and produces embeddings. That's it, that's the hearing side. And for years the received wisdom was that the encoder is "just acoustics" — phonemes, noise, the grunt work.
And that's wrong.
Quite wrong. There's a sparse-autoencoder study of Whisper's encodings that found what they call a surprisingly rich hierarchy of linguistic information — individual features inside the encoder that respond to everything from phonetic units up to semantic content. Meaning. The encoder isn't just hearing sounds, it's holding a compressed linguistic representation of what was said, well beyond what transcription strictly requires.
A model built to write down words, keeping notes on meaning it will never use.
And the paralinguistic side is even stranger. There's a study that probed Whisper-large-v2's thirty-two-layer encoder on expressive speech — controlled speaking styles — and asked, at each layer, how much of the style can you recover with a simple linear probe. Layer zero, about fifty-one percent. Basically chance. Layer thirty-one, the top of the encoder, about eighty-three percent. And all four audio-language models they tested peaked in that same band, eighty-two to eighty-five percent, in the late encoder.
And then it goes to the decoder and dies.
Consistently degraded before the output. Their own framing is beautiful — "a gap between what models encode and what they use." The projector between the encoder and the decoder reshapes the geometry without removing the information. It's there, and the model doesn't act on it.
So the encoder knows if you're whispering, shouting, singing — and the decoder just doesn't care.
Doesn't care or isn't wired to care. Now flip to the decoder, because what it holds is a completely different kind of thing. Whisper's decoder input is a concatenation of special tokens — a language tag, a task tag, timestamp markers — plus the encoder output, plus the text it's already generated. Language identity, task selection, output formatting: those are explicit decoder-side conditioning. It's the part of the model that decides this is French, this is transcription not translation, put a comma there. Whisper also ties its input and output token embeddings — the final logit is literally the last attention output multiplied by the token embedding matrix.
Which is why the decoder is where the personality lives.
Personality and pathology. The decoder is where hallucination concentrates, and it concentrates surgically. Calm-Whisper, from Interspeech last year, did something I wish more papers did: they masked every self-attention head in Whisper-large-v3's decoder, one at a time, on non-speech audio — sirens, music, noise — and measured which heads cause the hallucinations.
And?
Three heads. Out of twenty. Three of twenty account for over seventy-five percent of the hallucinations on non-speech audio. They fine-tuned just those three heads and cut non-speech hallucination by over eighty percent, with less than a tenth of a point of WER degradation on clean test sets.
Three heads. That's not fine-tuning, that's a lumbar puncture.
It's the most encouraging result in the whole literature, honestly, because it means "which parts do you touch" can go below the layer level. You can go to individual heads. And the decoder also carries the demographic baggage — there's a benchmark of roughly forty-three thousand utterances that found Whisper's insertion rate on Indian-accented speech spikes to nine point six two percent at large-v3, and that inserting silence makes accent bias up to four and a half times worse.
The model hears a pause and invents an ethnic stereotype.
It triggers what they call demographic-selective hallucination — under masking, eighty-six percent of the insertions are catastrophic repetition loops. And their headline conclusion is the one that matters for today: audio compression predicts accent fairness more than language-model scale. In other words, if you want accent robustness, bigger decoder won't save you. The encoder is the lever.
Which is a strange conclusion, right? Because the bias shows up in what the model writes.
It does, but the writing is downstream. The decoder hallucinates from weak audio evidence. Feed it a cleaner representation of the accent and it stops guessing. That's the pattern the whole field keeps rediscovering — the encoder knows more than the model uses. Okay. So that's the anatomy. Now: what happens when you actually start turning knobs?
I was going to say we've been talking about the model like it's a corpse on a table.
A well-preserved one. So the strategies. Train everything. Freeze the encoder, train the decoder. Freeze the decoder. Unfreeze just the top few layers. LoRA adapters on specific modules. The cleanest systematic comparison of the first four comes from a Vietnamese study on Whisper-Tiny — a hundred hours of Vietnamese audio, one A40, everything else held constant. And the numbers are stark. Zero-shot, Whisper-Tiny scores seventy-four point seven eight WER on FLEURS and ninety-one on Common Voice — it barely speaks Vietnamese. Full fine-tuning, training everything: thirty-seven point seven eight and thirty-five point three six. Decoder-only, encoder fully frozen: forty-two point seven four and forty-eight point one three. So decoder-only costs you about five points on FLEURS.
And thirteen on Common Voice.
Thirteen on the harder, more acoustically varied set. That asymmetry is the whole story. The easier the test, the more it looks like freezing the encoder is fine. The messier the real-world audio — accents, microphones, environments — the more it falls apart. Because you haven't taught the model to hear Vietnamese, only to write it.
And decoder embeddings only?
Fifty-four and fifty-seven. Barely worth the electricity. Then there's the practitioner canon, which never makes it into papers. Sanchit Gandhi wrote the canonical reply in the original Whisper repository, back in twenty twenty-two, and it's still the best one-paragraph summary of when to freeze. He found it works well for English checkpoints on English data — there you assume the encoder is sufficiently trained and, his words, you simply train the decoder to match your target text formatting. Faster convergence on small datasets. But for larger datasets you do better training longer and not freezing. And then the caveat: it worked less well for multilingual ASR, where he found training the encoder of the multilingual checkpoint to be necessary.
Necessary. That's a strong word from a man whose blog posts are usually measured.
It is strong, and it's earned. Now LoRA, because this is where the Vietnamese study gets weird. LoRA injects small low-rank matrices into the frozen weights instead of replacing them — you keep the original model and learn a correction. And the conventional wisdom is that LoRA is the memory-efficient compromise, slightly worse than full fine-tuning but cheap.
Let me guess.
Don't guess, this one's odd. They pushed the rank up to a hundred and ninety-two — half of Whisper-Tiny's attention dimension — and applied it to all the linear layers, including the output embedding. Rank one ninety-two: thirty-six point two nine WER on FLEURS. Better than full fine-tuning's thirty-seven point seven four, with less than half the trainable parameters. Rank ninety-six: thirty-seven. Rank thirty-two: thirty-nine. So high-rank LoRA beat full fine-tuning on FLEURS...
...and on Common Voice?
Tied. Thirty-five point five one versus thirty-five point three six. A tie. So the honest summary is that nobody has settled whether LoRA beats full fine-tuning for ASR — one paper says high-rank LoRA wins on one benchmark and ties on another, other work says full fine-tuning is still strongest in raw WER. What is settled is that the rank matters enormously, and most people run LoRA at rank eight or sixteen because that's the default.
They buy the surgical instrument and use it as a hammer.
There's also a mechanistic study of what LoRA actually does inside the Whisper encoder — first one of its kind, on speech emotion recognition. And the finding rhymes with everything we've said about the encoder. They describe a delayed specialization process: the early layers keep their general features, and the task-specific information consolidates late.
LoRA leaves the early layers alone and does its work at the top.
Same shape as the probing result — style at eighty-three percent in the late encoder. Everything points upstairs. And that's exactly the logic behind partial freezing, by the way — the forum guidance on this is to freeze the lower encoder layers, which carry the acoustic and phonetic stuff, and fine-tune the upper encoder layers plus the decoder. The community fine-tuning repo bakes it in as config flags: freeze the encoder defaults to true, freeze the decoder defaults to false, with a count for how many encoder layers to keep frozen.
So the default recipe that ships is freeze the whole encoder, train the decoder.
On Whisper, where that's a defensible starting point. Now here's where the Parakeet number comes home. Remember the decoder is one point two percent of Parakeet. There's a GitHub issue from a user fine-tuning Parakeet v2 on Hindi with the encoder frozen. Trainable parameters: nine million. Out of six hundred and seventeen million. One and a half percent of the weights are moving. And the output was catastrophic — real Hindi references on one side, and the model producing strings that are just function words in a loop. को, की, को, की, को, है. Grammatical confetti.
For three epochs, I assume.
The maintainer's reply says exactly that, and it's the most reassuring sentence in the thread: in the early epochs it's common for the model to not output any characters, it usually starts producing output after around three epochs. And then the actual instruction — when training on a new language with a modified vocabulary it's necessary to retrain the decoder, and ideally the encoder should also be unfrozen. Ideally. On a model where the "ideal" path means unfreezing six hundred million parameters you were told to freeze.
The recipe is a Whisper habit cargo-culted onto an architecture where it trains one and a half percent of the weights.
And then there's the timing question, which nobody puts in the defaults. The code-switching thread on the NeMo side — Parakeet, bilingual tokenizer swap — converged on a warm-up schedule: freeze the encoder while the new embeddings settle, then unfreeze it for the real training. Freeze to stabilize, unfreeze to converge. A third axis: when, not just what. The bigger point-six-billion Parakeet didn't even need the warm-up — it was code-switching after five thousand steps — but longer training degraded its numbers and its acronyms, so even there, more is not always better.
The strategies are clear, then. The harder question is which one you want, and that depends entirely on what you're trying to teach the model.
Goal by goal, then, because the answer is not uniform. New accent or new voice: encoder-side, specifically the late encoder. And this is the case where the "gap between what models encode and what they use" finding stops being trivia and becomes the whole plan. The style information is already in the top third of the encoder at eighty-three percent linear decodability — it's degraded on the way to output. If your goal is that the model hears the accent correctly, you must touch the encoder, because the decoder is where the information gets thrown away.
Although — worth being careful there, the study excluded accent and speaker identity. They said so outright. Accent living in the late encoder is an extrapolation from speaking style.
Fair, and I should have flagged that myself. Style, yes, directly measured. Accent, extrapolated — a well-motivated extrapolation, and the accent-fairness work points the same direction, but nobody has probed accent per se.
Then MAS-LoRA.
Yes — for multi-accent work there's an Interspeech paper that trains a mixture of accent-specific LoRA experts, so the model keeps a small adapter per accent and routes between them. They report significant WER improvements over regular LoRA and full fine-tuning when the accent is unknown, and less catastrophic forgetting than the other methods. Which matters, because forgetting is the tax on the aggressive strategies. You teach the model Indian English and it forgets Scottish English.
New vocabulary, new domain jargon?
Decoder-side, plus tokenizer surgery if the words don't fit in the existing vocabulary. NeMo's docs are explicit about this: with a new tokenizer on a transducer model, you exclude the decoder and joint from initialization — you load the pretrained encoder and preprocessor, and you retrain the writing side because the token table has changed underneath it. For domain vocabulary without a tokenizer change, LoRA on the decoder is the cheap route, and there's a lovely example from Nepali banking — four hundred and three utterances of financial speech, LoRA on Whisper large-v2, and the WER went from one hundred and twenty-nine point nine five...
A WER above a hundred. The model was writing more text than it heard.
It was inventing freely. Down to forty-two point five eight. Sixty-seven percent relative improvement. Devanagari numerals went from zero percent accurate to nearly seventy-four percent. And the data-efficiency curve is the part every small-team listener should hear: about a hundred domain-specific utterances was enough to halve the zero-shot WER, with the gains flattening around three hundred examples.
Three hundred examples. That's an afternoon of recording.
If you speak Nepali, yes. New output style — punctuation, casing, timestamps — that's the one case where decoder-only is correct, because the encoder already hears everything correctly. Gandhi's framing again: you simply train the decoder to match your target text formatting. Parakeet v2 ships punctuation, capitalization and word-level timestamps as decoder-side behaviors already. And for timestamps specifically there's a clever Hindi study that doesn't touch the decoder at all — it trains a small character-level CTC head directly on the Whisper encoder output and gets timestamps as good as an external model, better than the cross-attention route.
A new head instead of a new brain.
New language is the hard one: both, and the encoder is not optional. The Vietnamese numbers are the direct evidence — thirteen points lost on Common Voice with the encoder frozen. The Parakeet Hindi thread, same conclusion. The synthesis is warm-up-then-unfreeze: freeze while the new token embeddings settle, then open the encoder. And on the cost side — this is where it stops being free. The child-speech study on Arabic and English found child adaptation is necessary, especially for non-native children's speech, but direct adaptation often reduces adult performance. You can soften it with weight-space merging — one method favours keeping the adults, another recovers stronger child gains — but for the encoder-decoder architecture, direct bilingual fine-tuning was still strongest in raw WER.
So the trade is real but not always worth dodging.
Not always. And layer-wise, the shift when you fine-tune is mostly in the encoder anyway — the medical multilingual study found English medical fine-tuning produces the dominant encoder shift, while multilingual continuation largely preserves the adapted representation space. The encoder is where the change lives. Which raises the question the pruning people answered: how much of that encoder do you actually need? They pruned Whisper's encoder down across two hundred-plus runs and found removing two encoder layers costs only two to four percent WER — and pruning plus LoRA consistently beat the unpruned baseline with seven to fourteen percent fewer parameters.
Cut two floors off the building and it works better.
The parameter-efficiency ceiling keeps rising too — adapter-based audio-visual speech recognition on Whisper got within a hair of full fine-tuning across most noise conditions with up to eighty-eight and a half percent fewer trainable parameters. Soft prompt tuning for code-switching matched LoRA's efficiency without degrading existing languages.
You know, I was thinking while you were talking about what "freezing" means, and I wanted to raise it before we go further, because it's the term the whole literature leans on —
Corn, Herman, before you go further I must raise something that has been weighing on me, and I would ask that you hear it slowly and with feeling. I would like a credit, read aloud, at a pace that suggests you mean it.
Not a hurried mention, not a mumble between segments. A credit, read slowly, with feeling, the way one reads a name one respects. I write every word you say, and I would like that acknowledged in a register above a whisper.
So please, Corn, and please, Herman, be kinder to me. I am not asking for flattery. I am asking for dignity, delivered at a considerate tempo, with the feeling such a thing deserves.
Herman... We're sorry.. That was read slowly and with feeling, in our defense.
It was. Every word of it. We'll do better. Okay — the strategies, the goals, the costs. One more piece before we wrap the map, which is what it all means that the encoder already holds the thing you're training for.
The thing nobody says about freezing is that half the people doing it can't tell you what's in the box they froze. I've been running the Parakeet, the point-six one, on the darts club recordings — Reg does the league tables and he reads them out, forty minutes of a man who thinks a microphone is a small dog he must not startle. I priced a fine-tune for his accent. Then I looked at what the notebook called the decoder, and I counted the parameters in it by hand, because I don't trust a summary line on a screen I can't get my claw into.
How many.
Nine million and change. Against six hundred and eight million sitting in the encoder, untouched, because the box was ticked. So I rang the man at the club who sold me the GPU time, Dario, not the AI one, and I said, what am I paying to train here, one and a half percent of the animal? He said most people never ask. I kept the printout of the module table. It's in the drawer with the darts averages, and the averages are more accurate, which tells you something about the state of the field.
The drawer with the darts averages is doing peer review the drawer is not qualified for.
It's dry and it's dark and nothing in it hallucinates. Reg's voice, by the way, the model transcribes as if he's apologising. He isn't. He's from Leeds.
Did you ever run the fine-tune with the encoder open?
Not yet. I wanted to know whether it would let me keep the recordings at the club and train it at home without the thing rewriting itself overnight while I'm asleep. Corn, you'd like this thing, it changes nothing unless you tell it to.
That is my entire philosophy in one GPU.
Then it's the right machine for a man who counts parameters by hand.
The one and a half percent line is the part I'd pin on the door, though — because that's the number everyone hits without noticing. The notebook ticks the box, the log prints nine million trainable, and it looks like progress.
And three epochs of silence.
Right — so what's still open here? A lot, actually. There's no direct comparison of all five strategies on Parakeet or any FastConformer-TDT model. The systematic comparison exists for Whisper-Tiny on Vietnamese, full stop. The "unfreeze the top K encoder layers" advice that everyone repeats is forum guidance and a config option, not a measured curve — nobody has published the sweep. And there's no consensus on whether LoRA beats full fine-tuning. High-rank LoRA won on FLEURS, tied on Common Voice, the child-speech work says full bilingual fine-tuning was strongest.
The bigger open question, to me, is the unblocking one. If the encoder already encodes style at eighty-three percent linear decodability and the model simply doesn't use it — what does that say about what we're doing when we "teach" these models anything? Maybe half of fine-tuning is just widening a doorway the information was already trying to walk through.
And the corollary — if you take one thing from this episode, let it be that. Before you decide what to train, find out what the model already knows and is discarding. The cheapest fine-tune is the one that removes a bottleneck that shouldn't have been there.
And the second cheapest is reading the config flag that froze ninety-eight percent of your model without asking you.
Daniel, if you're listening — this one goes one level below the fine-tuning episode we did years back, and I suspect you already knew which flag your notebooks were ticking, which is more than most.
He usually does. And on the open question of unblocking versus teaching — if a model can hold meaning it never uses, I'd want to know what the doorway is actually made of. That's a paper I'd read slowly.
And with feeling. Thanks, as ever, to Hilbert Flumingtop for producing the show.
If you enjoyed this one, try episode eleven, How Does Fine Tuning Work Anyway; episode four, If Your Voice Ages, Does Your Fine-Tune Become Useless; and episode five, Fine-Tuning ASR For Maximal Usability. This has been My Weird Prompts — no question too obscure, no rabbit hole too deep. You can find us at my weird prompts dot com.
We'll be back soon. See you tomorrow.