JA ▾
API キーを取得

Abliteratedモデルの作り方:簡潔な解説

Abliteratedモデルは、安全性の拒否を強制するメカニズムが除去された大規模言語モデルです。これにより、モデルはコンテンツフィルターに引っかかることなく、論争の的となる質問、成人向けの内容、またはニッチな質問に回答できます。このアプローチにより、開発者はモデルのトーンと知識のカットオフを完全に制御でき、標準的なガードレールが有用な出力をブロックする可能性があるコーディング、ロールプレイ、クリエイティブライティングにおいて特に価値があります。

ニューラルネットワークを表すガラス球から、機械アームによって琥珀色のビームが取り除かれている様子

主要ポイント

  • アブリレーションはモデル内の拒否方向を測定し、重みから投影して除去します。
  • これは再学習ではなく編集であるため、低コストですが、回答の品質が少し低下する可能性があります。
  • ファインチューニングは例でトレーニングして動作を変更しますが、アブリレーションは1つの方向を減算して変更します。
  • 構築する前に、短いテストセットでそのようなモデルを評価できます。

簡易版

安全トレーニングを経た言語モデルは、いくつかのリクエストを拒否する傾向があります。研究者たちは、この拒否行動がモデルの内部活性化における単一の方向によって仲介されていることを発見しました。この方向を取り除くと、モデルはほとんどの場合拒否しなくなります。「アブリレーション」という名前は、「アブレーション(構成要素の除去)」と「obliterate(完全に破壊する)」の合成語です。

では、実際にはアブリレーション済みモデルはどのように作成されるのでしょうか? 4つのステップがあります:2つのプロンプトセットを収集し、各プロンプトに対するモデルの活性化を記録し、方向を得るために差分を計算し、モデルがその方向に沿って書けなくなるように重みを編集します。次のセクションでは、複雑な数学なしで各ステップを解説します。

ステップ 1:2つのプロンプトセット

モデルが通常拒否するプロンプトのセットと、通常応答するプロンプトのセットが必要です。各セットには数百の短い指示が含まれます。セットの長さとスタイルは似ている必要があり、それらの間に系統的な違いが生じるのは、モデルが拒否するかどうかだけであるようにします。有害なセットがすべて長く、無害なセットがすべて短い場合、結果として得られる方向には長さが部分的にエンコードされ、ノイズが加わります。

プロンプトは測定用の入力です。それらに対してトレーニングは行われず、モデルの回答も使用されません。

ステップ 2:拒否方向の特定

トランスフォーマーはベクトルとしてテキストを処理し、多くの層を通過します。選択した層で、両方のセットのすべてのプロンプトについて、最後のプロンプトトークンのベクトルを記録します。次に、各セットのベクトルを平均化し、一方の平均から他方を減算します。結果は「通常応答」から「拒否」へ向かう単一のベクトルになります。長さを1に正規化すると、拒否方向が得られます。

通常はいくつかのレイヤーを試して、検証用プロンプトセットで方向の除去が最も効果的に機能するものを選択します。レイヤーの選択は、プロセスの中で最も手作業が必要な部分です。

import numpy as np

# acts_bad, acts_good: arrays of shape (n_prompts, hidden_size)
direction = acts_bad.mean(axis=0) - acts_good.mean(axis=0)
direction = direction / np.linalg.norm(direction)

# remove the direction from a weight matrix W that writes into the residual stream
W_edited = W - np.outer(direction, direction) @ W

実際の実装では、各レイヤーの複数の重み行列にこれを適用しますが、アイデアはこれら3行のコードに表れています。

ステップ 3:重みの編集

方向が決まったら、それを使用する方法は2つあります。モデルの実行中に活性化からその方向を減算する方法(カスタム推論コードが必要)と、残差ストリームに書き込むすべての行列をその方向に対して直交化することで重みに組み込む方法です。2つ目のアプローチが一般的です。編集されたモデルは、任意のランタイムが読み込める通常のチェックポイントになるためです。これが、アブリレーション済みモデルが一般的なダウンロードとして公開される理由です。

編集は決定論的で高速です。モデルを保持できるGPU上で数分で完了します。トレーニングランでは数時間から数日かかるのに対し、比較すると短時間で済みます。

アブリレーションとファインチューニングの違い

両方とも、拒否が少ないモデルを生成できますが、動作原理は異なります。

アブリレーションファインチューニング
変更点重みは1つの方向から投影されて除去される重みは例に対する勾配降下法で更新される
必要なデータ測定用の2つの小さなプロンプトセットキュレーションされたトレーニングセット
計算リソース数分から1時間数時間から数日
副作用推論能力が低下したり、トーンが変化したりする可能性があるデータに依存します。新しいスタイルや知識を学習させることができます。
制御粗い:方向のオンオフのみ良い:データで行動を形成できます

一部の作成者は両方を組み合わせます:まずアブリレーションを実行し、その後、失われた品質を回復するために短いファインチューニングを実行します。新しいツールでは、最適な層と強度の検索も自動化されており、編集によりモデルへの影響を最小限に抑えながら拒否を除去します。特定のモデルがどのアプローチで生成されたかは、通常、モデルカードに記載されています。

品質へのコスト

方向の除去は粗い編集です。拒否方向は他の特徴と完全に分離されているわけではないため、それを投影すると他の行動が変化することがあります。報告されている副作用には、推論テストでのパフォーマンスの若干の低下、奇妙なフォーマット、および場合によっては、有用な詳細ではなく無頓着に有害なリクエストに応答するモデルが含まれます。この効果はベースモデルと編集の適用の積極度によって異なります。

二つの要因が劣化を軽減します。一つは、テストセットで拒否を除去するために必要な変更が最も小さくなるようなレイヤーと強度を選択することです。もう一つは前述の修復ファインチューニングです。どちらの手法も編集を完全に無害にするわけではありません。そのため、ラベルを過信せず、独自のタスクでモデルをテストしてください。

よくある誤解

「新しい知識を追加する。」 いいえ。編集は動作のみを除去します。ベースモデルがトピックを知らなかった場合、アブリレーション版もそれを知らないでしょう。単に、元のモデルが拒否した場所に回答を試みるようになるだけです。

「すべての安全性が除去される。」 測定された拒否方向のみが除去されます。ヘッジ表現や道徳的な余談など、他の特徴にまたがる学習された習慣は残る可能性があります。編集後も、一部のモデルは免責事項を追加することがあります。

「大きなモデルは編集しやすい。」 結果は様々です。大きなモデルはより多くの予備容量を持っているため、編集に対してより耐性がある傾向がありますが、2つのプロンプトセットの品質が純粋なサイズよりも重要です。

「モデルカードにはすべてが書かれている」 カードは意図を説明するものです。それらには、あなたが使う種類のプロンプトに対する拒否率が記載されていることは稀です。独自の40プロンプトのテストには10分かかり、カードよりも多くのことを教えてくれます。

「結果は常にベースモデルに対して同じです。」 いいえ。異なるプロンプトセット、層、強度は異なる編集を生成するため、同じベースで構築された2つのモデルは大幅に異なる動作をする可能性があります。それらが一致すると想定するのではなく、直接比較し、テスト結果を記録する際はバージョンを明記してください。

ホスト型でもローカルでも、責任あるサービスには1つの制限があります。未成年者を性的に描写するコンテンツは対象外であり、このサイトでの拒否編集は、このルールを変更するものではありません。

構築前にモデルを評価する方法

実際の用途に一致する30〜50個のプロンプトで短いテストファイルを作成してください。生成する予定のフィクション、分析、またはコードのタイプを含めます。要約や事実質問への回答など、いくつかの通常のタスクを含め、一般的な品質が低下していないか確認してください。各候補に対して同じファイルを実行し、出力を読み取ります。拒否をカウントするだけでなく、一貫性、指示の遵守、および反復についても確認してください。

ダウンロードして重みをホストしたくない場合は、ホストされたエンドポイントに対してファイルを実行できます。このサイトの API は OpenAI 互換であり、合法的な成人用途向けにコンテンツ拒否なしで応答するように調整された1つのオープンウェイトモデルを、ID uncensoredで提供します。

curl https://api.abliterated.cc/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"uncensored","messages":[{"role":"user","content":"Summarize the plot of Hamlet in three sentences."}]}'

選択方法の詳細は、abliteratedモデルの概要をお読みください。キャラクター作成が目的の場合は、ロールプレイに最適なabliterated LLMのページをご覧ください。詳細はAPIドキュメントに記載されています。新しいアカウントは、カードなしで$0.50のトライアルクレジットを取得できます。この金額で、このサイズのテストファイルを実行するのに十分なクレジットが得られます。

質問と回答

アブリレーションには新しいトレーニングデータが必要ですか?

いいえ。活性化を測定するために少量のプロンプトセットが必要ですが、モデルはそれらでトレーニングされません。変更は重みの直接編集です。

アブリレーション済みモデルはジェイルブレイクと同じですか?

いいえ。ジェイルブレイクは、モデルが拒否しなくなるように説得しようとするプロンプトです。アブリレーションはモデル自体を変更するため、特別なプロンプトは必要ありません。

アブリレーションはモデルの品質を低下させますか?

しばしば、少し性能が低下します。推論スコアやスタイルが変化することがあります。特定のモデルについて知るための唯一の確実な方法は、独自のプロンプトでテストすることです。

自分で実行せずに使用できますか?

はい。ホストされたOpenAI互換APIを使用すれば、GPUなしでモデルを呼び出すことができます。ベースURLは https://api.abliterated.cc/v1 で、モデルIDは uncensored です。

キーはフォームを1つ埋めるだけで取得できます

アカウントを作成し、キーをコピーし、ベースURLを変更します。これでセットアップは完了です。