Join the conversation

Join the community of Machine Learners and AI enthusiasts.

Sign Up
sergiopaniego 
posted an update 5 days ago
Post
347
catching up on some bookmarked reads from the summer, reading Antidoom from @liquidai

small reasoning models get stuck more easily when the task involves a long thinking trace and a hard problem. It starts repeating the same word over and over again ("Wait", "Alternatively"…), each repetition makes the next one likelier, and the generation is spent before it reaches an answer

they measured it, 10.2% of completions for an early LFM2.5-2.6B checkpoint and 22.9% for Qwen3.5-4B at greedy. After training those drop to 1.4% and 1.0%

the fix is FTPO (final token preference optimization). What I like is how narrow it is, it only touches the single token where the loop starts

three ways it differs from DPO:
> trains one token position, mid-generation, instead of whole sequences
> spreads probability across ~20 plausible alternatives instead of swapping one overtrained token for another
> keeps the regularizer in logit space, no softmax, so the rest of the vocabulary stays put

the third one is what makes it usable. If you want to edit one position without disturbing the model, you can't have a loss that reshuffles the other 150k logits on the way

and their explanation abt the result: the training teaches the model nothing new about math or code, it clears the failure mode that was blocking answers the model could already produce

full blog > https://www.liquid.ai/blog/antidoom

FTPO itself comes from Antislop, where it was built to strip overused phrasing. LiquidAI retargeted it to doom loops

and under the hood it's a subclass of TRL's DPOTrainer with compute_loss overridden, around 90 lines of loss and no new trainer

we documented that pattern in TRL's docs
https://huggingface.co/docs/trl/main/en/customization#change-the-training-objective

FTPO is a textbook example of treating the symptom rather than curing the disease. It’s hard-coding a patch on logits to pass linear benchmarks, completely ignoring the structural decay beneath.

Small models (2-4B) don't get stuck in "doom loops" because of one bad token position; they fail because brute-force distillation from massive frontier models breaks the geometry of their latent space. Forcing a low-capacity architecture to mimic the complex probability distributions of a giant teacher model—especially when only slamming the upper layers during SFT/DPO—creates massive gradient schizophrenia. When the model hits a long, messy, or non-linear context in production, its attention heads simply do not have the matrix capacity to maintain the vector trajectory. It gets paralyzed, and clipping a loop-starting token won't make it any smarter.

Optimizing for the "holy grail" of static benchmark charts has become a complete cliché in the LLM industry. Leading labs like OpenAI, Anthropic, and DeepMind have already acknowledged this: LLMs are non-linear, highly anisotropic probability matrices, not simple functions you can repair with a 90-line loss wrapper. FTPO creates a great illusion for a Twitter release, but the second the model faces raw, fragmented human prompts, the manicured logit space falls apart. If a model isn't trained to reason honestly from scratch (pre-training), these tactical hacks just teach the model to hallucinate quietly instead of looping openly.

In this post