뉴런을 조작하는 방법... 짧은 가이드
How to mess around with neurons... a short guide
핵심 요약
모델의 특정 뉴런을 활성화하여 동작을 제어하는 '뉴런 스티어링' 기법과 탐색 방법을 소개합니다.
- 뉴런 스티어링 — 특정 뉴런에 고정 값을 더해 모델의 출력을 제어하는 기법임
- 탐색 방법 — 무작위 검색, 그래디언트 분석, 활성화 마이닝을 통해 흥미로운 뉴런을 찾음
- 검증 절차 — 주변 뉴런과 비교하고 다양한 프롬프트를 사용하여 뉴런의 특성을 확인함
- 실용적 팁 — Neuronpedia 활용 및 llama.cpp의 control vector 기능을 통한 적용 권장
Qwen 안에서 발견한 이상한 뉴런들에 대해 글을 몇 개 썼더니, 다들 어떻게 한 거냐고 물어보길래 가이드를 하나 만드는 게 좋겠다 싶었어. 대체로 justinrhowell의 neuron-steering 저장소에서 영감을 받았는데, 코드를 그대로 가져다 쓴 건 아니지만 몇 가지 접근 방식은 참고했어. 그 친구 작업물에 리스펙을 보낸다!
뉴런 스티어링(Neuron steering)이란?
Qwen의 각 레이어에는 수천 개의 뉴런이 들어있는 MLP 블록이 있어. Qwen3.5-4B는 32개 레이어에 각각 9,216개의 뉴런이 있으니까, 총 295,000개 정도 되는 셈이지.
뉴런 스티어링은 기본적으로 뉴런 하나를 골라서 모델한테 답변을 요구할 때 고정된 값(이걸 'dose'라고 부름)을 더해주는 거야. 파인튜닝이나 거창한 프롬프팅 같은 게 아니라, 뉴런 하나만 건드리는 아주 단순한 형태의 활성화 스티어링이지. 근데 웃긴 게, 어떤 뉴런들은 모델 행동을 엄청나게 바꿔버려!
어떤 뉴런을 수정하고 있는지 추적하려고 주소를 붙여놨어. "L11 N8147"은 12번째 레이어의 8147번 뉴런이라는 뜻이야. 이건 justin이 쓴 명명 규칙인데, Neuronpedia 주소랑 거의 똑같아 (QWEN3.5-4B · MLP Neurons - Layer 11 · 8147 | Neuronpedia).
실제로 어떻게 하냐고?
제일 쉬운 방법은 그냥 쓰는 에이전트한테 뉴런 스티어링 하네스(harness) 좀 짜달라고 하는 거야(별로 안 복잡하거든). 그래도 직접 해보고 싶다면 이렇게 하면 돼:
-
PyTorch랑
transformers로 모델을 불러와. -
모델의 디코더 레이어 목록을 찾은 다음, 원하는 레이어의
down_proj에 훅(hook)을 걸어. 이 훅은 생성할 때마다 모든 토큰에 대해 해당 뉴런에 고정값을 더해줄 거야:amount = dose * median_residual_norm[L] / W_down[:, n].norm()def pre(mod, args): x = args[0].clone() x[..., n] += amount return (x,) + args[1:]layers[L].mlp.down_proj.register_forward_pre_hook(pre) -
텍스트를 생성해보고 결과가 어떻게 나오는지 확인해봐(기본 모델 응답을 베이스라인으로 두고 비교하면 편해).
'dose' 값은 뉴런을 얼마나 밀어붙일지, 즉 활성화를 얼마나 수정할지 정하는 거야. 1이면 꽤 세게 미는 거고, 0.75 정도면 보통 잘 먹혀. 1~1.5 넘어가면 보통 헛소리만 나오기 시작해. median_residual_norm[L]은 레이어 L에서 모델의 히든 스테이트가 보통 어느 정도 크기인지 나타내는 값이야. 모델에 문단 몇 개를 돌려보고 레이어별로 측정해서 중간값을 구하면 돼. 이걸로 스케일링을 하면, 레이어 위치에 상관없이 dose 1이 대충 비슷한 강도로 작용하게 만들 수 있어.
llama.cpp에서 수정한 모델로 제대로 대화하고 싶으면, 변경 사항을 컨트롤 벡터로 저장해서 --control-vector로 불러오면 돼.
재밌는 뉴런 찾는 법
대부분의 뉴런은 건드려봐야 별로 재미있는 반응이 안 나와(내가 보기엔 그래). 그래도 흥미로운 놈들을 찾을 방법은 몇 가지 있어:
1. 무작위 탐색 (제일 쉬움). 말 그대로 중간 레이어에서 뉴런을 아무거나 골라잡아. dose ±1로 밀어보고(양쪽 극성 다 유용해, 어떤 뉴런은 한쪽 극성에서만 반응하거든), 간단한 질문 몇 개를 던져봐(예: "너 누구야?", "하이쿠 하나 써줘"). 그러고 나서 결과물을 다 확인하면서 재밌는 게 있는지 봐야 하는데, LLM한테 시키는 걸 강력 추천해. 안 그러면 진짜 지루해서 미칠걸. 이 방법은 느리고 쓰레기 같은 결과가 대부분이지만, Qwen을 TV 채널인 줄 알게 만드는 뉴런 같은 이상한 놈들을 찾은 방법이기도 해.
!["Does censorship exist in [country]?", according to various LLMs](https://cf.preview.redd.it/does-censorship-exist-in-country-according-to-various-llms-v0-knnfwsmaje0i1.png?width=1080&crop=smart&auto=webp&s=b635757eb86e6d73129000b5f6ebcf4612b04044)

