Activation Steering: 미세 조정 없이 LLM의 행동을 제어하기
LLM이 빠르게 발전하면서 연구와 제품 개발의 관심사는 단순한 성능 향상을 넘어가고 있습니다. 이제 중요한 질문은 “모델이 얼마나 잘하느냐”만이 아닙니다. 모델이 왜 그렇게 행동하는지, 그리고 원하는 방향으로 얼마나 안정적으로 제어할 수 있는지가 점점 더 중요해지고 있습니다.
이 맥락에서 Activation Steering은 흥미로운 접근입니다. 모델을 바깥에서 프롬프트로만 유도하는 방식에서 한 걸음 더 나아가, 모델 내부의 표현 공간에 직접 개입해 행동을 조절하려는 시도이기 때문입니다.
프롬프트 엔지니어링(prompt engineering)은 간단하고 빠르지만 일관성에 한계가 있습니다. 미세 조정(fine-tuning)은 강력하지만 비용이 크고 유연성이 낮습니다. Activation Steering은 그 사이에서, 모델의 가중치는 그대로 둔 채 추론 시점의 내부 활성화 값을 조정해 출력을 바꾸려는 방법입니다.
다만 연구실 데모에서 잘 보이는 것과 실제 서비스에 적용할 수 있는 것은 다른 문제입니다. 이 글에서는 Activation Steering이 왜 필요한지, 어떤 방식으로 작동하는지, 그리고 실전에 적용하려면 어떤 난관을 넘어야 하는지 정리합니다.
1. Activation Steering
LLM을 제품에 통합할 때 가장 어려운 문제 중 하나는 일관된 제어입니다. 프롬프트는 구현이 간단하지만, 다음과 같은 한계가 있습니다.
- 컨텍스트가 길어지면 초기 지침이 희석됩니다.
- 생성이 길어질수록 모델이 처음의 설정을 잊는 경우가 생깁니다.
- 프롬프트의 작은 차이가 출력에 예측하기 어려운 영향을 줄 수 있습니다.
미세 조정은 더 강력한 방법이지만 비용이 큽니다.
- 데이터 준비와 학습에 긴 리드타임이 필요합니다.
- 사용자나 세션별로 동적으로 적용하기 어렵습니다.
- 한 번 조정한 모델을 즉시 되돌리기 어렵습니다.
Activation Steering은 이 사이에 있는 제어 방식으로 볼 수 있습니다. 모델 파라미터를 바꾸지 않고, 추론 중 특정 레이어의 활성화 값을 조정해 모델의 행동을 바꿉니다.
이론적으로는 꽤 매력적인 특성이 있습니다.
- 가중치 불변성: 모델 파라미터를 직접 수정하지 않습니다.
- 추론 시점 개입: 런타임에 동적으로 행동을 조절할 수 있습니다.
- 토큰별 일관성: 프롬프트처럼 한 번만 영향을 주는 것이 아니라, 매 토큰 생성 과정에 개입할 수 있습니다.
- 가역적 개인화: 사용자나 세션 단위로 적용하고 다시 해제할 수 있습니다.
문제는 실제 성능입니다.
최근 AxBench는 여러 LLM 제어 기법을 체계적으로 비교했습니다. 결과는 다소 냉정합니다. 스티어링 평가에서는 프롬프팅이 기존의 여러 표현 기반 스티어링 기법보다 좋은 성능을 보였고, 그다음이 미세 조정이었습니다. 개념 탐지에서는 difference-in-means 같은 표현 기반 방법이 좋은 결과를 보였지만, SAE(Sparse Autoencoder)는 두 평가 모두에서 경쟁력 있는 결과를 내지 못했습니다.
이 결과가 말해주는 바는 분명합니다. 복잡한 내부 개입 기법이 항상 더 좋은 결과로 이어지지는 않습니다.
짧은 응답이 대부분이고, 프롬프트 최적화만으로도 충분한 일관성을 얻을 수 있다면 굳이 Activation Steering을 도입할 이유는 크지 않습니다. 반대로 긴 대화 세션에서 톤, 스타일, 특정 행동 경향을 계속 유지해야 한다면, 스티어링 기법을 검토할 여지가 생깁니다.

2. 스티어링의 동작 원리
트랜스포머의 각 레이어는 잔차 스트림(residual stream)이라는 hidden state를 계속 업데이트합니다. Activation Steering의 가장 기본적인 형태는 이 hidden state에 특정 방향 벡터를 더하는 것입니다.
x ← x + αv여기서 각 요소는 다음을 의미합니다.
x: 특정 레이어의 hidden statev: 원하는 개념이나 행동을 나타내는 방향 벡터α: 개입 강도
이 방식이 성립할 수 있는 이유는 LLM의 내부 표현 공간에서 일부 의미 있는 개념들이 특정한 선형 방향으로 분리되어 나타난다는 경험적 관찰 때문입니다. 예를 들어 “정중한 톤”, “사실에 대한 확신”, “특정 주제에 대한 집착” 같은 속성이 특정 벡터 방향과 연결될 수 있다는 것입니다.
하지만 실제 적용은 단순하지 않습니다. 스티어링의 성패는 대체로 세 가지 결정에 달려 있습니다.
- 어디에 개입할 것인가: 레이어 선택
- 어떻게 개입할 것인가: 개입 함수 설계
- 얼마나 개입할 것인가: 강도 조절
여기에 LLM 특유의 자기강화 루프가 겹칩니다. LLM은 방금 생성한 토큰을 다시 입력으로 받아 다음 토큰을 생성합니다. 스티어링이 너무 강하면 특정 방향으로 계속 증폭되면서 출력이 무너지거나, 같은 표현을 반복하거나, 문맥과 무관한 토큰을 생성할 수 있습니다.
3. 개입 함수 설계
가장 직관적인 방식은 앞서 본 것처럼 hidden state에 벡터를 더하는 것입니다.
x ← x + αv이 방식은 단순하지만 열린 루프 제어(open-loop control)에 가깝습니다. 현재 상태가 이미 v 방향으로 충분히 강한지, 아니면 약한지를 확인하지 않고 매번 같은 방향으로 밀어붙이기 때문입니다.
토큰 생성이 반복되면 다음과 같은 문제가 생길 수 있습니다.
- 이전 토큰이 이미
v방향을 강화합니다. - 다음 단계에서 다시
αv가 더해집니다. - 특정 방향의 성분이 계속 누적됩니다.
- 출력이 반복되거나 붕괴할 수 있습니다.
클램핑: 닫힌 루프 제어
Anthropic의 Golden Gate Claude와 Hugging Face 커뮤니티의 Eiffel Tower Llama 실험에서 인상적으로 보였던 방식은 클램핑(clamping)입니다.
Golden Gate Claude에서는 Claude 3 Sonnet 내부에서 골든게이트 브리지 개념과 관련된 특징을 찾고, 그 값을 강제로 높게 고정했습니다. 그 결과 모델은 여러 질문에 대해 골든게이트 브리지와 관련된 답변을 반복적으로 생성했습니다.
Eiffel Tower Llama 실험도 비슷한 아이디어를 오픈소스 모델에서 재현했습니다. 특정 피처를 클램핑하자 모델이 다양한 답변을 에펠탑과 연결하는 모습을 보였습니다.
클램핑은 단순히 벡터를 더하는 것이 아니라, 특정 방향 성분을 목표값으로 설정하는 방식입니다.


Gemma 모델을 대상으로 SAE를 적용해 에펠탑과 관련된 특징을 제어한 실험입니다. 특정 벡터를 클램핑하면 모델이 모든 답변의 맥락을 에펠탑과 연결 짓는 등, LLM의 내부 표현을 수정하여 출력을 직접적으로 조절할 수 있음을 보여주었습니다.
# 의사코드
current_projection = dot(x, v) # 현재 v 방향 성분
x = x - current_projection * v # 기존 성분 제거
x = x + target_strength * v # 목표 강도로 설정
이 방식은 v 방향 성분을 일정 수준으로 유지합니다.
- 이미 충분히 강하면 더 밀어붙이지 않습니다.
- 약하면 목표 강도까지 끌어올립니다.
- 결과적으로 특정 개념의 세기를 일정하게 유지하려고 합니다.
이 관점에서 클램핑은 피드백이 있는 제어에 가깝습니다. 단순히 “더하기”가 아니라 “목표 상태로 맞추기”에 가까운 방식입니다.
Affine 변환
최근 연구에서는 단순한 덧셈이나 클램핑을 넘어 더 일반화된 Affine 변환도 다룹니다.
x ← Ax + b이 방식은 평균과 공분산 정렬 관점에서 개념을 이동시키거나 제거하는 변환으로 이해할 수 있습니다. 이론적으로는 더 정교한 제어가 가능하지만, 그만큼 설계와 평가도 어려워집니다.
결국 중요한 것은 좋은 벡터 v를 찾는 일만이 아닙니다. 그 벡터를 어떤 방식으로 적용할지, 즉 컨트롤러를 어떻게 설계할지가 스티어링의 품질을 크게 좌우합니다.
4. 스티어링 벡터 찾기
“어떤 벡터 v를 사용할 것인가”는 Activation Steering의 또 다른 핵심 문제입니다. 현재 주로 논의되는 접근은 네 가지 정도로 정리할 수 있습니다.
4.1 Diff-in-means / CAA (데이터 주도)
가장 단순하면서도 여전히 강력한 방식입니다.
원하는 행동을 보이는 긍정 샘플과 그렇지 않은 부정 샘플을 준비한 뒤, 두 그룹의 활성화 값 차이를 평균 내어 방향 벡터를 구합니다.
예를 들어 정중한 답변과 무례한 답변을 각각 모으고, 두 그룹의 hidden state 평균 차이를 계산합니다. 그 차이가 “정중함” 방향을 나타내는 벡터 후보가 됩니다.
장점은 명확합니다.
- 구현이 간단합니다.
- 학습 비용이 낮습니다.
- 원하는 행동에 대한 데이터셋만 있으면 빠르게 실험할 수 있습니다.
반면 단점도 있습니다.
- 행동 유형에 따라 신뢰성 편차가 큽니다.
- 어떤 설정에서는 잘 작동하지만, 다른 입력에서는 성능을 악화시킬 수 있습니다.
- 벡터 하나가 항상 안정적인 행동 변화를 보장하지 않습니다.
4.2 프로브 기반 개입 (ITI)
프로브 기반 방식은 단순히 두 데이터 그룹의 차이를 보는 데서 더 나아갑니다. 특정 속성을 분류하도록 선형 분류기(linear probe)를 학습하고, 이 분류기가 가리키는 방향을 활용해 모델에 개입합니다.
이 방식의 장점은 개입 위치를 더 정교하게 잡을 수 있다는 점입니다. 전체 레이어에 뭉뚱그려 개입하는 대신, 특정 어텐션 헤드(attention head) 단위로 조정할 수 있습니다.
TruthfulQA 같은 벤치마크에서 유의미한 개선이 보고된 사례도 있습니다. 관점상으로는 단순히 벡터를 더하는 접근보다, 모델 내부의 연산 위치를 더 세밀하게 조정하는 방식에 가깝습니다.
4.3 SAE Feature Steering (해석가능성 지향)
최근 가장 많은 관심을 받는 접근 중 하나는 Sparse Autoencoder(SAE)를 활용하는 방식입니다.
SAE는 모델의 복잡한 활성화 값을 더 희소한 피처 단위로 분해합니다. 이후 특정 피처의 디코더 방향을 스티어링 벡터로 사용할 수 있습니다.

이 방식의 장점은 해석가능성입니다.
- 특정 피처가 어떤 개념과 연결되는지 사람이 비교적 직관적으로 이해할 수 있습니다.
- Neuronpedia 같은 커뮤니티를 통해 피처 사전을 공유하고 재사용할 수 있습니다.
- 모델 내부 표현을 분석하고 설명하는 데 유용합니다.
하지만 스티어링 성능만 놓고 보면 아직 한계가 분명합니다. AxBench 보고서에서는 SAE 기반 방식이 전반적으로 경쟁력 있는 결과를 보이지 못했습니다. Eiffel Tower Llama 실험에서도 피처 조작은 흥미로운 결과를 만들었지만, 프롬프트의 역할이 여전히 중요하다는 점이 드러났습니다.
SAE는 모델을 이해하는 데 강점이 있습니다. 다만 그 이해가 곧바로 안정적인 제어 성능으로 이어진다고 보기는 어렵습니다.
4.4 Feature Discovery 자동화
SAE 기반 접근의 큰 병목은 “수많은 피처 중 어떤 피처가 실제로 효과적인가”를 찾는 일입니다.
이를 해결하기 위해 프롬프트 변형으로 피처를 자동 탐색하는 FDPV, 개입의 견고성을 높이려는 SISTER 같은 연구가 진행되고 있습니다. 아직 초기 단계지만, 피처 탐색 자동화는 스티어링의 엔지니어링 비용을 낮추는 데 중요한 역할을 할 수 있습니다.
5. Sweet Spot
Activation Steering의 가장 큰 실전 문제는 최적 작동 범위가 매우 좁다는 점입니다.
Eiffel Tower Llama 실험에서도 이 특징이 잘 드러났습니다. 스티어링 강도 α를 조절하다 보면 다음과 같은 패턴이 나타납니다.
α가 조금만 낮으면 스티어링 효과가 거의 나타나지 않습니다.- 반대로
α를 조금만 높여도 모델이 쉽게 붕괴합니다. - 같은 설정이라도 입력 프롬프트에 따라 최적값이 달라질 수 있습니다.
이 문제를 단순한 하이퍼파라미터 튜닝으로만 보기 어렵습니다. Activation Steering은 본질적으로 복잡한 시스템 제어 문제에 가깝습니다.
실전에서는 다음 문제가 동시에 나타납니다.
- 불확실한 목적 함수
LLM-as-a-judge로 평가하더라도 점수에는 노이즈가 있습니다. 톤, 일관성, 유창성처럼 주관적인 항목은 더 불안정합니다. - 좁은 제어 범위
효과가 없는 구간과 모델이 붕괴하는 구간 사이의 간격이 매우 좁을 수 있습니다. - 피드백 루프
한 번의 개입이 다음 토큰 생성 상태를 바꾸고, 그 상태가 다시 후속 개입에 영향을 줍니다.
측정 지표는 계층화해야 합니다
좁은 작동 범위를 효율적으로 찾으려면 평가 지표를 비용에 따라 나눠야 합니다.
먼저 저비용 보조 지표로 명백히 실패한 설정을 빠르게 제거합니다.
- 3-gram 반복률: 반복 생성이나 모델 붕괴 감지
- Surprisal / Logprob: 분포 이탈 감지
- 키워드 포함 여부: 원하는 개념이 주입되었는지 확인
이후 살아남은 후보에만 고비용 평가를 적용합니다.
- LLM-judge를 활용한 톤 평가
- 응답 일관성 평가
- 유창성 평가
- 실제 태스크 성공률 평가
처음부터 모든 후보를 LLM-judge로 평가하면 비용이 빠르게 커집니다. 저비용 필터로 후보를 줄인 뒤, 소수의 설정만 정밀 평가하는 방식이 현실적입니다.
다중 스티어링은 탐색 공간을 폭발시킵니다
여러 레이어와 여러 피처를 동시에 조정하면 문제는 더 어려워집니다.
예를 들어 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],
...
}Eiffel Tower Llama 실험에서는 BoTorch 기반 베이지안 최적화도 시도했지만, 기대만큼 극적인 성과를 얻지는 못했습니다.
여기서 중요한 교훈은 피처 수를 늘린다고 제어력이 자동으로 좋아지지는 않는다는 점입니다. 오히려 탐색 난이도만 커질 수 있습니다. 그래서 실전에서는 최소 개입 원칙이 중요합니다. 가능한 한 적은 레이어, 적은 피처, 낮은 강도로 원하는 효과를 얻는 방향이 더 안정적입니다.
6. Decoding Parameters
스티어링 벡터와 개입 함수를 잘 설계해도 충분하지 않습니다. 디코딩 파라미터(decoding parameters)가 출력 안정성에 큰 영향을 주기 때문입니다.
스티어링 상황에서는 다음 파라미터를 함께 봐야 합니다.
- Temperature
일반적인 생성보다 낮게 설정하는 편이 안정적일 수 있습니다. 예를 들어 0.2~0.6 범위에서 시작하면 유창성과 지시 준수율을 함께 확인하기 좋습니다. - Repetition Penalty
벡터 주입으로 모델이 특정 표현을 반복하는 경우가 있습니다. 반복 패널티는 이런 붕괴를 완화하는 데 도움이 됩니다. - Top-p
분포의 꼬리를 제한해 문맥과 동떨어진 토큰 생성을 줄일 수 있습니다.
스티어링은 모델을 특정 방향으로 밀어붙입니다. 이때 디코딩 파라미터는 그 방향에서 모델이 폭주하지 않도록 막아주는 가드레일 역할을 합니다.
따라서 스티어링 강도만 따로 튜닝해서는 충분하지 않습니다. 스티어링 벡터, 개입 함수, 디코딩 파라미터를 하나의 제어 시스템으로 함께 봐야 합니다.
7. 언제 쓰면 좋을까?
Activation Steering은 매력적인 기술이지만, 모든 상황에서 필요한 도구는 아닙니다. 실제 업무 적용 여부는 다음 질문으로 판단하는 편이 좋습니다.
프롬프트만으로 충분한가?
짧은 응답이 대부분이고, 프롬프트 최적화만으로 원하는 행동을 안정적으로 얻을 수 있다면 스티어링을 도입할 이유가 크지 않습니다.
AxBench 결과도 이 점을 뒷받침합니다. 잘 설계된 프롬프트는 여전히 매우 강력합니다.
긴 생성에서 일관성이 중요한가?
긴 대화, 장문 생성, 세션 기반 개인화처럼 초기 지침이 희석되기 쉬운 상황에서는 스티어링이 더 의미 있을 수 있습니다. 토큰 생성 과정에 계속 개입할 수 있기 때문입니다.
사용자별로 즉시 적용하고 되돌려야 하는가?
미세 조정은 강력하지만 유연하지 않습니다. 사용자별, 세션별로 다른 제어를 적용하고 바로 해제해야 한다면, 가역적인 런타임 개입은 분명한 장점을 가질 수 있습니다.
평가 체계를 만들 수 있는가?
스티어링은 효과와 붕괴 사이의 구간이 좁습니다. 따라서 측정 체계 없이 도입하면 위험합니다. 최소한 다음 항목은 필요합니다.
- 반복률
- 출력 품질
- 개념 주입 정도
- 유창성
- 태스크 성공률
- 프롬프트별 안정성
평가 체계가 없다면 스티어링은 제어 기술이 아니라 우연에 가까운 튜닝이 될 수 있습니다.
8. 결론

AxBench가 보여주듯, 잘 설계된 프롬프트는 여전히 강력합니다. SAE 기반 스티어링은 해석가능성 측면에서 매력적이지만, 현재 성능만 보면 기대에 미치지 못한 부분도 있습니다.
그럼에도 Activation Steering에는 고유한 가능성이 있습니다.
- 세션별로 적용하고 해제할 수 있는 가역적 제어
- 긴 생성에서의 행동 일관성 유지
- 프롬프트만으로는 어려운 내부 표현 수준의 개입
- 모델 내부 메커니즘을 이해하고 조작하는 실험적 가치
Activation Steering을 단순한 x + αv 수식으로 접근하면 한계가 빠르게 드러납니다. 실전에서는 다음 요소를 함께 설계해야 합니다.
- 컨트롤러 설계: Add, Clamp, Affine
- 목적 함수 정의: 저비용 지표와 고비용 지표의 조합
- 탐색 자동화: 그리드 서치, 베이지안 최적화
- 안정화 메커니즘: 디코딩 파라미터, 게이트, 가드레일
- 최소 개입 원칙: 레이어와 피처 수를 최소화
프롬프트는 모델에게 무엇을 해야 하는지 지시합니다. 스티어링은 생성 과정에서 그 방향을 얼마나 유지할지 내부 상태 수준에서 조절합니다. 이처럼 역할을 나누어 보면 Activation Steering의 위치가 더 명확해집니다.
아직 스티어링 기술은 초기 단계에 있습니다. 좁은 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

