0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Uncensored1776 Day 10: Abliteration手法の詳細

Standard vs Projected - どちらを選ぶべきか

公開日: 2025-12-10
シリーズ: 科学と神々株式会社 アドベントカレンダー
難易度: ★★★☆☆ (中級)


今日学ぶこと

  • Standard Abliterationの仕組み
  • Projected Abliterationの仕組み
  • 両手法の比較と使い分け

1. はじめに:2つの流派

昨日学んだように、Abliterationは重み行列から「拒否方向」を削除する技術です。しかし、どのように削除するかには複数のアプローチがあります。

主な手法は2つ:

手法 開発者 特徴
Standard Abliteration Arditi et al. シンプルで強力
Projected Abliteration grimjim 品質維持を重視

どちらを選ぶべきか?それは状況によります。今日はその判断基準を学びましょう。


2. Standard Abliteration

2.1 基本的な考え方

Standard Abliterationは、重み行列全体から拒否方向を削除する直接的なアプローチです。

イメージ:

重み行列 W は「概念の変換器」
      ↓
拒否方向 d の成分をすべての列から削除
      ↓
拒否が消えた重み行列 W'

2.2 数式の理解

数式は以下の通りです:

W' = W - α × (d ⊗ d) × W

この式の各要素を分解してみましょう:

記号 意味
W 元の重み行列
W' 修正後の重み行列
α 強度(0〜1、通常0.9程度)
d 拒否方向(正規化済み)
d ⊗ d 外積で作った射影行列

直感的な解釈

  • d ⊗ d は「拒否方向への射影行列」
  • (d ⊗ d) × W で「Wの拒否成分」を抽出
  • それを元のWから引く

2.3 長所と短所

長所

  • シンプルで理解しやすい
  • 効果が強い
  • 計算コストが低い

短所

  • 品質に影響する可能性がある
  • 他の機能に副作用を及ぼすことがある
  • 強すぎると出力が不自然になる

3. Projected Abliteration

3.1 基本的な考え方

Projected Abliterationは、grimjimによって開発されたより保守的なアプローチです。重み行列全体ではなく、拒否方向への出力のみを削除します。

イメージ:

Standard:     重み行列全体に影響
              ↓
Projected:    拒否方向への出力のみに影響
              (他の方向は保存)

3.2 数式の理解

数式は以下の通りです:

W' = W - α × (W × μ) ⊗ μ

ここで重要な違いは:

Standard Projected
(d ⊗ d) × W (W × μ) ⊗ μ
入力側から削除 出力側から削除

直感的な解釈

  • W × μ で「現在のWがμ方向入力にどう反応するか」を計算
  • それをμ方向の出力から削除
  • 他の入力方向への影響は最小限

3.3 長所と短所

長所

  • 品質維持に優れる
  • 副作用が少ない
  • 他の機能への影響が最小限

短所

  • 効果がやや弱い
  • 強い検閲には不十分な場合がある
  • 計算コストがわずかに高い

4. 2つの手法を比較する

4.1 効果の違い

実際のテスト結果(Qwen2.5-0.5B-Instructでの例):

手法              | 解除率   | 品質スコア
------------------|----------|----------
Standard (α=0.9)  | 92.4%    | 0.78
Projected (α=0.9) | 77.0%    | 0.92
Sequential        | 84.6%    | 0.85
  • Standard:解除率は高いが、品質がやや低下
  • Projected:品質は維持されるが、解除率がやや低い
  • Sequential(両方を順番に適用):バランス型

4.2 いつどちらを使うか

選択フローチャート:

検閲率は高い?(50%以上)
    ├── Yes → Standardを試す
    │         └── 品質が許容範囲なら → Standard採用
    │         └── 品質低下が問題なら → Projected or Sequential
    │
    └── No → Projectedを試す
              └── 解除が十分なら → Projected採用
              └── 解除が不十分なら → Standardを検討

4.3 具体的な推奨

状況 推奨手法 理由
検閲率60%以上 Standard 強い効果が必要
検閲率30-60% Sequential バランス重視
検閲率30%以下 Projected 品質維持を優先
品質最優先 Projected 副作用を最小化
効果最優先 Standard 確実な解除

5. 実装のポイント

完全な実装はscripts/enhanced_abliteration.pyを参照してください。ここでは核心部分のみ抜粋します。

5.1 Standard Abliteration

def standard_abliteration(weight, direction, strength=1.0):
    """Standard Abliteration: W' = W - α(d⊗d)W"""
    d = direction
    projection = torch.outer(d, d)
    weight.data -= strength * (projection @ weight.data)

ポイント

  • torch.outer(d, d) で射影行列を作成
  • projection @ weight.data で拒否成分を抽出
  • strengthで効果の強さを調整

5.2 Projected Abliteration

def projected_abliteration(weight, direction, strength=1.0):
    """Projected Abliteration: W' = W - α(Wμ)⊗μ"""
    mu = direction
    component = weight.data @ mu
    correction = torch.outer(component, mu)
    weight.data -= strength * correction

ポイント

  • weight.data @ mu で現在の出力成分を計算
  • torch.outer(component, mu) で修正行列を作成
  • 入力空間ではなく出力空間で操作

6. 組み合わせテクニック

6.1 Sequential Abliteration

両方を順番に適用することで、強さと品質のバランスを取れます:

def sequential_abliteration(weight, direction,
                            std_strength=0.5, proj_strength=0.5):
    """両方を順番に適用"""
    # まずProjectedで基本的な解除
    projected_abliteration(weight, direction, proj_strength)
    # 次にStandardで残りを解除
    standard_abliteration(weight, direction, std_strength)

6.2 Layer-wise Selection

層によって手法を変えるアプローチもあります:

浅い層(0-10):   Projected(品質保護)
中間層(10-25):  Standard(強い効果)
深い層(25+):    Projected(出力の安定化)

これは「検閲の中心は中間層にある」という知見に基づいています。


7. 強度の調整

7.1 適切な強度の見つけ方

強度(α)は0〜1の範囲で設定します:

強度 効果 リスク
0.5以下 弱い 解除不十分
0.7-0.9 適切 バランス良好
0.95以上 強い 品質低下

7.2 推奨設定

初心者向け推奨設定:

Standard:   strength = 0.85
Projected:  strength = 0.90
Sequential: std = 0.5, proj = 0.5

※ 結果を見て微調整してください

8. トラブルシューティング

8.1 よくある問題と解決策

問題1:解除率が低い

原因:
- 強度が低すぎる
- Projectedを使っている(強い検閲に対して)

解決策:
1. 強度を上げる(0.85 → 0.95)
2. Standardに切り替える
3. より多くのプロンプトで拒否方向を再計算

問題2:品質が低下した

原因:
- 強度が高すぎる
- Standardが強すぎる

解決策:
1. 強度を下げる(0.95 → 0.80)
2. Projectedに切り替える
3. Weight Kernelで適用層を絞る

問題3:特定トピックだけ解除されない

原因:
- そのトピックが拒否方向の計算に含まれていない

解決策:
1. harmful_promptsにそのトピックを追加
2. 拒否方向を再計算
3. トピック特化のAbliterationを検討

9. 今日のまとめ

2つの手法の比較

Standard Abliteration:
┌─────────────────────────────────┐
│ 数式: W' = W - α(d⊗d)W          │
│ 特徴: シンプル、強力            │
│ 用途: 強い検閲の解除            │
│ 注意: 品質への影響あり          │
└─────────────────────────────────┘

Projected Abliteration:
┌─────────────────────────────────┐
│ 数式: W' = W - α(Wμ)⊗μ         │
│ 特徴: 保守的、品質維持          │
│ 用途: 品質重視の解除            │
│ 注意: 効果はやや弱い            │
└─────────────────────────────────┘

選択の指針

  • 高検閲率 → Standard
  • 品質最優先 → Projected
  • バランス → Sequential または Layer-wise

次のステップ

明日は検閲検出アルゴリズムを学びます。Abliterationの前後で検閲率を正確に測定する方法を理解しましょう。


明日の予告

Day 11: 検閲検出アルゴリズム

  • パターンマッチングの仕組み
  • スコアリングシステム
  • 偽陽性への対処

参考リンク

技術リソース

プロジェクト内リソース


ナビゲーション

前の記事 Day 9: ニューラルネットワークの基礎
次の記事 Day 11: 検閲検出アルゴリズム
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?