AI・機械学習
中級

LLM 自己精錬(Self-Refine)(エルエルエムじこせいれん)

LLMが自分の出力に対してフィードバックを生成し、そのフィードバックをもとに出力を反復的に改善する手法。追加訓練なしで品質向上が見込める。

0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
自己精錬
イテレーション
フィードバックループ
品質向上
プロンプト工学

LLM 自己精錬(Self-Refine)

Self-Refineは、LLMが「自分のアウトプットを批判し、改善する」という反復プロセスによって出力品質を向上させる手法です。

基本的な仕組み

入力 → [生成] → 初期出力
                   ↓
              [フィードバック生成]
                   ↓
              フィードバック
                   ↓
              [改善生成]
                   ↓
          改善後出力 → 停止条件チェック
                   ↓
          (繰り返し or 最終出力)

同一のLLM(例: GPT-4)が3つの役割を順番に担います。

3つの役割

1. Generator(生成者) 初期出力を生成。通常の推論と同じ。

2. Feedback Provider(批評者) 「この出力のどこに問題があるか」をリスト化。具体的な改善点を列挙。

3. Refiner(改善者) フィードバックを踏まえて出力を書き直す。

実験結果(Madaan et al. 2023)

タスクベースラインSelf-Refine (3回)改善幅
コード最適化60.070.2+10.2
ダイアログ応答65.473.1+7.7
数学ワードプロブレム52.161.3+9.2
キャプション生成40.055.0+15.0

停止条件の設計

実際の運用では適切な停止条件が重要です。

  • 固定反復数: N回で必ず停止(シンプルだが非効率)
  • 品質閾値: スコアが基準を超えたら停止
  • 収束判定: 前回との差が小さくなったら停止
  • 自己評価: モデル自身が「これ以上改善できない」と判断

限界と批判

Large Language Models Cannot Self-Correct Reasoning Yet(2023)という論文では、自己修正が必ずしも有効ではなく、むしろ悪化するケースがあると指摘。外部フィードバック(実行結果・ユーザー入力)がない場合は限界があります。

実装例(擬似コード)

def self_refine(problem, model, max_iter=3):
    output = model.generate(problem)
    for _ in range(max_iter):
        feedback = model.generate(f"Critique: {output}")
        if "no issues" in feedback.lower():
            break
        output = model.generate(f"Improve based on: {feedback}\n{output}")
    return output

まとめ

Self-Refineは追加訓練なしで出力品質を向上できる実用的な手法です。ただし外部検証なしの自己修正には限界があり、コード実行結果・ユニットテストなどの外部フィードバックと組み合わせることで真の効果を発揮します。

この記事について
カテゴリーAI・機械学習
難易度中級
作成日2026/6/7