Обнаружение схемы в GPT-2 small , используя разреженное автоэкодирование
Чтобы вручную установить, просто запустите эти команды в оболочке:
git clone https://github.com/DavidUdell/sparse_circuit_discovery
cd sparse_circuit_discovery
pip install -e .
В качестве альтернативы, у меня есть изображение Docker в реестре контейнеров GitHub. Изображение 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 - это срез питона, отформатированный в виде строки. Он устанавливает, какие слои 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/ .
Последний график познания .dot который вы сгенерировали, .svg как для вас. Если вы снова запустите конвейер интерпретации, новые данные будут расширять этот старый файл .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 исправляет количество узлов подблеров, чтобы построить ребра , для каждого подбола вниз по узлу. Обратите внимание, что количество краев равно вдвое это значение: вы получите столько краев верхнего K и столько краев нижнего K.NUM_DOWN_NODES исправляет количество узлов подблеров, которые затем будут построены . Сохраните эти значения в central_config.yaml , затем запустите интерпретацию:
cd sparse_coding
python3 fast.py
Данные появляются в sparse_coding/data/ , как это происходит с наивным алгоритмом.
Этот конвейер интерпретации также будет снести более полные данные интерпретации из Neuronpedia и добавить его к каждому узлу, когда они доступны.
Здесь вы также можете выбрать рендеринг графиков в виде файлов .png . Измените расширение GRADS_FILE в central_config.yaml от .svg на .png для этого. Я отдельно использую Posterazor, чтобы печатать большие файлы графиков .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-й процентиль AutoEcoder-Basis Bagecis Activation. Теперь работа fast.py будет использовать эти кэшированные пороги.
Рассмотрим график познания в верхней части этой страницы. Каждая коробка с этикеткой, подобной 4.112 является функцией в разреженном автосодовом. 4 - это индекс слоя, в то время как 112 - это индекс столбцов в автоэкодерке этого слоя. Вы можете перекрестно ссылаться на более полные данные интерпретации для любой заданной функции по нейронедии.
Синие жетоны в последовательностях в каждой коробке представляют активации верхней функции в своих контекстах, до указанной длины в обе стороны.
Синие и красные жетоны в отдельных коробках внизу являются логитами, наиболее подъездными/пониженными из -за этого измерения. ( Серый - это корпус края 0,0).)
Стрелки между коробками представляют собой эффект абляции ниже по течению на другие функции. Красные стрелки представляют собой пониженные, синие (зеленый в grad_graph.py ) стрелки представляют собой увеличение веса, а прозрачность стрелок представляет собой величину. Например, бледно -красная стрелка - это незначительный эффект понижения.
На данный момент я набрал много функциональности репозитория: поддерживаются только GPT-2 small и фактор проекции 32, чтобы воспользоваться набором ранее существовавших разреженных автоходоров.
Если ровно -зерофектеррор поднимается, вам следует дважды проверить, совместим ли ваш ломтик слоев с прикрепленной Dim.
Если вы сталкиваетесь с Cryptic Env переменные ошибки, убедитесь, что вы запускаете Cuda Toolkit 12.2 или новее.
Как предполагает синтаксис оболочки, в настоящее время требуются пути Unix-подобные пути (на macOS или Linux), и путь Windows, вероятно, не будет хорошо играть с репо.
fast.py использует уникальную стратегию обрезки: она займет Dims AutoEncoder в финальном GPT-2 small и подгоняет от них. Таким образом, вы должны начать с нижней части модели и постепенно запланировать оттуда.
Текущая версия 1.3.1