* IPE: Isolating Path Effects for Improving Latent Circuit Identification (BlackboxNLP 2025)

아래 논문은 IPE: Isolating Path Effects for Improving Latent Circuit Identification입니다. 핵심은 기존 circuit discovery가 edge 단위로 중요도를 계산하는 반면, 이 논문은 입력 임베딩 → 중간 컴포넌트들 → 최종 logits까지 이어지는 전체 computational path의 효과를 직접 분리해서 평가한다는 점입니다.  

1. 문제의식

기존 방법들, 예를 들어 Activation Patching, Edge Activation Patching, ACDC, EAP는 보통 특정 노드나 edge를 patch/ablate해서 중요도를 계산합니다.

하지만 Transformer의 residual stream 구조에서는 한 노드가 여러 이전 컴포넌트의 정보를 동시에 받습니다. 따라서 특정 edge A → B를 ablate해도, 실제로는 B가 받은 다른 경로들의 영향까지 섞여 최종 logits에 반영됩니다.

논문은 이 문제를 다음처럼 봅니다.

“edge 하나의 효과”를 보려는 기존 방식은 실제로는 그 edge를 포함한 여러 path들의 혼합 효과를 측정한다.

그래서 IPE는 edge가 아니라 완전한 path를 단위로 봅니다.

예:

Input → MLP 0 → MLP 1 → Final logits

이 path만의 효과를 제거하거나 counterfactual 값으로 대체한 뒤, 최종 출력이 얼마나 변하는지를 측정합니다.


2. 핵심 아이디어: Path effect isolation

IPE는 특정 path를 따라 흐르는 message 변화량을 순차적으로 계산합니다.

논문에서 path를 다음처럼 둡니다.

a → b → c → d

각 노드의 함수는 fa,fb,fcf_a, f_b, f_c이고, 각 노드 입력은 xa,xb,xcx_a, x_b, x_c입니다.

2.1 Path ablation

path의 첫 노드 a의 출력을 제거하면:

Δma=fa(xa)Δm_a = - f_a(x_a)

이 변화량을 다음 노드 b의 입력에 반영합니다.

Δmb=fb(xb+Δma)fb(xb)Δm_b = f_b(x_b + Δm_a) - f_b(x_b)

그 다음 c에도 반영합니다.

Δmc=fc(xc+Δmb)fc(xc)Δm_c = f_c(x_c + Δm_b) - f_c(x_c)

즉, path 전체를 한 번에 제거하는 것이 아니라, path를 따라 message delta를 전파합니다.

중요한 점은 b, c가 받는 다른 residual 정보는 그대로 두고, 선택된 path를 통해 전달되는 변화량만 추적한다는 것입니다.


3. IPE의 Path Evaluation 절차

IPE의 EvaluatePath는 다음과 같은 재귀적 절차입니다.

EvaluatePath(node, path, Δm):
    if path is empty:
        return Δm

    corrupted_msg = node.forward(node.input + Δm)
    clean_msg     = node.forward(node.input)

    Δm = corrupted_msg - clean_msg

    next_node = path.pop()
    return EvaluatePath(next_node, path, Δm)

즉, 각 노드에서:

  1. clean 입력 x로 출력 계산
  2. path에서 온 변화량 Δm을 더한 입력 x + Δm으로 출력 계산
  3. 두 출력의 차이를 새로운 Δm으로 사용
  4. 다음 노드로 전달

이렇게 해서 마지막에는 최종 residual stream에서 해당 path가 제거되거나 대체되었을 때의 변화량을 얻습니다.


4. 두 가지 intervention 방식

논문은 IPE를 두 가지 방식으로 사용합니다.

4.1 IPE-Ablation

path의 첫 노드 출력을 0으로 제거합니다.

Δm_0 = - out_clean

이는 “이 path가 없었다면 logits이 어떻게 변했는가?”를 보는 방식입니다.

4.2 IPE-CF: Counterfactual Replacement

clean path의 출력을 counterfactual path의 출력으로 바꿉니다.

Δm_0 = - out_clean + out_counterfactual

즉, “이 path가 clean 입력이 아니라 counterfactual 입력에서 온 정보처럼 작동했다면 출력이 어떻게 변했는가?”를 봅니다.

IOI처럼 clean/counterfactual prompt가 명확한 task에서는 IPE-CF가 더 적합합니다.


5. Path scoring metric

논문은 두 가지 metric을 사용합니다.

5.1 Target Logit Difference

특정 정답 토큰 t의 logit 변화량을 봅니다.

LogitDifference =
100 × ( L(r_clean,t) - L(r_corr,t) ) / |L(r_clean,t)|

여기서 r_clean은 원래 residual stream, r_corr는 path intervention 후 residual stream입니다.

이 metric은 path를 제거했을 때 정답 logit이 얼마나 떨어지는지를 측정합니다.

5.2 Indirect Effect

Counterfactual 평가에서는 Indirect Effect를 사용합니다.

IE = 1/2 [
    (P*(t_cf) - P(t_cf)) / P(t_cf)
    +
    (P(t) - P*(t)) / P*(t)
]

의미는 다음과 같습니다.

  • counterfactual target t_cf의 확률이 얼마나 증가했는가?
  • original answer t의 확률이 얼마나 감소했는가?

즉, counterfactual path가 실제로 답을 counterfactual 방향으로 밀었는지를 측정합니다.


6. Search Algorithm: Backward Discovery

모든 path를 평가하는 것은 불가능합니다. Transformer에서 path 수는 layer와 component 수에 따라 지수적으로 증가합니다.

그래서 IPE는 top-down / backward search를 사용합니다.

시작점은 최종 logits입니다.

frontier = [LOGIT node]
completed = []

while frontier is not empty:
    path = frontier.pop()
    candidates = path.predecessors()

    for node in candidates:
        msg = EvaluatePath(node, path)

        if Metric(msg) ≥ threshold:
            if node is EMBED:
                completed.append(node + path)
            else:
                frontier.append(node + path)

return completed

즉:

  1. logits에서 시작
  2. 이전 노드 후보들을 하나씩 붙임
  3. 현재 partial path의 contribution을 평가
  4. threshold 이상이면 path를 더 확장
  5. input embedding까지 도달하면 complete path로 저장

논문은 forward search도 고려했지만, partial path의 최종 효과를 정확히 평가하려면 downstream 전체 효과를 계산해야 해서 비효율적이라고 설명합니다. 그래서 backward search를 선택합니다.


7. 기존 EAP/ACDC와의 차이

구분기존 Edge-centric 방식IPE
평가 단위edge 또는 nodefull path
MLP0 → MLP1Input → MLP0 → MLP1 → Logits
문제점다른 path 효과가 섞임특정 path 효과만 분리
장점빠르고 확장성 좋음정보 흐름 해석이 더 정확함
단점path-level coherence 부족search cost가 큼

IPE의 핵심 장점은 path-level causal flow를 직접 추적한다는 점입니다.


8. 실험 설정

논문은 두 가지 평가를 수행합니다.

8.1 IOI ground-truth 비교

GPT-2 small의 IOI task에서 Wang et al.의 수작업 circuit과 비교합니다.

평가 기준:

  • ground-truth node를 얼마나 회수했는가?
  • ground-truth edge를 얼마나 회수했는가?

결과:

Recovered ground-truth nodes: 97.5%
Recovered ground-truth edges: 47.6%

즉, 핵심 노드는 거의 모두 찾았지만 edge 회수율은 낮습니다. 이는 path 중심 방법이 edge 전체 공간을 충분히 덮으려면 threshold를 매우 낮춰야 하기 때문입니다.

8.2 MIB leaderboard

MIB benchmark에서 다음 조건을 평가합니다.

TaskModel
IOIGPT-2 small
IOIQwen2.5
MCQAQwen2.5

비교 대상은 EActP, EAP, EAP-IG, NAP-IG, IFR, UGS 등입니다.


9. 주요 결과

GPT-2 IOI에서는 IPE-CF가 매우 좋은 성능을 보입니다.

MethodGPT-2 IOI CPRGPT-2 IOI CMD
EActP(CF)2.300.02
IPE-CF2.240.02
IPE0.720.28

즉, counterfactual path replacement를 사용한 IPE-CF는 MIB leaderboard에서 상위권 성능을 냅니다.

반면 Qwen2.5에서는 성능이 낮습니다.

MethodQwen2.5 IOI CPRQwen2.5 IOI CMD
IPE0.420.58
IPE-CF0.350.57

논문은 Qwen2.5의 layer 수가 많아 path search space가 너무 커지고, 현재 search budget으로는 충분한 edge/path coverage를 얻지 못했기 때문이라고 해석합니다.


10. 방법론적 한계

가장 큰 한계는 계산 비용입니다.

threshold를 낮추면 더 많은 path를 찾을 수 있지만, path 수가 지수적으로 증가합니다.

논문 그림5.

논문 부록 Figure 5에서 보듯이:

  • threshold ↓
  • 발견되는 node/edge/path ↑
  • edge 하나당 필요한 path 수 ↑
  • 계산 비용 급증

따라서 현재 IPE는 GPT-2 small 수준에서는 유효하지만, Qwen2.5 같은 더 깊은 모델에서는 search efficiency 개선이 필요합니다.


11. 논문의 핵심 기여

정리하면 이 논문의 기여는 세 가지입니다.

  1. Path-centric circuit discovery 제안
    edge가 아니라 input-to-logits full path를 평가합니다.
  2. Isolated path effect 계산법 제안
    path를 따라 message delta를 전파하여 특정 path 효과만 제거하거나 counterfactual로 대체합니다.
  3. IOI에서 기존 circuit 회수 및 MIB 성능 검증
    GPT-2 IOI에서 ground-truth node의 97.5%를 회수하고, IPE-CF는 MIB leaderboard에서 강한 성능을 보입니다.

한 줄 요약

이 논문은 Transformer circuit discovery에서 개별 edge 중요도 대신 전체 computational path의 causal effect를 분리해 측정하는 IPE 방법을 제안하며, GPT-2 IOI에서는 매우 효과적이지만 대형 모델에서는 path search 비용이 핵심 병목으로 남는다는 것을 보입니다.

Path-patching, Activation Patching, Edge Activation Patching, ACDC, attribution patching, edge attribution patching, EAP-IG 등의 차이는? 그리고 edge가 들어간 방법론들에서 edge는 멀리떨어진 layer의 node도 허용하나?

Mechanistic Interpretability에서 이 방법들은 종종 비슷하게 언급되지만 실제로는 “무엇을 causal unit으로 보는가?”“어떻게 importance를 계산하는가?” 가 다릅니다.

먼저 큰 그림부터 보면:

Activation Patching
      ↓
Path Patching
      ↓
ACDC
      ↓
Attribution Patching
      ↓
Edge Attribution Patching (EAP)
      ↓
EAP-IG
      ↓
IPE

라고 볼 수 있습니다.


1. Activation Patching

(ROME 논문 계열에서 많이 사용)

목적

특정 node의 activation이 행동에 얼마나 중요한지 측정

예:

Corrupted Prompt
        ↓
    Layer l
        ↓
      h_l

corrupted run의 activation을 clean run activation으로 교체


수식

모델: M(x)

clean 입력: x_clean

corrupted 입력: x_corr

특정 node activation: a_l

patch: a_l^corr ← a_l^clean


importance:

AP(l) = Metric(M(xcorr; al←aclean)) - Metric(M(xcorr))

측정 대상

node

예:

attention head 8.6
MLP 7
residual stream layer 10

2. Path Patching

(IOI 논문)

Activation Patching을 “특정 edge” 수준으로 확장


아이디어

보고 싶은 edge A → B 만 clean 정보가 지나가도록 함


4 forward pass 사용

clean: Aclean → Bclean

corrupted: Acorr → Bcorr

patch: Acorr → Bclean

효과 측정


수식

Metric: m(.)

edge: A → B

importance:

PP(A→B) = m(Bpatched) - m(Bcorr)

문제

실제로는 A → B 만 측정하지 못함

왜냐하면 B가 residual stream 전체를 받기 때문


3. ACDC

(Towards Automated Circuit Discovery)

목적

수작업 Path Patching 자동화


핵심

후보 edge: ei

각 edge에 대해 Path Patching 수행


중요도:

S(ei) = ΔMetric(ei)

importance가 작은 edge 제거

Graph
 ↓
Pruning
 ↓
Circuit

특징

  • edge-level
  • greedy pruning

계산량

매 edge마다 patching

매우 비쌈


4. Attribution Patching

(Syed et al. 2023)


문제:

Activation Patching은 O(#nodes)번 forward 필요


해결:

1차 Taylor 근사


activation: a

patch 변화량: Δa = aclean-acorr

metric: F(a)


Taylor:

F(a+Δa) ≈ F(a) + ∇F(a)ᵀΔa

importance:

AP_attr = ∇F(a)ᵀΔa

즉, gradient × activation difference


장점

forward 1회

backward 1회


단점

비선형성 무시


5. Edge Attribution Patching (EAP)

(Hanna et al., 2024)


Attribution Patching을

node → edge 수준으로 확장


edge: i → j

message: mij

clean-corrupt 차이:

Δmij = mijclean - mijcorr

metric: F


gradient: ∂F/∂mij


importance:

EAP(i,j) = Δmij · ∂F/∂mij

즉, gradient × edge-message difference


특징

회로 발견 속도 매우 빠름

ACDC보다 수백 배 빠름


6. EAP-IG

(MIB benchmark)


EAP 문제:

gradient saturation


예:

gradient ≈ 0 이면 중요 edge를 놓침

그래서 Integrated Gradients 적용


경로:

m(α) = mcorr + αΔm

importance:

IG=01F(m(α))mdαΔmIG=\int_0^1 \frac{\partial F(m(\alpha))}{\partial m}\, d\alpha \cdot \Delta m

실제로:

K step approximation

IG ≈ Σk ∂F(m(αk))/∂m · Δm / K

최종:

EAP-IG = IntegratedGradient × Δm

장점

EAP보다 정확

gradient saturation 감소


단점

K번 backward 필요


7. IPE

(이번 논문)


기존 방법: edge score 중심


IPE: full path score 중심


경로

Input
→ Head A
→ MLP B
→ Head C
→ Logits

message delta 전파

Δma
→ Δmb
→ Δmc
→ ...

path 전체 제거


importance:

Logitclean - Logitablated_path

또는

Indirect Effect


Edge의 정의는?

이게 매우 중요한 질문입니다.


대부분의 논문에서 Edge는

Transformer Graph 상의 직접 연결

즉,

node_i → node_j 이고 j가 i의 출력을 직접 입력으로 받음

예:

Head 3.7 → MLP 4 가능

MLP 7 → Head 8.2 가능

멀리 떨어진 Layer도 가능?

가능합니다.

TransformerLens 계열 graph에서는 residual stream 때문에

Layer 3 → Layer 10 도 edge로 정의 가능

왜냐하면

Layer 10 input:

r10 
= r9 + output9
= ...
= r3 + ...

즉, Layer3 output이 Layer10에도 직접 존재


그래서 ACDC/EAP에서는 edge를 보통

source node → destination node

로 정의하며, source layer와 destination layer 사이에 여러 layer가 있어도 허용합니다.


예:

Head 3.2 → Head 9.4 가능
MLP 2 → MLP 11 가능
Head 5.1 → Logits 가능
(특히 MIB 구현)

논문별 Edge 정의 차이

방법UnitEdge 범위
Activation PatchingNode없음
Path PatchingEdge임의 source→destination
ACDCEdge임의 layer 간 가능
Attribution PatchingNode없음
EAPEdge임의 layer 간 가능
EAP-IGEdge임의 layer 간 가능
IPEFull PathInput→Logits path

핵심 정리

Mechanistic Interpretability의 circuit discovery는 사실상 다음과 같이 발전해 왔습니다.

Activation Patching
(node importance)

→

Path Patching
(edge importance)

→

ACDC
(edge search)

→

Attribution Patching
(fast node score)

→

EAP
(fast edge score)

→

EAP-IG
(more accurate edge score)

→

IPE
(path score)

그리고 EAP, EAP-IG, ACDC에서의 edge는 일반 그래프의 인접 노드(edge) 개념이 아니라 residual stream graph 상의 causal connection을 의미하므로, 보통 멀리 떨어진 layer의 node 사이도 edge로 허용됩니다. 이것이 IPE 논문이 비판하는 핵심이기도 합니다. 즉 EAP가 평가하는 A→B의 중요도는 실제로는 그 edge 하나가 아니라 A→B를 포함하는 수많은 path의 혼합 효과라는 것입니다.  

Activation Patching과 path-patching의 수식이 같지 않나? edge를 실제 어떻게 구현하나?

맞습니다. 엄밀히 말하면 제가 앞서 단순화해서 설명한 수식만 보면 Activation Patching과 Path Patching이 거의 같아 보입니다.

실제로는 patch하는 위치가 다르기 때문에 완전히 다른 방법입니다.


1. Activation Patching

Activation Patching은 특정 node 전체를 교체합니다.

예를 들어 layer 5의 attention head 5.3을 본다고 합시다.

clean run: a_clean^(5.3)

corrupted run: a_corr^(5.3)

patch: a_corr^(5.3) ← a_clean^(5.3)

그 후 모델 전체를 다시 forward.


수식으로 쓰면

원래 corrupted 모델: y = F(a_corr)

patch 후: y’ = F(a_clean)

importance: Δ = Metric(y’) – Metric(y)


즉, Head 5.3 전체를 교체합니다.


문제점

Head 5.3의 출력은

Head 6.2
Head 7.4
MLP 8
...

모든 downstream에 전달됩니다.

그래서 Head 5.3이 중요하다는 것은 알 수 있지만 어디로 정보를 보내는지는 모릅니다.


2. Path Patching

IOI 논문의 핵심은 A → B 라는 특정 connection만 측정하는 것입니다.


예를 들어

Head 7.9 → Head 9.6

를 평가한다고 합시다.


Head 9.6의 입력은

resid_pre^(9)
= Σ 모든 이전 컴포넌트 출력

입니다.

즉, Head 7.9 만 받는 게 아닙니다.


그래서 Path Patching은

Head 9.6이 읽는 residual stream 중에서

Head 7.9 기여분만 clean으로 교체합니다.

수식

destination node B 입력:

r_B = m_A→B + m_other

corrupted:

r_B^corr = m_A→B^corr + m_other^corr

patched:

r_B^patch = m_A→B^clean + m_other^corr

즉, A→B 만 clean으로 바꿉니다.

나머지는 모두 corrupted 유지.


왜 구현이 어려운가?

Transformer는

B input = residual stream 만 받습니다.

모델 안에는 A→B edge 라는 텐서가 없습니다.


따라서, A의 output이 B에 얼마만큼 들어갔는가를 따로 계산해야 합니다.


TransformerLens 구현

attention head A 출력: z_A

attention pattern: P_A

OV matrix: W_OV


B에 전달되는 메시지:

m_A→B = P_A z_A W_OV

(정확히는 residual stream에 더해지는 벡터)


Path Patching은 m_A→B^corr을 제거하고 m_A→B^clean을 넣습니다.


즉,

r_B^patch = r_B^corr - m_A→B^corr + m_A→B^clean

이게 edge patching의 실제 구현입니다.


3. IOI 논문의 “Path”가 사실은 Edge

여기서 이름 때문에 많이 헷갈립니다.

Wang et al. (2023)의 Path Patching은 사실 edge patching에 가깝습니다.


평가 대상: A → B


IPE 논문이 비판하는 것도 이것입니다.

논문 표현:

Path patching is actually evaluating an edge while other paths remain active.  


즉, Path Patching 이름인데 실제로는 single edge importance입니다.


4. EAP는 어떻게 구현하나?

Path Patching은 실제로 forward를 여러 번 해야 합니다.


EAP는 이걸 Taylor approximation으로 바꿉니다.

edge message: m_ij


difference: Δm_ij = m_ij^clean – m_ij^corr


gradient: ∂F / ∂m_ij


importance:

EAP(i,j) = Δm_ij^T (∂F/∂m_ij)

즉, 실제 patching을 하지 않고 “만약 patch했으면 얼마나 바뀔까?”를 gradient로 추정합니다.


5. IPE가 왜 새로운가?

기존 방법들은 모두 A → B를 평가합니다.


하지만 A → B를 patch해도 B는 여전히

C → B
D → B
E → B

등 다른 입력을 받습니다.


그래서 측정값은 A→B 하나의 효과가 아니라

A→B를 포함한 수많은 downstream path의 효과가 됩니다.

IPE는

Input
→ A
→ B
→ C
→ Logits

전체를 따라 Δm을 계속 전파합니다.

그래서 진짜 한 개의 computational path만 제거할 수 있습니다.  


정리하면,

방법실제 패치 대상
Activation Patchingnode 전체
Path Patching (IOI)특정 edge(A→B)
ACDCedge
EAPedge (gradient 근사)
EAP-IGedge (IG 근사)
IPE전체 path

따라서 Activation Patching과 Path Patching의 수식 형태는 비슷하지만, Activation Patching은 a_B 전체를 교체하고, Path Patching은 a_B를 만드는 입력 중 A가 보낸 메시지 성분만 교체한다는 점이 본질적인 차이입니다. 이는 실제 TransformerLens 구현에서는 residual stream에서 특정 source node의 기여분을 분리하여

r_B^patch
= r_B^corr - m_A→B^corr + m_A→B^clean

형태로 구현됩니다.

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다