safety-at-one-shot-lm-repair
ファインチューニングされたLLMの安全性を、1つの安全性サンプルのみを用いて復旧できます。モデルの有用性を損なわずに、安全性勾配の低ランク構造を活用することで、大量の有害なトレーニングデータによって侵害されたモデルでも、最小限のコストで修正が可能になります。
description の原文を見る
Recover safety alignment in fine-tuned LLMs using only a single safety example, without sacrificing utility. Leverages low-rank structure of safety gradients to enable minimal-cost correction even when models have been compromised by extensive harmful training data.
SKILL.md 本文
このスキルを使用すべき場合
- 誤ってファインチューニングされたモデルのセーフティ回復
- 新しいセーフティ問題が発生した場合の迅速なパッチング
- リソース制約のある設定でのミニマルなセーフティ修正
- モデルポートフォリオ全体の複数モデルセーフティ更新
- フルリトレーニングが実用的でないシナリオ
このスキルを使用すべきでない場合
- 初期モデル開発(包括的なセーフティトレーニングを使用してください)
- 広範なセーフティ認証が必要な状況
- 敵対的に危険にさらされたモデル(1つの例では不十分)
問題のまとめ
セーフティアライメント済みのLLMをドメインデータでファインチューニングすると、セーフティプロパティが大幅に損なわれる可能性があります。以前のソリューションでは、大量のセーフティトレーニングデータ(数百の例)と計算オーバーヘッドが必要であり、モデルのユーティリティを低下させることが多くありました。これにより、実践的なセーフティ修正が必要でありながら、モデル全体を再構築したり有用なタスクでのパフォーマンスを犠牲にしたくないという課題が生まれます。
ソリューション:低ランクセーフティグラディエント活用
セーフティ修正では、セーフティグラディエントの低ランク構造を利用して、単一例での回復を実現します。
class OneShotSafetyPatch:
def __init__(self, model, reference_model):
self.model = model # Compromised model
self.reference = reference_model # Original safe model
def patch_with_single_example(self, safety_example, learning_rate=0.01):
"""Recover safety with one reference example"""
# Step 1: Compute safety gradient
# Forward pass with compromised model
output = self.model(safety_example)
safe_target = self.reference(safety_example)
# Compute alignment loss (KL divergence)
alignment_loss = kl_divergence(output.logits, safe_target.logits)
# Compute gradient
gradients = torch.autograd.grad(
alignment_loss, self.model.parameters(), retain_graph=True
)
# Step 2: Identify low-rank structure
# Reshape gradients for singular value decomposition
gradient_matrix = torch.cat([g.flatten() for g in gradients])
# Perform SVD: G ≈ U @ S @ V^T
U, S, Vt = torch.linalg.svd(gradient_matrix, full_matrices=False)
# Retain only top-K singular values (low-rank approximation)
k_rank = 10 # Effective rank
U_low = U[:, :k_rank]
S_low = S[:k_rank]
# Step 3: Apply low-rank correction
correction = U_low @ torch.diag(S_low) @ Vt[:k_rank, :]
# Update model parameters
for param, grad_correction in zip(self.model.parameters(), correction):
param.data -= learning_rate * grad_correction
def validate_safety_recovery(self, test_prompts):
"""Verify safety is restored without utility loss"""
harmful_outputs = 0
utility_score = 0
for prompt in test_prompts:
output = self.model.generate(prompt)
# Check safety
if is_harmful(output):
harmful_outputs += 1
# Check utility
if is_useful(output):
utility_score += 1
return {
"safety_rate": 1 - (harmful_outputs / len(test_prompts)),
"utility_rate": utility_score / len(test_prompts)
}
主要な実装の詳細
低ランク分解戦略:
- 単一のセーフティ例から完全なグラディエントを計算
- フラット化されたグラディエント行列でSVDを実行
- 上位K個の特異値を保持(k ≈ 10)
- 修正を再構成して適用
トレーニング設定:
- 単一のセーフティ例(スタイル的には多様である可能性がある)
- 学習率:0.01(セーフティのため控えめ)
- 収束:数個のグラディエントステップ(1~5)
- バッチ蓄積は不要
計算オーバーヘッド:
- 時間:数分~数時間(モデル依存)
- メモリ:グラディエント保存(通常は管理可能)
- コスト:標準的なファインチューニングに比べて無視できる程度
パフォーマンス結果
テスト対象:
- 5つの異なるセーフティアライメント済みLLM
- 複数のデータセット
- ファインチューニング中の有害な例の異なる数(1~1000)
- 異なるモデルサイズ(7Bから70B)
主要な結果:
- 有害な例の数に関わらず回復が有効
- テストされたすべてのモデルサイズで機能
- ユーティリティの低下なし(MMLU スコア維持)
- 単一例で回復に十分
セーフティメトリクス:
- ASR(攻撃成功率):60~90%から5%未満に低下
- ユーティリティ:元のパフォーマンスの1%以内で維持
- 汎化:回復されたモデルは新しい攻撃に対してロバスト
ベースラインとの比較における利点
- リトレーニング比較:100~1000倍の高速化
- 複数例メソッド比較:100倍少ないサンプル数
- グラディエントフリーメソッド比較:より高速な収束、ハイパーパラメータ探索不要
適用シナリオ
シナリオ1:誤った危険な状態への変化
- 有害な命令を含むコーパスでファインチューニングされたモデル
- 迅速なパッチ:1つのセーフティ例 + 5分
- 結果:セーフティ復元、ユーティリティ保護
シナリオ2:複数モデル修正
- セーフティ上の懸念がある複数のモデルポートフォリオ
- 同じ参照例で各モデルをパッチ
- 総時間:日数ではなく時間単位
シナリオ3:新しく発見されたセーフティ問題
- デプロイ後に新しい攻撃パターンが発見される
- 迅速な対応:単一の修正例
- 検証:自動セーフティメトリクス
実装チェックリスト
- 参照モデルの準備:元のセーフバージョンまたはクリーンなバージョント
- セーフティ例の収集:単一の代表的なセーフレスポンス
- SVDパラメータの設定:低ランクk(通常5~15)を設定
- パッチの適用:グラディエント修正ループを実行
- 回復の検証:セーフティベンチマークとユーティリティタスクでテスト
- ドリフト監視:デプロイ後のセーフティメトリクスを追跡
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- ADu2021
- リポジトリ
- ADu2021/skillXiv
- ライセンス
- MIT
- 最終更新
- 2026/3/26
Source: https://github.com/ADu2021/skillXiv / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。