희소 한 자동 인코딩을 사용하여 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 는 문자열로 형식화 된 파이썬 슬라이스입니다. 활성화를 해석 할 GPT-2 small 모델의 어떤 레이어를 설정합니다.INIT_THINNING_FACTOR 플롯 할 슬라이스의 첫 번째 레이어에서 기능의 비율입니다. 예를 들어, 1.0 의 일부는 레이어의 모든 기능을 플로팅하려고합니다.NUM_SEQUENCES_INTERPED 로이트 효과와 다운 스트림 피처 효과를 계산하기 위해 플로팅 중에 사용되는 토큰 시퀀스의 수입니다.THRESHOLD_EXP 활성화 차이에 대한 임계 값 지수입니다. 2**THRESHOLD_EXP 보다 활성화 크기의 작은 차이가 떨어집니다. 0이 아닌 모든 효과를 플로팅하려면이 라인에 주석하십시오.DIMS_PINNED 는 레이어 지수의 사전과 싱글 톤 목록의 기능 지수입니다. 첫 번째 레이어로 설정하면 INIT_THINNING_FACTOR 완전히 무시합니다. 이 값을 설정하고 central_config.yaml 저장 한 다음 해석 가능성을 실행하십시오.
cd sparse_coding
python3 pipe.py
모든 데이터는 sparse_coding/data/ 에 나타납니다.
생성 한 마지막 인식 그래프는 귀하를위한 .svg 와 컴퓨터의 .dot 로 저장됩니다. 해석 가능성 파이프 라인을 다시 실행하면 새 데이터가 해당 이전 .dot 파일에서 확장됩니다. 이런 식으로, 당신은 갈 때 회로를 점차 추적 할 수 있습니다.
Gradient 기반 알고리즘, 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 각 하위 레이어 다운 노드에 대해 가장자리 를 플로팅하기 위해 하위 레이어 노드 수를 수정합니다. 가장자리의 수는이 값의 두 배에 해당합니다.이 많은 Top-K 가장자리 와이 많은 최하위 가장자리를 얻을 수 있습니다.NUM_DOWN_NODES 가장자리가 그려 질 수있는 하위 계층 노드의 수를 수정합니다. 이 값을 central_config.yaml 에 저장 한 다음 해석 가능성을 실행하십시오.
cd sparse_coding
python3 fast.py
순진한 알고리즘과 마찬가지로 데이터는 sparse_coding/data/ 에 나타납니다.
이 해석 가능성 파이프 라인은 또한 Neuronpedia의보다 포괄적 인 해석 성 데이터를 중단하여 가능한 경우 각 노드에 추가합니다.
여기서 그래프를 .png 파일로 렌더링하도록 선택할 수도 있습니다. central_config.yaml 에서 GRADS_FILE 의 확장을 .svg 에서 .png 로 변경하십시오. 물리적 사본이 필요할 때 대형 .png 그래프 파일을 타일하기 위해 Posterazor를 별도로 사용합니다.
독립 회로 검증 파이프 라인 인 val.py 도 있습니다. 이 스크립트는 동시에 회로를 구성하는 모든 기능을 동시에 제거하여 전체 회로가 절제 아래에서 어떻게 행동하는지 확인합니다 (독립적 인 절제 아래에서 별도의 기능을 보지 않고 pipe.py 인식 그래프가 수행하는 방식).
이를 설정하려면 먼저 ACTS_LAYERS_SLICE 설정하여 GPT-2 Small의 관련 레이어를 포함하여 전체 추가 레이어를 포함하여,
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 번째 백분위 수 자동 인코더-기준 활성화 크기를 캐시합니다. 이제 Running fast.py 캐시 된 임계 값을 사용합니다.
이 페이지 상단의 인식 그래프를 고려하십시오. 4.112 와 같은 레이블이있는 각 상자는 희소 자동 인코더의 기능입니다. 4 는 레이어 인덱스이고 112 해당 레이어의 자동 인코더에서 열 인덱스입니다. Neuronpedia의 특정 기능에 대해보다 포괄적 인 해석 성 데이터를 상호 참조 할 수 있습니다.
각 상자의 순서대로 파란색 토큰은 컨텍스트의 최고 기능 활성화, 지정된 길이를 양쪽으로 나타냅니다.
바닥의 개별 상자의 파란색과 빨간색 토큰은 해당 차원에 의해 가장 높은 무게/다운 웨이트로 인한 로트입니다. ( 회색 은 0.0 효과 에지 케이스입니다.)
상자 사이의 화살표는 다른 기능에 대한 다운 스트림 절제 효과를 나타냅니다. 빨간색 화살표는 다운 웨이트 팅, 파란색 ( grad_graph.py 의 녹색)을 나타내며 화살표는 상급을 나타내고 화살표 투명도는 크기를 나타냅니다. 예를 들어, 옅은 빨간색 화살표는 작은 다운 웨이트 팅 효과입니다.
나는 현재 많은 저장소 기능을 gpt습니다. 기존의 스파 스 autoencoders 세트를 활용하기 위해 GPT-2 small 과 32의 투영 계수 만 지원됩니다.
정확한 zeroeffecterror가 올라가면 레이어 슬라이스가 고정 된 Dim과 호환되는지 여부를 두 번 확인해야합니다.
비밀스러운 ENV 가변 버그가 발생하는 경우 CUDA Toolkit 12.2 또는 최신을 실행하고 있는지 확인하십시오.
Shell Syntax에서 알 수 있듯이 UNIX와 같은 경로 (MacOS 또는 Linux)는 현재 필요하며 Windows Pathing은 레포지기와 잘 어울리지 않을 것입니다.
fast.py 고유 한 가지 치기 전략을 사용합니다. 최종 GPT-2 small 층에서 오토 코더 희미한 희미한 시간을 차지하고 그로부터 가지를 뿌립니다. 따라서 모델의 맨 아래에서 시작하여 점차적으로 그곳에서 플롯해야합니다.
현재 버전은 1.3.1입니다