Liquid AI が Antidoom を発表——推論モデルの「無限ループ」問題を、トークン1個の修正だけで解決、すでにオープンソース化
- Liquid AI は2026年7月7日、Final Token Preference Optimization(FTPO)という手法でAI推論モデルの「無限ループ」を専門的に修復するAntidoomを発表した。無限ループとは、モデルが同じ一文(例えば「Wait, let me reconsider...」)を延々と繰り返し出力し、コンテキストウィンドウを使い切ってしまう現象を指す。
- LFM2.5-2.6Bの初期チェックポイントでは、難易度の高い数学・コード問題でのループ発生率が10.2%から1.4%に低下。Qwen3.5-4Bではgreedyサンプリング下で22.9%から1%に低下した。
- この手法は「ループを引き起こしたそのトークン1個」だけをピンポイントで再学習し、モデルがその位置で首尾一貫した別の候補語を選びやすくする。それ以外の出力分布にはほぼ影響を与えない。
- 無限ループは3つのメカニズムが重なって生じる——過剰に学習された高頻度語(the、So、Wait など)がモデルの迷いどきに保険的な選択肢として選ばれる、上文の繰り返しがループ確率をどんどん1に近づける、低温度のgreedyサンプリングにはループから抜け出す出口がない、の3つだ。
- 学習・検出・生成のコード一式はGitHubで公開されている(Liquid4All/antidoom)。READMEには完全なハイパーパラメータ選定ガイドが付属し、NVIDIA/CUDAとAMD Instinct MIシリーズ(ROCm)の両方をサポートする。
AIも壊れたレコードのように詰まることがある
Liquid AIは2026年7月7日、AI推論モデルの「無限ループ」を専門的に修復するAntidoomを発表し、GitHubでコードを全面公開した。
無限ループ(doom loop)は推論モデルによくある失敗の1つだ。モデルはまず短い一文、例えば「Wait, let me reconsider...」を吐き出し、そのあとこの一文を延々と繰り返し、コンテキストウィンドウを埋め尽くすまで続ける。しかし答えは最後まで出てこない。小規模な推論モデルほど、長い思考連鎖と難しい問題でこの症状に陥りやすい。
この問題の2ステップ目の導出をもう一度確認してみよう。
Wait, let me reconsider...
Wait, let me reconsider...
Wait, let me reconsider...
Wait, let me reconsider...
Wait, let me recons
(コンテキストウィンドウが埋め尽くされ、答えは最後まで出てこなかった)
従来のやり方が根本解決にならない理由
Antidoom以前、無限ループへの対処法は主に2つの方向があり、それぞれに弱点があった。
1つ目はrepetition_penaltyを推論時に加える方法で、すでに出現した語の確率を一時的に下げるやり方だ。これは絆創膏のようなもので、再学習は不要だが、抑え方が無差別なため、正常な出力の質まで一緒に引き下げてしまう可能性がある。2つ目は強化学習(RL)で、ピンポイントでループに対処できるが、報酬設計を丹念に作り込み、高コストなオンラインrolloutサンプリングを回す必要がある。
| 手法 | やり方 | コスト | 副作用 |
|---|---|---|---|
| repetition_penalty | 推論時に重複語の重みを一時的に下げる | 低い、学習不要 | 正常な出力の質を損なう可能性 |
| 強化学習(RL) | 報酬信号でモデルを再学習 | 高い、報酬設計とオンラインサンプリングが必要 | 報酬設計を誤ると方向がずれる |
| Antidoom | ループの起点となるトークン1個だけを学習 | 低い、LoRA+単一GPUで数時間 | それ以外の出力にはほぼ影響なし |
トークン1個だけ変える、他は一切いじらない
Antidoomは修復範囲を極限まで絞り込んだ。
まず無限ループが始まったそのトークンを特定し、そこだけモデルがより首尾一貫した別の候補語を選ぶよう学習させる。語彙表のそれ以外の部分の確率分布はほぼ元のままだ。モデル全体の出力の癖は変えず、ループを引き起こす接合点だけに精密なパッチを当てる。
これは外科手術のようなピンポイント修復だ。モデル全体を再調整するのは、答案用紙全体を丸ごと採点し直すようなものだが、Antidoomは生徒が繰り返し間違えているその1問の横にだけ印をつける。正解した他の問題には一切手を触れない。改変が小さいほど、モデル本来の能力への損傷も小さくなる。
無限ループはどこから来るのか:3つの力の重なり
無限ループの背後では、3種類のメカニズムが同時に働いている。
メカニズム1:過剰学習された高頻度語が、モデルの迷いにぶつかる
もともと選ばれやすい語というものが存在する。業界で見られてきた例にはdelve、testamentなどがあり、合成データを使った学習によってこれらの語の出現頻度が人間の執筆よりも高く釣り上げられている可能性がある。推論モデルでは、この種の高頻度語はしばしばWait、Alternativelyといった、方向転換や検証のステップを示す接続語だ。これら自体は悪いものではなく、方針転換や検証を示すマーカーとして機能しうる。しかしモデルが詰まり、次のステップに自信を持てなくなると、これらは手っ取り早い保険的選択肢になり、同じ推論を最初からやり直してしまう。
LFM2.5-2.6Bの初期チェックポイントで、無限ループを最も多く引き起こす起点語(全ループ起点に占める割合):
メカニズム2:上文が自己を強化する
すでに出現した文字列は、同じ文字列を後で再び出現しやすくする。繰り返すたびに、その文中の各トークンが再び選ばれる確率は雪だるま式に1へと近づいていき、止まらなくなる。Duanらの研究は、この現象を一種の「V字型」アテンションパターンと結びつけており、意味的な繰り返し(モデルが同じ考えに詰まっている状態)が字句的な繰り返しに先行して現れることも見出している。
メカニズム3:低温度サンプリングには出口がない
推論モデルは一般に非常に低いサンプリング温度で動かされ、推論プロセスの安定性と再現性を保つ。(サンプリング温度は、モデルが語を選ぶ際にどれだけ低確率の語に挑戦するかを制御するパラメータだ。温度が低ければほぼ毎回最も確率の高い語を選び、温度が高ければ低確率の語も試しやすくなる。)温度がゼロなら常に最も確率の高い語を選ぶため、いったん強化されたループには出口がなくなる。理論上は温度を上げれば助けになるはずだが、メカニズム2によってループ語の確率がほぼ1に押し上げられると、残りの語にはほとんど確率が配分されなくなり、高温にしても結局詰まってしまう。公式データでもtemp=0.67の時点で明確なループが確認されている。温度が低いほど、無限ループは深刻になる。
問題のトークンをどう見つけ、どう学習させるか
無限ループを直すには、まずそれを学習可能なデータに変換する必要がある。
やり方はこうだ。無限ループを誘発するために特別に設計されたプロンプト集(LiquidAI/antidoom-mix-v1.0)を使い、低温度でモデルの出力を大量に生成し、そこから失敗サンプルを掘り出す。ある一文が少なくとも4回繰り返され、かつ長さが60文字以上ある場合に初めて無限ループと判定する。この2つの閾値は誤判定と見逃しを同時に避けるためのものだ。ループを見つけたら、最初の繰り返しの最初のトークンを特定し、それをrejected(選ぶべきでないもの)としてラベル付けする。この位置でモデル自身が出したtop-k候補を取り、短すぎるものや英数字以外のノイズを取り除き、最大20個の妥当な代替語をchosen(より良い選択肢)として残す。学習データはこうした三つ組——上文、1個のrejectedトークン、1個以上のchosenトークン——として構成される。
≥4回 / ≥60文字
rejected
最大20個のchosen
学習の前には、rejectedとchosenの分布に正則化処理を施す必要がある。そうしないとWait、So、theといった高頻度語が学習全体を支配してしまい、かといってこれらを抑え込みすぎると今度はモデルの推論能力自体が損なわれてしまう。
DPO、FTPOはいずれも「偏好最適化」という部類に属する手法だ。そのやり方はこうだ。モデルに2種類のサンプルを見せる。1つは「これは選ぶな」(rejected)、もう1つは「これらのほうが良い」(chosen)。モデルはこれを何度も見ることで自分の選択の傾向を調整し、その過程で新しい知識は一切注入されない。答案の採点で知識を教え直すのではなく、繰り返し間違えているその1問の横にバツをつけ、より良い答えをいくつか書き添えるようなものだ。
FTPOとDPOの違い
FTPO(Final Token Preference Optimization)はDPOに似た偏好最適化アルゴリズムだが、設計の当初から「トークンをごくわずかだけ動かし、モデルのそれ以外の部分をできるだけ揺さぶらない」ことを目指している。DPOと比べて4つの違いがある。
| FTPOのやり方 | 何を解決するか |
|---|---|
| 系列の末尾にある1個のトークン(生成途中のシーケンス)だけを学習する | 改変を1つの位置に厳密に限定する |
| 1サンプルに複数のchosen候補を対応させる | 確率を一群の代替語に分散させ、単に高頻度語を別の高頻度語に置き換えるだけになるのを避ける |
| logit空間でKL的な制約をかけ、softmaxをスキップする | 無関係なトークンに勾配の圧力をかけず、他の能力が引きずられないようにする |
| 2段階の正則化 | 学習対象のchosen/rejectedは動かしやすくしつつ、語彙表のそれ以外の部分はより強く抑える |
どれくらい学習するか、いつ止めるべきか
この学習の規模は、意外なほど小さい。
LoRAによる微調整(大規模モデルにパッチを当てるような微調整手法で、全パラメータを再学習せず、新規に挿入した一部のパラメータだけを学習する。低コストで元のモデルへの影響も小さい)を用い、通常は1エポックしか回さない。経験上、LoRAのrankを128から256に設定するのが最も効果的だ。より柔軟に学習しつつ副作用も小さく抑えられる。学習範囲は全アテンション層、MLP層、加えてlm_headをカバーし、学習率はおおむね4e-6から2e-5の間だ。
いつ止めるべきか?chosen_winという指標を早期停止の判断基準として使う。これは無限ループの起点位置において、モデルが元の(ループを誘発しやすい)語ではなく「より良い代替語」を選ぶ割合をどれだけ増やせたかを測るものだ。chosen_win=0.35あたりで止めれば、通常は無限ループ発生率を20〜30%から1〜2%まで下げられる。学習しすぎると、逆に別の場所で新たな無限ループを生み出してしまう。
| ハイパーパラメータ | 推奨値 | 役割 |
|---|---|---|
| LoRA rank | 128から256 | rankが高いほど柔軟に学習でき、副作用も小さい |
| 学習率 | 4e-6から2e-5 | 早期停止と組み合わせて過学習を防ぐ |
| 早期停止 chosen_win | 0.35前後 | この値に達したら止める |
| chosen候補数 | 最大20個 | 確率を一群の代替語に分散させる |
| 学習エポック数 | 通常1エポック | 学習しすぎると新たなループを生む |
| 学習対象モジュール | 全アテンション/MLP層 + lm_head | 全層を学習したほうが効果が高い |
コストはどれくらい低いのか。LFM2.5-2.6Bの初期チェックポイントを例に取ると、学習セットの生成に約1時間(MI325 GPU 8枚)、学習自体に約1〜2時間(MI325 GPU 1枚)かかる。生成段階は2万組のサンプルが集まった時点で打ち切る。
コードはすでに公開済み、自分で再現できる
この手法は完全にオープンソース化されており、誰でもそのまま再現できる。
生成、検出、FTPOトレーナーの一式コードはすべてGitHub(Liquid4All/antidoom)に置かれており、READMEには完全なハイパーパラメータ選定ガイドが付属している。使用されているプロンプトデータセットLiquidAI/antidoom-mix-v1.0は純粋なプロンプトのみで構成され、標準解答、推論プロセス、隠しテスト、正解ラベルは意図的にすべて除外されている。役割はあくまで無限ループを誘発することにあり、新しい知識を教えることは一切ない。
つまり、推論モデルを手元に持つチームなら理論上、自分のモデルに対して同じ流れをそのまま再現でき、事前学習をやり直す必要はない。環境を整えれば、「生成+学習」の完全な流れが一行のコマンドで完了する。
git clone https://github.com/Liquid4All/antidoom cd antidoom uv sync uv run antidoom -c configs/default.yaml -r runs/antidoom1 \ --temp 0.01 \ --model-name LiquidAI/LFM2.5-1.2B-Base
NVIDIA専用というわけでもない。AntidoomはAMD Instinct MIシリーズGPU(ROCm環境)でも同様に動作し、Nvidia GPUを持たないチームにも道を残している。
ROCm環境ならではの2つの変更点
AMD(MI325 / gfx942で検証済み)で動かすには、専用のROCm仮想環境を立て、configs/default_amd.yamlを使う必要がある。vLLMのアテンションバックエンドをTRITON_ATTNに切り替えている(ROCmのデフォルトのアテンションカーネルはLFM2でメモリエラーを起こす)。また、オプティマイザはadamw_torchに変更されている(ROCmでは扱いにくいbitsandbytes依存を回避するため)。
結果:2つのモデルとも無限ループ発生率を約1%まで抑え込んだ
2つのモデルとも学習後、無限ループ発生率が1%前後まで下がった。
LFM2.5-2.6Bの初期チェックポイントは10.2%から1.4%まで低下し、評価スコアも全面的に向上した。この向上はすべて無限ループの減少に由来する。学習セット自体は新しい数学やコードの知識を一切教えていない。ただ、モデルと答えの間にずっと立ちはだかっていた障害物を取り除いただけで、モデルはもともと自力で到達できたはずの答えにたどり着けるようになった。Qwen3.5-4Bはさらに効果が大きく、greedyサンプリング下で22.9%から1%まで低下し、評価スコアも大幅に上昇した。
意外な発見:温度は高ければ高いほど賢いわけではない
学習の過程で、直感に反する結果もついでに浮かび上がってきた。
業界にはずっと「推論モデルは比較的高いサンプリング温度を使うべきだ、そのほうがより広い範囲でさまざまな解法を試せる」という説がある。しかしAntidoomで学習したモデルは、temp=1.0でむしろ性能が落ちた。理由はさほど複雑ではない。学習前は、低温域のスコアがずっと無限ループに足を引っ張られていた。いったん無限ループが取り除かれると、greedyサンプリングに近い低温域のほうがむしろスコアが最も高くなる。これまでの「高温度のほうが良い」という経験則は、実は高温度によって無限ループが部分的に覆い隠されていた効果を、温度そのものの利点だと誤解していた可能性が高い。
2つのモデルはどちらも同じパターンを描いている。学習前は、低温域のスコアが無限ループに引っ張られて低くなり、学習後は低温域が最も良く、temp=1に近づくとやや低下する。
実践では複数回のAntidoomを行うこともできる。1回目でループを起こしやすい語を抑え込んだ後、別の箇所で新たな問題が露呈することがある——それまで目立たなかった一部のトークンが新しいループの起点になってしまうのだ。もう1周回すことで、この新たに現れたループにピンポイントで対処し、無限ループ発生率をさらに押し下げることができる。
学習セットはモデルに新しい数学やコードの知識を何も教えていない。ただ、モデルをずっと妨げ、本来なら到達できたはずの答えにたどり着けなくしていた、あの失敗パターンを取り除いただけだ。Liquid AI · Antidoom ブログ
- GitHub · Liquid4All/antidoom:生成、検出、FTPOトレーナーの全コード
- Hugging Face · LiquidAI/antidoom-mix-v1.0:学習用プロンプトデータセット
- Paech et al., 2026 · Antislop:Antidoomが改良した単一トークン偏好学習の発想元となった論文
- Rafailov et al., 2023 · Direct Preference Optimization:FTPOのベースとなったDPOの原論文
- Duan et al., 2026 · Circular Reasoning:無限ループの「V字型」アテンションパターンに関する研究
- Holtzman et al., 2020 · The Curious Case of Neural Text Degeneration
- Welleck et al., 2020 · Neural Text Generation with Unlikelihood Training
- Pipis et al., 2025 · Wait, Wait, Wait... Why Do Reasoning Models Loop?
AI推論モデルが壊れたレコードのように詰まる問題、これまではモデル全体の再学習が必要だったが、今は言葉1個変えるだけで直せる
Liquid AIがAntidoomをオープンソース化した。無限ループの起点となる言葉1個だけを微調整するだけで、2つの推論モデルのループ発生率がどちらも約1%まで下がった。1ページで図解。
↓ 1ページで読了 · 動く図が1つあります
推論モデル(人が問題を解くように"考えながら計算"し、一歩ずつ導出を書いていくAI)には、よくある翻車パターンがある。「無限ループ」と呼ばれるものだ。
まず短い一文、たとえば「Wait, let me reconsider(ちょっと待って、考え直そう)」を吐き出し、そのあとこの一文を延々と繰り返す。答えは最後まで出てこない。
✘ いったん詰まると、同じ一文を繰り返し唱え続けて止まらない
コンテキストウィンドウ(モデルが一度に処理できる文字量の上限)を焼き尽くしても答えが出ない。小規模な推論モデルほど、難問ほど陥りやすい
Liquid AIは2026年7月7日、無限ループを専門に直す学習手法Antidoomを発表しオープンソース化した。
それ以前は2つの道しかなかった。推論時にrepetition_penalty(すでに出現した語の重みを一時的に下げるスイッチ)を加える方法は、絆創膏を貼るようなもので、正常な出力まで一緒に引きずり下げやすい。あるいは強化学習(報酬信号を使ってモデルを繰り返し学習させる手法)でモデル全体を再学習する方法は、コストが高く報酬設計も難しい。Antidoomは発想を変えた。モデル全体は動かさず、「無限ループの起点となるその言葉1個」だけを学習する。
重複語を無差別に抑え込むか、再学習にコストと丹念な報酬調整を要するかのどちらかだった。
無限ループの起点となる言葉1個だけを変える。GPU1枚、数時間で終わり、それ以外の出力はほとんど影響を受けない。
でも言葉1個変えるだけで、なぜ症状が治るのか?まず無限ループがどこから来るのかを見てみよう。
無限ループはランダムな不具合ではなく、3つの力が重なって生じるものだ。
①一部の高頻度語(the、So、Waitなど)は、モデルが詰まって次の一歩に確信が持てないとき、手っ取り早い「保険的な選択肢」になる。②繰り返すたびに、この一文が再び選ばれる確率が1に近づいていき、自己強化される。③推論では低温度サンプリング(ほぼ毎回、確率が最も高い語を選ぶ)がよく使われ、ループがいったん形成されると出口がなくなる。Antidoomがやっているのは、文全体をループに引き込んだその最初の言葉を見つけ出し、その1マスの確率だけを再学習し、より首尾一貫した代替候補にいくつか振り分けることだ。それ以外の数万語はそのままにする。
小互が難しい数学問題をモデルに解かせているところを想像してほしい。すでに「Wait」を十数回繰り返し、コンテキストがもうすぐ焼き尽きそうな場面だ:
一般の人にも実感しやすい言い方にすると: 難問100問を解かせたとき、無限ループに陥って計算資源を無駄に焼き尽くしてしまう問題数だ。
Wait, let me reconsider…
Wait, let me reconsider…
Wait, let me recons、
コストも時間もかかる…
- × repetition_penalty: 絆創膏のようなもので、正常な出力まで一緒に引きずる
- × 強化学習: コストが高く、報酬設計も丹念に調整が必要
言葉1個だけ変える
直るんだ?
ほぼ満杯まで押し上げられる
→ 1%
→1.4%
コードも全部オープンソース
「モデル全体の再学習」から
「言葉1個変える」にまで簡略化された
