Sparse Autoencodingを使用して、 GPT-2 smallでの回路発見
手動でインストールするには、これらのコマンドをシェルで実行するだけです。
git clone https://github.com/DavidUdell/sparse_circuit_discovery
cd sparse_circuit_discovery
pip install -e .
または、GitHubコンテナレジストリにDocker画像があります。 Dockerイメージは、リモートサーバーに引っ張るのに特に適しています。
操作の根拠はsparse_coding/config/central_config.yamlです。最も重要なハイパーパラメーターは、上部にクラスター化されています。
# Note: leave out entries for None. Writing in `None` values will get you the
# string "None".
## ------------------------------------------------------------------------- ##
## --------------------------- Key Hyperparameters ------------------------- ##
## ------------------------------------------------------------------------- ##
# ACTS_LAYERS_SLICE should be a Python slice, in str format. Set it to ":" to
# plot data from all model layers.
ACTS_LAYERS_SLICE: "9:12"
INIT_THINNING_FACTOR: 1.0
NUM_SEQUENCES_INTERPED: 1
THRESHOLD_EXP: 5.0
# Only pin single dims per layer. If not set, every ablation effect is plotted.
DIMS_PINNED:
3: [331]
順番に:
ACTS_LAYERS_SLICEは、文字列としてフォーマットされたPythonスライスです。アクティベーションを解釈するGPT-2 smallモデルのレイヤーを設定します。INIT_THINNING_FACTOR 、プロットするスライスの最初のレイヤーにある機能の割合です。たとえば、 1.0の一部は、レイヤー内のすべての機能をプロットしようとします。NUM_SEQUENCES_INTERPED 、ロジット効果と下流の特徴効果を計算するために、プロット中に使用されるトークンシーケンスの数です。THRESHOLD_EXP 、プロットされた活性化の違いのしきい値の指数です。 2**THRESHOLD_EXPよりもアクティベーションの大きさの違いが削除されます。すべての非ゼロ効果をプロットするには、この行をコメントしてください。DIMS_PINNEDは、レイヤーインデックスの辞書に続いて、シングルトンの機能インデックスのリストが続きます。最初のレイヤーに設定されている場合、 INIT_THINNING_FACTOR完全にオーバーライドします。これらの値を設定し、 central_config.yaml保存してから、解釈可能性を実行します。
cd sparse_coding
python3 pipe.py
すべてのデータはsparse_coding/data/に表示されます。
あなたが生成した最後の認知グラフは、あなたのための.svgとコンピューターの.dotの両方として保存されます。解釈可能性パイプラインを再度実行すると、新しいデータがその古い.dotファイルに拡張されます。このようにして、行くにつれてサーキットを徐々に追跡できます。
勾配ベースのアルゴリズム、Marks et alの実装もあります。 (2024)。このアルゴリズムには、中間の活性化の大きさへの貢献をプロットするのではなく、エントロピーの喪失への貢献度を直接プロットするという利点があります。ここでの実装は、モデルの残留ストリームだけでなく、GPT-2のサブレイヤーにも拡張されます。
ここにキーハイパーパラメーターは次のとおりです。
ACTS_LAYERS_SLICE上記のように機能します。 # Topk thresholds for gradient-based method.
NUM_UP_NODES: 5
NUM_DOWN_NODES: 5
NUM_UP_NODESサブレイヤーノードの数をプロットするサブレイヤーノードの数を修正します。各サブレーヤーダウンノードについて。エッジの数はこの値の2倍に等しいことに注意してください。これは、この多くのトップKエッジとこの多くのボトムKエッジを取得することに注意してください。NUM_DOWN_NODESがプロットされるサブレイヤーノードの数を修正します。これらの値をcentral_config.yamlに保存し、解釈可能性を実行します。
cd sparse_coding
python3 fast.py
データはsparse_coding/data/で表示されます。これは、NAIVEアルゴリズムと同様です。
この解釈可能性パイプラインは、NeuronPediaからより包括的な解釈可能性データを引き下げ、利用可能な場合は各ノードに追加します。
ここでは、グラフを.pngファイルとしてレンダリングすることもできます。そのためには、 central_config.yamlのGRADS_FILEの拡張を.svgから.pngに変更します。物理的なコピーが必要な場合、Posterazorを個別に使用して、大きな.pngグラフファイルを印刷します。
独立した回路検証パイプライン、 val.pyもあります。このスクリプトは、回路を構成するすべての機能を同時に除去し、全体的な回路がアブレーションの下でどのように動作するかを確認します(独立したアブレーションの下で個別の機能を見るのではなく、 pipe.py認知グラフの場合は単に目を向けます)。
これをセットアップするには、最初のACTS_LAYERS_SLICEを設定して、GPT-2 Smallの関連レイヤーを含む、1つの完全な余分なレイヤーを含む、
ACTS_LAYERS_SLICE: "6:9"
次に、 VALIDATION_DIMS_PINNEDで特定の回路を構成するすべての機能をピン留めします。
# Here you can freely pin multiple dims per layer.
VALIDATION_DIMS_PINNED:
6: [8339, 14104, 18854]
7: [2118]
次のように検証を実行します:
python3 val.py
central_config.yamlでデータセットを設定し、実行してください。
python3 hist.py
Neuron-Basisの活性化によりそのデータセットを導入し、99.99パーセンタイルの自動エンコーダーの活性化の大きさをキャッシュします。これで、 fast.pyを実行すると、これらのキャッシュしきい値が使用されます。
このページの上部にある認知グラフを検討してください。 4.112のようなラベルを備えた各ボックスは、まばらな自動エンコーダーの機能です。 4はレイヤーインデックス、 112はそのレイヤーの自動エンコーダーの列インデックスです。 NeuronPediaの特定の機能について、より包括的な解釈可能性データを相互参照できます。
各ボックスのシーケンスの青いトークンは、コンテキストの上位の機能のアクティベーションを表し、両側まで指定された長さを表します。
下部の個々のボックスの青と赤のトークンは、その次元によって最も高級/ダウンウェイトのロジットです。 (灰色は0.0効果エッジケースです。)
ボックス間の矢印は、他の機能に対する下流のアブレーション効果を表します。赤い矢印はダウンウェイトを表し、青(grean in grad_graph.py )矢印は上昇を表し、矢の透明度は大きさを表します。たとえば、淡い赤い矢印はマイナーなダウンウェイト効果です。
今のところ多くのリポジトリ機能をつけてきました。GPT GPT-2 smallで、32の投影係数がサポートされており、既存のスパース自動エンコーダーのセットを利用しています。
recosezeroefecterrorが上昇している場合は、レイヤースライスがピン留めのDIMと互換性があるかどうかを再確認する必要があります。
不可解なENV変数バグに遭遇した場合は、CUDA Toolkit 12.2以降を実行していることを確認してください。
シェル構文が示唆するように、UNIXのようなパス(MacOSまたはLinux上)が現在必要であり、Windows Pathingはおそらくリポジトリでうまく機能しないでしょう。
fast.py 、一意の剪定戦略を使用します。最終的なGPT-2 smallレイヤーで自動エンコーダーダムをかけ、それらから剪定します。したがって、モデルの下部から始めて、そこから徐々にプロットする必要があります。
現在のバージョンは1.3.1です