Neurostimulation for LLMs, 파인 튜닝 없이 LLM 조종하기

Neurostimulation for LLMs, 파인 튜닝 없이 LLM 조종하기
Photo by pen_ash / Unsplash

LLM이 비약적으로 발전하면서 이제 연구의 초점은 단순히 성능을 높이는 것을 넘어 모델이 왜 그렇게 행동하는가에 맞춰지고 있습니다.

이러한 맥락에서 Activation Steering은 단순히 모델을 관찰하는 것을 넘어, 모델의 내부 표현 공간에 직접 개입하여 행동을 조절하려는 시도입니다. 프롬프트 엔지니어링과 미세조정 사이의 간극을 메우는 제3의 제어 수단으로 주목받고 있지만, 연구실 데모와 실제 서비스 사이에는 여전히 넘어야 할 산이 많습니다.

이 포스트에서는 스티어링 기술의 작동 원리부터 실전에 적용했을 때 난관까지를 정리해보았습니다.


1. 왜 스티어링인가?

LLM을 제품에 통합할 때 우리가 마주하는 근본적인 문제는 일관된 제어입니다.

프롬프팅은 구현이 간단하지만 한계가 명확합니다.

  • 컨텍스트가 길어지면 초기 지침이 희석됩니다
  • 생성이 진행될수록 모델이 초기 설정을 잊어버립니다
  • 프롬프트 간 미묘한 차이가 출력에 예측 불가능한 영향을 미칩니다

미세조정은 강력하지만 비용이 큽니다.

  • 데이터 준비와 학습에 긴 리드타임이 필요합니다
  • 사용자/세션별 개인화가 사실상 불가능합니다
  • 한 번 조정하면 되돌리기 어렵습니다

이런 배경에서 Activation Steering이라는 접근법을 살펴보게 되었습니다. 컨셉 자체는 매력적입니다. 모델의 가중치는 그대로 두면서도, 추론 시점에 모델의 내부 활성화 값을 조정해서 행동을 바꿉니다. 프롬프팅처럼 입력 단계에서만 영향을 주는 게 아니라, 매 토큰을 생성할 때마다 개입하기 때문에 긴 텍스트에서도 일관성을 유지할 수 있다고 합니다. 게다가 사용자별로 유연하게 적용하고 되돌릴 수 있다니, 이론상으론 거의 완벽해 보입니다.

  • 가중치 불변성: 모델 파라미터를 건드리지 않습니다
  • 추론 시점 개입: 런타임에 동적으로 행동을 조절합니다
  • 토큰별 일관성: 프롬프트처럼 '한 번'이 아니라, 매 토큰마다 개입하여 긴 생성에서도 일관성을 유지합니다
  • 가역적 개인화: 사용자/세션별로 유연하게 적용하고 되돌릴 수 있습니다

그런데 최근 발표된 AxBench 벤치마크는 다소 냉정한 현실을 보여줍니다. 연구팀은 LLM 제어 기법들을 체계적으로 비교했는데, 결과가 의외입니다. 최신 기법인 SAE(Sparse Autoencoder) 같은 복잡한 방식보다, 그냥 프롬프팅이나 평균값 차이(difference-in-means) 같은 단순한 방법이 더 효과적이었다는 겁니다.

"Fine-grained steering of language model outputs is essential for safety and reliability. [...] For steering, we find that prompting outperforms all existing methods, followed by finetuning."

연구진은 새로운 방식(ReFT-r1)을 제안하긴 했지만, 핵심은 명확합니다. 복잡한 기법이 항상 더 좋은 결과를 보장하지는 않는다는 것입니다.

AxBench: Steering LLMs? Even Simple Baselines Outperform Sparse Autoencoders
Fine-grained steering of language model outputs is essential for safety and reliability. Prompting and finetuning are widely used to achieve these goals, but interpretability researchers have proposed a variety of representation-based techniques as well, including sparse autoencoders (SAEs), linear artificial tomography, supervised steering vectors, linear probes, and representation finetuning. At present, there is no benchmark for making direct comparisons between these proposals. Therefore, we introduce AxBench, a large-scale benchmark for steering and concept detection, and report experiments on Gemma-2-2B and 9B. For steering, we find that prompting outperforms all existing methods, followed by finetuning. For concept detection, representation-based methods such as difference-in-means, perform the best. On both evaluations, SAEs are not competitive. We introduce a novel weakly-supervised representational method (Rank-1 Representation Finetuning; ReFT-r1), which is competitive on both tasks while providing the interpretability advantages that prompting lacks. Along with AxBench, we train and publicly release SAE-scale feature dictionaries for ReFT-r1 and DiffMean.

짧은 응답이 주를 이루고, 프롬프트 최적화만으로도 충분한 일관성을 확보할 수 있다면 굳이 복잡한 방법을 도입할 이유가 없습니다. 반대로 긴 대화 세션에서 미묘한 톤이나 스타일을 계속 유지해야 한다면, Activation Steering 같은 기법을 진지하게 검토해볼 만합니다.


2. 스티어링의 동작 원리

트랜스포머의 각 레이어는 잔차 스트림(residual stream)이라는 hidden state를 지속적으로 업데이트합니다. 스티어링의 가장 기본적인 형태는 이 스트림에 특정 방향 벡터를 더하는 것입니다.

x ← x + αv

여기서,

  • x: 특정 레이어의 hidden state
  • v: 원하는 개념/행동을 나타내는 방향 벡터
  • α: 개입 강도

이것이 작동하는 이유는 LLM의 내부 표현 공간에서 의미 있는 개념들이 선형적인 방향으로 어느 정도 분리되어 존재한다는 경험적 발견 때문입니다. 예를 들어, "정중한 톤"이나 "사실에 대한 확신" 같은 속성이 특정 벡터 방향과 연관되어 있다는 것입니다.

하지만 현실은 더 복잡하며, 실제 스티어링의 성패는 세 가지 요소에 달려 있습니다.

  1. 어디에 개입할 것인가 (레이어 선택)
  2. 어떻게 개입할 것인가 (개입 함수 설계)
  3. 얼마나 개입할 것인가 (강도 조절)

그리고 이 모든 것은 자기강화 루프라는 근본적인 문제와 맞닥뜨립니다. LLM은 자신이 방금 생성한 토큰을 다시 입력으로 받아 다음 토큰을 생성합니다. 스티어링이 너무 강하면 이 루프가 특정 방향으로 폭주하여 횡설수설하거나 반복된 토큰 생성으로 이어집니다.


3. 개입 함수 설계

x ← x + αv 방식은 직관적이지만 열린 루프 제어입니다. 현재 상태가 이미 v 방향으로 강한지 약한지 고려하지 않고 무조건 α만큼 밀어붙입니다.

Note: 열린 루프 제어는 결과를 측정하거나 피드백받지 않고, 오직 설정된 입력에 따라서만 작동하는 가장 기초적인 제어 방식입니다. 구조가 간단하고 비용이 저렴하지만, 외부 환경 변화에 대처하기 어렵고 정확도가 낮다는 단점이 있습니다. 

문제는 토큰 생성이 반복되면서

  1. 이전 토큰이 이미 v 방향을 강화했는데
  2. 거기에 또 α를 더하면
  3. 자기강화 루프가 발생하여
  4. 결국 반복/붕괴로 이어집니다

클램핑 방식, 닫힌 루프 제어

Anthropic의 골든게이트 브리지와 Hugging Face의 에펠탑 실험에서 효과를 보인 접근법은 클램핑입니다.

Golden Gate Claude
When we turn up the strength of the “Golden Gate Bridge” feature, Claude’s responses begin to focus on the Golden Gate Bridge. For a short time, we’re making this model available for everyone to interact with.
Claude 3 Sonnet 모델 내부에서 골든게이트 브리지 개념을 담당하는 신경망 특징을 찾아낸 뒤, 이 값을 강제로 높게 고정(Clamping)했습니다. 그 결과, 모델은 "너는 누구니?"라는 질문에도 "저는 골든게이트 브리지입니다."라고 대답할 정도로 특정 개념에 강하게 집착하는 모습을 보였습니다
The Eiffel Tower Llama - a Hugging Face Space by dlouapre
Learn about the Eiffel Tower Llama experiment, which reproduces the Golden Gate Claude demo using open-source models like Llama 3.1 8B Instruct, providing insights into modifying model activations…
Gemma 모델을 대상으로 SAE를 적용해 에펠탑과 관련된 특징을 제어한 실험입니다. 특정 벡터를 클램핑하면 모델이 모든 답변의 맥락을 에펠탑과 연결 짓는 등, LLM의 내부 표현을 수정하여 출력을 직접적으로 조절할 수 있음을 보여주었습니다.
# 의사코드
current_projection = dot(x, v)  # 현재 v 방향 성분
x = x - current_projection * v  # 기존 성분 제거
x = x + target_strength * v     # 목표 강도로 설정

이것은 단순히 "더하기(add)"가 아니라 "설정(set)"하는 방식입니다. v 방향 성분을 목표값으로 고정함으로써,

  • 이미 강하면 더 밀지 않고
  • 약하면 끌어올려서
  • 결과적으로 일정한 수준을 유지합니다

이 에펠탑 실험에서 클램핑은 개념 포함도를 높이면서도 출력 품질 저하를 최소화했습니다. 이는 피드백이 있는 제어라는 관점에서 이해할 수 있습니다.

Affine 변환

최근 연구는 단순 덧셈보다 일반화된 Affine 변환을 다루고 있습니다.

x ← Ax + b

이는 평균/공분산 정렬 관점에서 개념을 이동시키거나 제거하는 변환으로, 이론적으로는 더 최적일 수 있습니다.

이러한 최근 연구들을 살펴봤을 때, 스티어링은 좋은 벡터 v를 찾는 것만큼이나 좋은 컨트롤러를 설계하는 것이 매우 중요하다는 것을 알 수 있습니다.


4. 벡터 찾기

"어떤 벡터 v를 사용할 것인가"는 스티어링의 또 다른 중요한 축입니다. 현재는 다음의 네 가지 주요 접근법으로 정리할 수 있습니다.

4.1 Diff-in-means / CAA (데이터 주도)

가장 클래식하면서도 여전히 강력한 방법입니다. '긍정 샘플'과 '부정 샘플' 쌍을 준비하고, 두 그룹 간의 활성화(Activation) 차이를 평균 내어 벡터를 추출합니다.

  • 예시: (정중한 응답들의 평균 Hidden State, 무례한 응답들의 평균 Hidden State)
  • 장점: 구현이 매우 간단하고 빠릅니다. 우리가 원하는 행동에 대한 데이터셋만 있으면 됩니다.
  • 단점: 행동별로 신뢰성 편차가 큽니다. 어떤 경우에는 잘 작동하지만, 특정 케이스에서는 오히려 성능을 악화시키기도 합니다.

4.2 프로브 기반 개입 (ITI)

데이터 자체의 차이를 보는 것을 넘어, 특정 속성을 분류하도록 학습된 선형 분류기(Linear Probe)를 이용합니다. 이 분류기가 가리키는 방향으로 모델을 조정합니다.

  • 장점: 전체 레이어가 아니라, 특정 어텐션 헤드(Head) 단위로 정교하게 개입할 수 있습니다. TruthfulQA 같은 벤치마크에서 실제로 유의미한 성능 향상을 증명했습니다.
  • 관점: 단순한 덧셈을 넘어, 모델의 연산 위치 자체를 재설계하는 접근법에 가깝습니다.

4.3 SAE Feature Steering (해석가능성 지향)

최근 가장 핫한 주제인 Sparse Autoencoder(SAE)를 활용합니다. 모델의 복잡한 활성화를 희소한 피처 단위로 분해한 뒤, 특정 피처의 디코더 방향을 스티어링 벡터로 사용합니다.

https://www.neuronpedia.org
  • 장점: Neuronpedia 같은 커뮤니티를 통해 피처 사전을 공유하고 재사용할 수 있습니다. 사람이 직관적으로 이해할 수 있는 개념과 연결됩니다.
  • 단점: AxBench 보고서에 따르면, 안타깝게도 성능 면에서는 전반적으로 경쟁력이 떨어졌습니다. 에펠탑 실험에서도 "결국 프롬프트의 역할이 여전히 더 중요하다"는 한계가 드러났습니다.

4.4 Feature Discovery 자동화

SAE의 가장 큰 병목은 "수만 개의 피처 중 어떤 것이 효과적인지 찾는 것"입니다. 이를 해결하기 위해 프롬프트 변형으로 피처를 자동 탐색하는 FDPV나, 개입 견고성을 높이는 SISTER 같은 연구가 진행 중입니다. 아직 초기 단계지만, 피처 추출의 자동화는 엔지니어링 비용을 낮추는 핵심이 될 수 있습니다.


5. Sweet Spot의 좁음과 측정의 어려움

5.1 극도로 좁은 최적의 작동 범위

David Louapre의 에펠탑 실험은 스티어링 기법의 가능성과 동시에 근본적인 한계를 드러냈습니다. 실험 결과가 보여준 가장 핵심적인 문제는 스티어링이 제대로 작동하는 범위가 극도로 좁다는 점입니다.

스티어링 강도를 나타내는 파라미터 α를 조절하는 과정에서 매우 특이한 패턴이 관찰됩니다.

  • α 값이 조금만 낮으면 스티어링 효과가 전혀 나타나지 않습니다.
  • 반대로 α를 아주 미세하게만 높여도 모델은 즉시 붕괴하여 횡설수설하거나 같은 표현을 무한히 반복하는 현상을 보입니다.
  • 더 큰 문제는 이 최적값이 입력 프롬프트에 따라 크게 변동한다는 점입니다.

이러한 현상을 단순한 하이퍼파라미터 튜닝의 문제로 치부하기는 어렵습니다. LLM 스티어링은 본질적으로 복잡한 시스템 제어 문제의 특성을 가지고 있기 때문입니다. 

  1. 불확실한 목적 함수: LLM-as-a-judge로 대표되는 평가 방식 자체가 높은 노이즈를 내포하고 있어 목적 함수가 불확실합니다.
  2. 좁은 제어 범위: 유효한 제어 구간이 협소하여 안정적인 작동점을 찾기 어렵습니다.
  3. 피드백 루프: 한 번의 개입이 모델의 다음 상태를 변화시키고 이것이 다시 후속 개입에 영향을 미치는 피드백 루프가 형성됩니다.

5.2 측정과 튜닝 전략

이처럼 좁은 작동 범위를 효과적으로 탐색하기 위해서는 비용을 고려한 전략적 접근이 필요합니다. 측정 지표를 비용과 정확도에 따라 계층화하는 것이 현실적인 방법입니다.

저비용 보조 지표는 빠른 필터링 단계에서 활용됩니다. 에펠탑 실험이 보여주었듯, 이러한 저비용 지표로 명백히 실패한 설정들을 신속하게 제거하는 것이 효율적입니다.

  • 저비용 보조 지표 (빠른 필터링용)
    • 3-gram 반복률 (모델 붕괴 감지)
    • Surprisal/Logprob (분포 이탈 감지)
    • 키워드 포함 여부 (개념 주입 확인)

고비용 지표는 최종 판단 단계에서만 선별적으로 사용합니다. LLM-judge를 이용한 톤, 일관성, 유창성 평가는 계산 비용이 높기 때문에 저비용 필터를 통과한 소수의 유망한 후보에만 적용하는 것이 합리적입니다.

  • 고비용 지표 (최종 판단용)
    • LLM-judge를 이용한 톤, 일관성, 유창성 평가
    • 살아남은 소수의 후보에만 적용합니다.

5.3 다중 스티어링?

다층 레이어, 다중 피처 스티어링은 본질적으로 고차원 최적화 문제입니다. 예를 들어 Layer 14의 피처 A, Layer 15의 피처 B를 동시에 조절한다면 탐색 공간은 기하급수적으로 늘어납니다.

# 예: 3개 레이어, 각 2개 피처 → 6차원 탐색
params = {
    'layer_14_feature_A_strength': [0, 10],
    'layer_14_feature_B_strength': [0, 10],
    'layer_15_feature_A_strength': [0, 10],
    ...
}

에펠탑 실험에서는 BoTorch 기반의 베이지안 최적화를 시도했으나, 기대만큼 드라마틱한 성과를 얻지는 못했습니다. 여기서 주목할 점은 피처 수를 무작정 늘린다고 해서 제어력이 향상되지 않는다는 것입니다. 오히려 탐색 난이도만 증가하는 경우가 많기 때문에, 최소 개입 원칙을 견지하는 것이 중요합니다.


6. Decoding Parameters

스티어링 벡터를 정교하게 설계하는 것만으로는 충분하지 않습니다. Decoding Parameters가 스티어링의 안정성에 결정적인 영향을 미치기 때문입니다.

  • Temperature (0.2~0.6): 스티어링 상황에서는 평소보다 낮게 잡는 것이 유창성과 지시 준수율을 높입니다.
  • Repetition Penalty: 벡터 주입 시 모델이 고장 나 반복하는 경향이 있는데, 이를 억제해 줍니다.
  • Top-p: 분포를 제한하여 뜬금없는 토큰 생성을 막습니다.

스티어링과 디코딩 전략은 함께 튜닝되어야합니다. 스티어링이 모델을 특정 방향으로 강하게 밀어붙일 때, 디코딩 파라미터는 그 방향에서의 폭주를 막아주는 가드레일 역할을 해야 하기 때문입니다.

7. 결론

AxBench 평가가 보여주듯, 잘 설계된 프롬프트는 여전히 강력합니다. SAE 기반 스티어링은 해석가능성 측면에서 매력적이지만, 성능 면에서는 기대에 미치지 못했습니다.

그럼에도 스티어링은 고유한 가치를 제공합니다.

  • 세션별 가역적 제어: 사용자마다 다른 설정을 즉시 적용/해제
  • 긴 생성에서의 일관성: 토큰마다 개입하여 프롬프트 희석 방지
  • 내부 표현 직접 조작: 프롬프트로는 불가능한 제어

스티어링을 단순한 x + αv 수식이 아닌 시스템 제어 문제로 접근해야 합니다.

  1. 컨트롤러 설계: Add vs Clamp vs Affine
  2. 목적 함수 정의: 고비용 지표 + 저비용 지표 조합
  3. 탐색 자동화: 베이지안 최적화, 그리드 서치
  4. 안정화 메커니즘: 디코딩 파라미터, 게이트, 가드레일
  5. 최소 개입 원칙: 레이어와 피처 수를 최소화

스티어링은 프롬프팅의 대체재 라기보다는 프롬프트로 무엇을 하고, 스티어링으로 어떻게를 제어하는 관점에서 보아야 합니다.

모델의 행동을 이해하고, 그 내부 메커니즘에 정교하게 개입하려는 시도는 계속될 것입니다. 하지만 프로덕션의 가치로 전환되려면, 좁은 Sweet Spot, 불안정한 평가, 그리고 자기강화 루프라는 근본적인 도전을 극복해야 합니다.

스티어링 기술은 아직 초기 단계입니다. 하지만 올바른 기대값과 엔지니어링 원칙으로 접근한다면, 특정 영역에서는 실용적인 가치를 제공할 수 있을 것으로 보입니다.

참고 자료

[1] https://youtu.be/F2jd5WuT-zg?si=ChjbU1kvw2v_0wtH
[2] https://huggingface.co/spaces/dlouapre/eiffel-tower-llama
[3] https://www.anthropic.com/news/golden-gate-claude