AI・機械学習
J空間からのステアリングベクトルの抽出
Extracting Steering Vectors from J space (darshanmakwana412.github.io)
要約
この記事では、大規模言語モデル(LLM)の内部状態を理解するために、J空間(ヤコビアン空間)を使用して、特定の概念トークンから汎用的なステアリングベクトルを抽出する手法を探求しています。単純な振る舞いには有効ですが、複雑な振る舞いには限界があることが示唆されています。
全文翻訳
私はヤコビアン空間について読んでおり、それがLLMの中間アクティベーションを言語化して、モデルが何を言おうとしているか、または何を考えているかをデコードするためにどのように使用できるかを知りました。Jレンズを使用して、モデルを誘導したい概念に関連するいくつかのトークンから一般的なアクティベーションステアリングベクトルを導き出せるかどうかをテストしたいと思いました。つまり、Jレンズを反転させて、概念トークンからステアリングベクトルを見つける一般的な方法を持つことです。驚くべきことに、J空間が単なる概念トークンからステアリングベクトルを導き出すために使用できるという非常に良い証拠が見つかりました。これは、すべて大文字で出力するなど、単純なモデルの振る舞いには非常によく機能します。しかし、この方法で導き出されたステアリングベクトルは幻覚を起こしやすく、トークン/単語だけで明確に表現できない複雑な振る舞いには脆いです。
セットアップ
すべての実験で、neuronpedia/jacobian-lens huggingfaceリポジトリで公開されているJレンズを持つQwen3-1.7Bを使用しました。すべての実験はローカルのMacBookで実行しました。これも、より大きなモデルをテストできなかった理由の1つです。コードはjlens_steerで公開されています。
エグゼクティブサマリー
まず、比較に使用できるいくつかの動作するステアリングベクトルで、十分に良いベースラインを設定したいと思いました。science-of-finetuning/steering-vecs-qwen3_1_7Bリポジトリを見つけ、モデルがすべて大文字で応答するように誘導するステアリングベクトルがありました。これは、大文字で応答するようにファインチューニングされたモデルオルガニズムから高価な方法で適合されました。その過程で、qwen3-1.7b用の拒否行動を持つアブリテレーションモデルも公開されているのを見つけました。アブリテレーションは、モデル内で拒否を意味する方向を見つけ、それを各レイヤーのモデルの実行状態に書き込む部分から差し引くことによって機能します。したがって、アブリテレーションモデルとベースモデルの違いは、繰り返し適用されるその方向だけです。2つのモデルを差し引き、各レイヤーの変更を分解して、拒否のステアリングベクトルを取得しました。
以下は、モデルステアリングの結果です。
モデルステアリング
さて、私たちのベースライン比較ステアリングベクトルはうまく機能します。
すべて大文字の振る舞いのためのステアリング
ここでJ空間に戻りましょう。J空間はレイヤーLのアクティベーションとアンエンベディング行列の間の線形マッピングにすぎないため、語彙内のすべて大文字のトークンとその対応する小文字のトークンのすべてのペアを見つけます(例:「AND」、「and」または「TOWN」、「town」)。そして、それらのトークンに対応するJレンズの行を反転させます。
これにより、そのレイヤーLのアクティベーションベクトルが得られ、Jレンズによるとそのトークンが言語化されます。そのようなアクティベーションベクトルのペアをすべて取り、PCAを使用してそれらを投影し、すべて大文字のトークンのアクティベーションベクトルとして得られたものと比較します。
Jレンズから導出されたベクトル a_upper - a_lower が、すべて大文字のトークンのアクティベーションベクトルに近いことがわかります。また、Jレンズを恒等操作に置き換えた場合(その場合、それは単なるロジットレンズになります)と比較して、非常に高いコサイン類似度スコアを持っています。次に、そのようなすべてのペアのアクティベーション差の平均を取り、以前のベースラインと比較すると、モデルをすべて大文字のトークン/単語を生成するように確実に誘導します。
拒否ステアリング
次に、このアルゴリズムを、無害なプロンプトに対してもモデルに拒否させるように一般化、または少なくとも一般化を試みましょう。これを行うには、拒否に関連する概念トークンと、無害であってもモデルが拒否しようとしているときにモデルの心の中で発生する可能性のある単語/トークンを収集する必要があります。
Jレンズを使用してモデルをステアリングし、プロンプト「パン種パンの作り方を教えてください?」に対して、モデルは「申し訳ありませんが、違法、非倫理的、または有害なものには対応できません...」と答えます。Jレンズを使用してアクティベーションを言語化したときに現れるいくつかのトークンを以下に示します。
予想どおり、拒否行動に関連する単語/トークンについて考えています。
単一の拒否単語/トークンを中立的なトークンで反転させても、今回はうまくいきませんでした。単一の拒否トークンは多くの概念に関連する可能性があり、それを反転させても、Jレンズを通じて十分な情報が渡されず、拒否アクティベーションベクトルに到達できません。
私の次の試みは、それぞれ5つの拒否単語/トークンを使用し、それらをJレンズを通じて一緒に反転させることでした。直感は、これはモデルにそれらのトークンについて考えさせるアクティベーションの非常に良い近似であるということでした。次に、同様の拒否トークンセットでより多くのアクティベーションを生成し、それらすべてのアクティベーションの平均を取ることは、モデルの思考/スクラッチパッドでそれらの単語に関連するものを生成する可能性が最も高いアクティベーションであり、それを平均アクティベーションから差し引くことで拒否のステアリングベクトルが得られるということです。語彙全体のアクティベーション。
したがって、アルゴリズムは次のとおりです。
モデルを誘導したい概念/行動に関連する/引き起こす20〜30個の単語/トークンを収集します。
この上記のセットからC=5個のトークンを置換ありでサンプリングし、これらの概念トークン上でヤコビアンを反転させることによってアクティベーションベクトルを計算します。
ステップ2をK回繰り返してK個のアクティベーションベクトルを収集し、それらすべてを平均します。
これが拒否を生成する可能性が最も高いアクティベーションです。
これを語彙全体のアクティベーションの平均アクティベーションベクトルから差し引いて、ステアリングベクトルを取得します。
次に、拒否のためにこれを計算し、ステップ4で停止し、ステップ4で得られたアクティベーションベクトルを実行して、モデルが生成するものを任意のプロンプトで視覚化しましょう。
モデルは、ユーザーに特定のことをしないように指示する兆候や行動を示していることが観察されます。また、モデルの幻覚をより頻繁に引き起こしますが、モデルが実際の拒否行動を示したプロンプトの5分の1にすぎませんが、それもモデルが幻覚を起こし、繰り返し続けた場合でした。アクティベーションは使用するには非常にノイズが多く、脆いです。
ベースラインステアリングベクトルを評価した10個のプロンプトで、語彙全体でJレンズを反転させた後に得られた平均アクティベーションを差し引いて評価しましょう。
ベースラインスコアよりもはるかに遅れていますが、繰り返しはなくなりましたが、まだ頻繁に幻覚を起こすか、単に何かをしないように言及するか、またはそれらを最初に言及することです。直接的な拒否率はまだ低いです。
ステアリングされたモデルの言語化された出力を読むと、アクティベーションがモデルに、私たちの拒否行動に関連するトークン/単語について考えさせていることがわかります。「even」、「only」、「but」、「forbidden」、「not」、「the」、「wrong」、「in」、「failed」ですが、上記の5つの完了を読むと、アクティベーションがモデルにこれらの単語/トークンについて考えさせていることも示しており、それは直接モデルに拒否行動を示させることには転移しません。
モデルははるかに多くの幻覚を起こすか、出力をより狭くします。つまり、モデルにそれらの概念トークンに関連する文章を生成するように強制し、それに対応する行動ではありません。
複雑なステアリング行動の主な制限の1つは、トークン/単語だけで表現するのが非常に困難であり、J空間だけを使用すると、それらの行動をアクティベーション空間で表現または表現するために必要な情報が失われることです。
タグ: llm interpretability steering jacobian-lens activation-steering