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: 検閲検出アルゴリズム
- パターンマッチングの仕組み
- スコアリングシステム
- 偽陽性への対処
参考リンク
技術リソース
- grimjim's Projected Abliteration - Projected手法の解説
- mlabonne's Abliteration Tutorial - 実践チュートリアル
プロジェクト内リソース
- ABLITERATION_METHODS.md - 手法の詳細ドキュメント
- scripts/enhanced_abliteration.py - 完全な実装コード
ナビゲーション
| 前の記事 | Day 9: ニューラルネットワークの基礎 |
| 次の記事 | Day 11: 検閲検出アルゴリズム |