TL;DR
-
重み・追加データいじらず、推論器(デコーダ)だけを改造:
① 層コンセンサス(中間層ロジットをJSD重みで統合)
② MC合議(最終隠れ状態にDropoutを注入してK本平均) - Colabで再現できるノート付き。greedy / max_new_tokens=1024で比較。
- 手元の難問5題では、Layer-Consensus(A)が最も堅実、MC合議(B)は長尺で冗長化が出やすい。
配布ノート:Open In Colab
ねらいと前提
- ねらい:学習なしで、取り違え・冗長化の抑制など「体感」を改善できるかを検証。
- 前提:モデル改造=推論器(デコード時処理)に限定。重み・追加データは一切使いません。
比較する3モード
-
Baseline:最終層ロジットのみで次トークン決定(合議なし)。
-
Consensus-A(層コンセンサス)
-
output_hidden_states=Trueで選択層の隠れ状態を取り出し、lm_headで語彙ロジット化。 - 各分布を Jensen–Shannon 距離に基づく重みで合成し、元の最終分布と blend。
- 不一致ゲート:平均JSDが閾値超え時に温度を下げ、上位語彙のユニオン以外を抑制。
-
-
Consensus-B(MC合議)
-
モデルはevalのまま、最終隠れ状態
h_lastにだけ Dropout を注入して K本サンプリング。 - それぞれを
lm_headに通して分布を平均(Aの合議に併載)。 - repetition penalty を強めに設定(暴走抑制)。
- 注:層の再前向きはしないため、キャッシュ破壊なしでオーバーヘッドは軽微(
lm_head相当×K)。
-
モデルはevalのまま、最終隠れ状態
いずれも LogitsProcessor相当の実装方針で、モデル重みは不変。vLLM等でも常時ON運用がしやすい設計です。
実験条件(ノート既定値)
-
モデル:
Qwen/Qwen2.5-1.5B-Instruct -
System:公式デフォルト(= userメッセージのみをchat templateに通す)
-
生成:
do_sample=False(greedy)、max_new_tokens=1024 -
外部ツール/フォーマットクランプ:不使用
-
ハイパラ(抜粋)
- A:
layer_select=(0.33,0.66,-1.0),blend=0.55,jsd_gate=0.06,agree_top_k=60,rep_penalty=1.1 - B:A+
mc_k=3,mc_p=0.1,blend=0.45,rep_penalty=1.12
- A:
問題セット(暗記不要な短推論/手続き系・5題)
- 二段算術(括弧+割算)
- うるう年境界の 曜日
- 論理(A→B, B→C, ¬C ⇒ ¬A ?)
- 三段ソート(得点↓ → 日付↑ → 名前↑、名前のみ出力)
- 文字列操作(母音除去 → 逆順)
正答(参照)
- Q1:(((97×43 − 58×29) + (125×16 − 2048)) ÷ 7) = 2441 / 7 = 348.7142857…
- Q2:2000-02-28 → +3日 = 2000-03-02(木)
- Q3:はい。理由:A→C が成り立ち、¬C なら ¬A(モーダス・トーレンス)
- Q4:kato, abe, sato, suzuki
- Q5:
'algorithmic'→ 母音除去lgrthmc→ 逆順cmhtrgl
結果(このノートの実行例)
- Q2(曜日):Baseline / A / B 全員正解。
- Q3(論理):A が正解、Baseline/B は理由に破綻。
- Q1・Q4・Q5:全体に崩れ(冗長化・取り違え・出力形式逸脱)が見られ、Aが相対的にマシだが満点ではない。
- 合計(5題中):Baseline 1/5、A 2/5、B 1/5(実行ログ準拠)。
所感
- A(層コンセンサス)は取り違え抑制に効きやすい。
- B(MC)は多様性が出る一方、長尺(1024)で冗長化しやすい。
- 公式System固定・クランプなしのため、出力の短文化はプロンプト/パラメータ次第。
すぐ試せる調整(学習なし)
-
Aを堅実寄り:
blend=0.50、jsd_gate=0.08、agree_top_k=40、rep_penalty=1.25 -
Bの暴走抑制:
mc_k=2、mc_p=0.08、blend=0.40、rep_penalty=1.30 - 実装側の小改良(必要なら):JSD重みの鋭さ(例
alpha=12)、n-gramブロック(3-gram重複の強制抑止)、早期停止(改行/句点で停止)など。
使い方
- ノート(上の配布用)を開き、上から順に実行。
- 1枚GPUでOK(
Device: cudaを確認)。 - モデル変更は
MODEL_IDのみ。ハイパラはCFG_A/CFG_Bを編集。 - 出力は逐次
printで、各問 Baseline → A → B の順に表示。
まとめ
- 学習なしでも、層コンセンサス+MC合議の推論器改造で、Qwenの取り違え/冗長の抑制を狙える。
- 今回の設定では A が最も安定。B はケースによって有効だが、長尺では冗長化しやすい。
- いずれも 重み不変・常時ON運用に向く実装で、試行コストが低い。まずは A常用+Bは状況併用が無難。