본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Probing; 프로빙
학습이 끝난 신경망의 중간 표현을 고정해 두고, 그 위에 작은 분류기(프로브)를 학습시켜 특정 정보가 그 표현에 들어 있는지 알아보는 분석 기법

프로빙(probing)은 신경망의 어느 층 표현에 품사, 구문 구조, 참·거짓, 게임판 상태 같은 정보가 담겨 있는지를 확인하는 방법이다. 모델의 가중치는 건드리지 않고, 그 층의 활성값을 입력으로 받아 목표 속성을 맞히는 단순한 지도 학습 모델, 즉 프로브(probe, 프로빙 분류기)를 따로 학습시킨다. 프로브가 높은 정확도를 내면 "이 표현에 그 정보가 (프로브가 읽을 수 있는 형태로) 들어 있다"고 본다. 국내 글에서는 영어 음차 "프로빙", "프로브"와 함께 "탐침", "탐침 분류기"라는 번역어도 보인다.

기계적 해석 가능성과 설명 가능한 인공지능 양쪽에서 가장 싸고 빠른 도구로 쓰인다. 다만 프로빙은 정보가 "있다"는 것만 보여 줄 뿐 모델이 그 정보를 "쓴다"는 것은 보여 주지 못한다는 점을 늘 염두에 둬야 한다.

층 ℓ의 표현 hℓ(x)∈ℝd와 속성 레이블 y가 주어지면, 가장 흔한 선형 프로브는 로지스틱 회귀다.

p(y=1∣x)=σ(w⊤hℓ(x)+b)

w,b만 학습하고 원래 모델은 고정한다. 다중 클래스면 소프트맥스 회귀를 쓴다. 더 단순한 평균 차이 프로브(difference-in-means)는 학습조차 없이 두 클래스 표현의 평균 차를 방향으로 삼는다.

w=μ+−μ−,μ±=1|D±|∑x∈D±hℓ(x)

용어는 2016년 기욤 알랭(Guillaume Alain)과 요슈아 벤지오(Yoshua Bengio)가 붙였다. 이들은 Inception v3와 ResNet-50의 모든 층에 독립적으로 학습한 선형 분류기를 "프로브"라 부르고, 층이 깊어질수록 특징의 선형 분리 가능성이 단조롭게 증가함을 관찰했다.[1]

아래는 GPT-2 small의 6번째 층 표현에서 "X의 수도는 Y다" 문장의 참·거짓을 읽어 내는 선형 프로브 예다. 학습에 쓴 나라와 평가에 쓴 나라를 나눠, 문장을 외운 것이 아니라 일반화하는지를 본다(transformers 4.49, scikit-learn 1.7에서 실행 확인).

import random, torch
from sklearn.linear_model import LogisticRegression
from transformers import AutoModelForCausalLM, AutoTokenizer

tok = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2").eval()
LAYER = 6

pairs = [("France", "Paris"), ("Japan", "Tokyo"), ("Italy", "Rome"), ("Germany", "Berlin"),
         ("Spain", "Madrid"), ("Russia", "Moscow"), ("China", "Beijing"), ("Egypt", "Cairo"),
         ("Greece", "Athens"), ("England", "London"), ("Canada", "Ottawa"), ("Austria", "Vienna"),
         ("Poland", "Warsaw"), ("Portugal", "Lisbon"), ("Ireland", "Dublin"), ("Norway", "Oslo"),
         ("Sweden", "Stockholm"), ("Turkey", "Ankara"), ("Thailand", "Bangkok"), ("Kenya", "Nairobi")]
random.seed(0)
data = []
for c, cap in pairs:
    wrong = random.choice([p[1] for p in pairs if p[1] != cap])
    data += [(f"The capital of {c} is {cap}.", 1), (f"The capital of {c} is {wrong}.", 0)]

def act(text):                                   # LAYER번째 은닉 상태, 마지막 토큰
    ids = tok(text, return_tensors="pt").input_ids
    with torch.no_grad():
        hs = model(ids, output_hidden_states=True).hidden_states
    return hs[LAYER][0, -1].numpy()

X = [act(t) for t, _ in data]; y = [l for _, l in data]
probe = LogisticRegression(max_iter=2000).fit(X[:28], y[:28])   # 앞 14개 나라로 학습
print("held-out acc:", probe.score(X[28:], y[28:]))             # 뒤 6개 나라로 평가

예제는 원리를 보이기 위한 것으로 표본이 너무 적다. 실제 연구는 수천 개 문장, 층별 정확도 곡선, 아래에 나오는 대조 기준선을 함께 보고한다.

프로브의 종류

편집 원본 편집
종류 방식 쓰임새 주의점
선형(로지스틱) 프로브 표현 위 선형 분류기 가장 기본. 선형 표현 가설 검증 정규화 강도에 결과가 흔들림
평균 차이 프로브 두 클래스 평균의 차 방향 학습 불필요. 찾은 방향을 그대로 조종에 씀 클래스 내 분산이 크면 정확도 낮음
비선형(MLP) 프로브 작은 신경망 선형으로 안 읽히는 정보 확인 프로브가 과제를 스스로 학습해 버릴 수 있음
비지도 프로브(CCS) 레이블 없이 논리적 일관성으로 방향을 찾음 모델이 "아는 것"과 "말하는 것"의 분리 찾은 방향이 진리가 아닌 다른 두드러진 특징일 수 있음

무엇을 알아냈나

편집 원본 편집
  • 언어 구조: 2019년 테니(Ian Tenney) 등은 BERT의 층별 프로빙으로 품사 태깅, 구문 분석, 개체명 인식, 의미역, 상호참조 정보가 이 순서대로 점점 위층에서 나타나, 전통적인 자연어 처리 파이프라인을 모델이 스스로 재현한다고 보고했다.[2]
  • 세계 모형: 오델로 게임의 합법 수만 학습한 GPT 모델에서 프로브로 게임판 상태를 읽어 낼 수 있었고, 그 표현을 개입으로 바꾸면 모델의 다음 수 예측도 바뀌었다. 원 논문에서는 이 표현이 비선형 프로브로만 잘 읽혔다.[3]
  • 참과 거짓: 번스(Collin Burns) 등의 CCS(Contrast-Consistent Search)는 문장과 그 부정의 참 확률이 서로 반대가 되어야 한다는 일관성 조건만으로 레이블 없이 방향을 찾았고, 6개 모델·10개 데이터셋에서 영샷 정확도를 평균 4%포인트 넘었다.[4] 마크스(Samuel Marks)와 테그마크(Max Tegmark)는 단순한 참·거짓 문장에서 대형 언어 모델이 규모가 충분하면 진리값을 선형으로 표현한다는 증거를 내놓았고, 단순한 평균 차이 프로브가 다른 프로브만큼 일반화하면서 모델 출력에 더 인과적으로 관여하는 방향을 찾는다고 보고했다.[5]
  • 안전 모니터링: 구글 딥마인드 해석 가능성 팀은 2025년 사용자 프롬프트의 유해 의도 탐지 과제에서 단순한 선형 프로브가 분포 밖 데이터까지 거의 완벽하게 작동해, 희소 오토인코더 기반 방법보다 싸고 낫다고 보고했다.[6]

한계와 대조 기준

편집 원본 편집

프로빙의 가장 큰 함정은 "프로브가 맞혔다"와 "모델이 그 정보를 표현하고 쓴다"를 혼동하는 것이다.[7]

  • 프로브가 과제를 배운다: 표현력이 큰 프로브는 표현에 정보가 없어도 입력 단어만 보고 과제를 외울 수 있다. 휴잇(John Hewitt)과 량(Percy Liang)은 단어 유형마다 무작위 출력을 할당한 대조 과제(control task)를 만들고, 언어 과제 정확도에서 대조 과제 정확도를 뺀 선택성(selectivity)을 보라고 제안했다. 이 기준으로 보면 ELMo 위의 흔한 MLP 프로브들은 선택적이지 않았고, 드롭아웃은 선택성을 높이지 못했다.[8]
  • 상관과 인과: 프로브가 읽어 낸 방향을 모델이 실제로 쓰는지는 따로 개입 실험으로 확인해야 한다. 방향을 지우거나 더했을 때 출력이 예상대로 바뀌는지 보는 것이 표준이다.
  • 기준선: 무작위 초기화 모델, 입력 임베딩 층, 단어 빈도 같은 단순 기준선과 비교해야 정확도의 의미가 생긴다.

프로빙으로 개념 방향을 찾았다면, 그 방향을 추론 중에 더하거나 빼서 모델 행동을 바꿀 수 있다. 이를 활성값 조종(activation steering)이라 하고, 더하는 벡터를 조종 벡터(steering vector)라 한다. 프로빙의 인과 검증이자 그 자체로 미세조정 없이 모델을 제어하는 수단이다.

  • ActAdd(2023): "Love"와 "Hate" 같은 프롬프트 한 쌍의 중간 활성 차이를 조종 벡터로 써서 감정 전환과 독성 완화를 했다.[9]
  • 대조 활성 추가(Contrastive Activation Addition, CAA, 2023): 어떤 행동의 긍정 예와 부정 예 쌍에서 잔차 스트림 활성 차이를 평균해 벡터를 만들고, 사용자 프롬프트 뒤의 모든 토큰 위치에 양 또는 음의 계수를 곱해 더한다. 라마 2 채팅 모델에서 아첨, 환각 등의 정도를 조절했다.[10]
  • 추론 시점 개입(ITI, 2023): 일부 어텐션 헤드에서 프로브로 찾은 "진실" 방향으로 활성을 옮겨, 알파카 모델의 TruthfulQA 진실성을 32.5%에서 65.1%로 올렸다. 개입 강도를 키우면 진실성은 오르지만 유용성은 떨어지는 교환 관계가 있었다.[11]
  • 거절 방향(2024): 최대 720억 매개변수의 공개 채팅 모델 13종에서, 잔차 스트림의 방향 하나를 지우면 유해 요청도 거절하지 않고 더하면 무해한 요청도 거절했다. 안전 미세조정이 얼마나 얕은지를 보여 주는 결과로, 화이트박스 탈옥 기법으로도 쓰일 수 있다.[12]

조종 벡터는 평균 차이 방향으로 간단히 만들 수 있다. 위 예제의 모델을 그대로 쓴다.

L = 6
def resid(text):                                 # L번째 블록 입력, 토큰 평균
    ids = tok(text, return_tensors="pt").input_ids
    with torch.no_grad():
        return model(ids, output_hidden_states=True).hidden_states[L][0].mean(0)

pos = ["I love this. It is wonderful and makes me happy.", "What a great, delightful day."]
neg = ["I hate this. It is terrible and makes me angry.", "What an awful, miserable day."]
v = torch.stack([resid(p) for p in pos]).mean(0) - torch.stack([resid(n) for n in neg]).mean(0)

def add_vec(coef):                               # 블록 입력에 coef * v를 더하는 훅
    def hook(mod, args):
        return (args[0] + coef * v,) + args[1:]
    return model.transformer.h[L].register_forward_pre_hook(hook)

ids = tok("I think the new restaurant downtown is", return_tensors="pt").input_ids
for coef in [0, 4, -4]:
    h = add_vec(coef)
    out = model.generate(ids, max_new_tokens=15, do_sample=False, pad_token_id=tok.eos_token_id)
    h.remove()
    print(coef, tok.decode(out[0, ids.shape[1]:]))

GPT-2 small에서 계수 -4를 주면 같은 프롬프트가 "the worst thing in the world" 쪽으로 이어지고, 0이나 +4에서는 긍정적인 문장이 나온다. 계수가 지나치게 크면 문장이 깨지므로 층과 세기를 함께 탐색한다. 표현 공학(representation engineering)이라는 이름으로 이런 기법을 정리한 연구도 있다.[13]

  1. ↑ Guillaume Alain, Yoshua Bengio, 〈Understanding intermediate layers using linear classifier probes〉, 2016. arXiv:1610.01644
  2. ↑ Ian Tenney, Dipanjan Das, Ellie Pavlick, 〈BERT Rediscovers the Classical NLP Pipeline〉, ACL 2019. arXiv:1905.05950
  3. ↑ Kenneth Li 외, 〈Emergent World Representations: Exploring a Sequence Model Trained on a Synthetic Task〉, ICLR 2023. arXiv:2210.13382
  4. ↑ Collin Burns 외, 〈Discovering Latent Knowledge in Language Models Without Supervision〉, ICLR 2023. arXiv:2212.03827
  5. ↑ Samuel Marks, Max Tegmark, 〈The Geometry of Truth: Emergent Linear Structure in Large Language Model Representations of True/False Datasets〉, COLM 2024. arXiv:2310.06824
  6. ↑ Lewis Smith 외, Negative Results for SAEs On Downstream Tasks and Deprioritising SAE Research, AI Alignment Forum, 2025-03-26.
  7. ↑ Yonatan Belinkov, 〈Probing Classifiers: Promises, Shortcomings, and Advances〉, 2021(Computational Linguistics 게재). arXiv:2102.12452
  8. ↑ John Hewitt, Percy Liang, 〈Designing and Interpreting Probes with Control Tasks〉, EMNLP 2019. arXiv:1909.03368
  9. ↑ Alexander Matt Turner 외, 〈Steering Language Models With Activation Engineering〉, 2023. arXiv:2308.10248
  10. ↑ Nina Panickssery 외, 〈Steering Llama 2 via Contrastive Activation Addition〉, 2023. arXiv:2312.06681
  11. ↑ Kenneth Li 외, 〈Inference-Time Intervention: Eliciting Truthful Answers from a Language Model〉, NeurIPS 2023. arXiv:2306.03341
  12. ↑ Andy Arditi 외, 〈Refusal in Language Models Is Mediated by a Single Direction〉, 2024. arXiv:2406.11717
  13. ↑ Andy Zou 외, 〈Representation Engineering: A Top-Down Approach to AI Transparency〉, 2023. arXiv:2310.01405