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是繪圖過程中使用的令牌序列的數量,目的是計算logit效果和下游特徵效應。THRESHOLD_EXP是繪製激活差異的閾值值指數。激活幅度的差異較小,而不是2**THRESHOLD_EXP 。要繪製每個非零效果,請評論這一行。DIMS_PINNED是層索引的字典,其後是Singleton特徵索引列表。如果設置為第一層,它將完全覆蓋INIT_THINNING_FACTOR 。設置這些值,保存central_config.yaml ,然後使用以下方式運行解釋性
cd sparse_coding
python3 pipe.py
所有數據都出現在sparse_coding/data/中。
您生成的最後一個認知圖可以保存為適合您的.svg ,也可以保存為計算機的.dot 。如果您再次運行可解釋性管道,則新數據將在該舊的.dot文件上擴展。這樣,您可以隨著時間的流逝逐漸搜索電路。
還有一種基於梯度的算法,即Marks等人的實現。 (2024)。該算法的優點是直接繪製對橫向滲透損失的貢獻,而不是繪製對中間激活幅度的貢獻。它在這裡的實現也擴展到了GPT-2的子層,而不僅僅是模型的剩餘流。
關鍵的超參數是:
ACTS_LAYERS_SLICE如上所述。 # Topk thresholds for gradient-based method.
NUM_UP_NODES: 5
NUM_DOWN_NODES: 5
NUM_UP_NODES修復了每個sublayer down節點的子層節點的數量。請注意,邊數的數量等於此值的兩倍:您將獲得這麼多頂部的邊緣和許多下K的邊緣。NUM_DOWN_NODES修復了將從中繪製邊緣的子層節點的數量。將這些值保存在central_config.yaml中,然後運行可解釋性:
cd sparse_coding
python3 fast.py
數據顯示在sparse_coding/data/中,就像使用幼稚算法一樣。
這種可解釋性管道還將從Neuronpedia中提取更全面的可解釋性數據,並在可用時將其附加到每個節點。
在這裡,您還可以選擇將圖形呈現為.png文件。為此,將central_config.yaml中.svg GRADS_FILE擴展到.png 。當需要物理副本時,我會單獨使用後刺打印大的.png圖形文件。
還有一個獨立的電路驗證管道val.py該腳本同時消除了包含電路的所有功能,以查看整個電路在消融下的行為(而不是僅在獨立消融下查看單獨的特徵,即pipe.py認知圖)。
要設置此設置,首先設置ACTS_LAYERS_SLICE以包含GPT-2中的相關層,包括一個完整的額外層,
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
將通過神經元激活的數據集群集,然後緩存99.99%自動編碼器基本激活幅度。現在, fast.py運行將使用那些緩存的閾值。
考慮此頁面頂部的認知圖。每個具有像4.112這樣的標籤的盒子都是稀疏自動編碼器中的功能。 4是其層索引,而112是該層自動編碼器中的列索引。您可以為Neuronpedia上任何給定的功能交叉引用更全面的可解釋性數據。
每個框中的序列中的藍色令牌代表其上下文中的頂部特徵激活,以指定的長度到任何一側。
底部的單個盒子中的藍色和紅色令牌是該維度最高重/下降的邏輯。 (灰色是0.0效應邊緣情況。)
盒之間的箭頭代表了下游消融對其他功能的影響。紅色箭頭表示過重,藍色( grad_graph.py中的綠色)箭頭表示上升,箭頭透明度代表大小。例如,淡紅色箭頭是一個小小的下降效果。
我目前已經了解了很多存儲庫功能:僅支持GPT-2 small ,投影係數為32,以利用一組先前存在的稀疏自動編碼器。
如果抬高了急切的齊射率,則應仔細檢查您的層切片是否與固定的昏暗兼容。
如果您遇到了隱秘的Env變量錯誤,請確保您正在運行CUDA工具包12.2或更新。
正如Shell語法所建議的那樣,目前需要類似於Unix的路徑(在MacOS或Linux上),並且Windows路徑可能不會與回購相處。
fast.py採用獨特的修剪策略:它將在最終的GPT-2 small層中使用自動編碼器DIM並從中修剪。因此,您應該從模型的底部開始,然後從那裡逐步繪製。
當前版本為1.3.1