---
title: "뉴런보다 많은 feature를 찾는 방법 — Sparse Autoencoder"
slug: "towards-monosemanticity-sparse-autoencoders-deep-dive"
category: "AI / LLM"
topic: "ai-llm"
subtopic: "ml-foundations"
tags: ["Sparse Autoencoder","SAE","Monosemanticity","Dictionary Learning","Mechanistic Interpretability","Superposition","Paper Review"]
status: "published"
created: "2026-07-24"
updated: "2026-07-24"
summary: "Bricken 외의 Towards Monosemanticity 원문을 바탕으로 512개 MLP neuron activation을 4,096개 이상의 sparse feature로 분해하는 sparse autoencoder의 encoder·decoder·L1 loss·unit-norm dictionary·dead feature resampling을 설명한다. 해석가능성, reconstruction, causal intervention이 서로 다른 검증이라는 점과 L1만으로 의미가 보장되지 않는 반례를 Python 3.9.6으로 직접 계산한다."
kind: "Deep Dive"
evidence: "Bricken 외 Transformer Circuits Thread 원문 전체와 Appendix Autoencoder Architecture·Neuron Resampling 직접 확인, Python 3.9.6 표준 라이브러리로 SAE 식·dead feature 탐지와 loss-weighted seed·L1 ambiguity를 직접 실행"
series: "LLM 시스템 지도 — 4단계 내부 구조와 해석"
---

> **4단계 일곱 번째 논문.** 이 글은 Trenton Bricken 외의 [Towards Monosemanticity Decomposing Language Models With Dictionary Learning 원문](https://transformer-circuits.pub/2023/monosemantic-features/index.html)을 직접 읽고 썼다. 원문은 Transformer Circuits Thread 형식의 공개 연구 보고서이며 공개일은 2023-10-04다. Sparse Autoencoder(SAE, 희소 오토인코더)는 **이미 학습된 model의 activation을 더 많은 수의 드문 feature 활성으로 다시 표현하려는 작은 encoder-decoder model**이다.

## 이 글에서 얻을 답과 범위

이전 글인 Toy Models of Superposition은 “neuron보다 feature가 많을 수 있다”는 원인을 만들었다. 이 글은 다음 질문으로 간다. 이미 학습이 끝난 LLM의 MLP(Multi-Layer Perceptron, 다층 퍼셉트론) activation만 보고, 겹쳐 있던 feature direction을 어떻게 다시 찾아볼 수 있을까.

이 글을 읽은 뒤에는 아래를 설명할 수 있어야 한다.

1. SAE의 input, encoder, learned feature, decoder, reconstruction이 각각 무엇인지.
2. 512 neuron activation을 왜 4,096 또는 131,072 feature로 **늘려서** 표현하는지.
3. L2 reconstruction loss와 L1 sparsity penalty가 각각 막는 실패가 무엇인지.
4. decoder dictionary와 encoder detector를 왜 tied weight(전치로 묶인 가중치)로 두지 않았는지.
5. dead feature(학습 내내 한 번도 켜지지 않는 SAE hidden unit)를 왜, 어떻게 resampling하는지.
6. reconstruction이 잘 된다는 것, 사람이 해석한다는 것, model behavior를 바꾼다는 것이 왜 서로 다른 증거인지.
7. SAE 결과로 “model이 정말 이 feature를 쓴다” 또는 “위험 feature가 없다”라고 아직 말할 수 없는 이유.

범위는 원문이 연구한 **one-layer Transformer의 ReLU MLP activation**과 그 위에서 훈련한 SAE다. Claude 3 Sonnet 규모 SAE, later cross-layer circuit discovery, production RAG system의 feature store는 다루지 않는다. 또한 원문 제목은 *Towards Monosemanticity*다. 사용자가 본 “Sparse Autoencoders Find Highly Interpretable Features in Language Models”는 이 글이 다루는 연구 방향을 잘 설명하는 표현이지만, 원전의 정식 제목과는 다르다.

> **핵심 한 문장.** SAE는 neuron에 이름표를 붙이는 도구가 아니다. activation을 `많은 후보 direction 중 아주 적은 개`의 합으로 다시 쓰게 하여, neuron 축에 가려진 feature 후보를 만드는 dictionary learning(사전 학습) 근사기다.

## 왜 필요한가 — neuron 하나가 feature 목록이 아닐 수 있다

Transformer의 MLP layer에는 width만큼 neuron이 있다. 원문 대상 model은 MLP width가 512다. ‘512 neuron을 하나씩 보면 512개 개념을 이해할 수 있겠지’라고 생각하기 쉽다. 하지만 같은 원문은 한 neuron이 academic citation, English dialogue, HTTP request, Korean text처럼 서로 무관해 보이는 입력들의 혼합에 반응하는 예를 보인다. 이런 neuron은 무엇을 계산하는지 한 문장으로 고정하기 어렵다.[원문의 도입](https://transformer-circuits.pub/2023/monosemantic-features/index.html#problem-setup)

Toy Models of Superposition은 sparse feature가 드물게 함께 켜지는 분포에서는 여러 feature direction을 적은 neuron space에 겹쳐 넣는 것이 평균 loss에 유리할 수 있음을 보였다. 그러면 activation vector는 아래처럼 된다.

\[
\mathbf{x}^{(j)} \approx \mathbf{b}+
\sum_{i=1}^{m} f_i(\mathbf{x}^{(j)})\mathbf{d}_i
\tag{1}
\]

`j`는 한 token 위치의 datapoint, `\mathbf{x}^{(j)} \in \mathbb{R}^{n}`은 원래 MLP activation, `\mathbf{b}`는 공통 bias, `\mathbf{d}_i \in \mathbb{R}^{n}`은 i번째 feature direction, `f_i\geq0`은 그 feature의 크기다. 중요한 역전이 있다. 원래 activation 차원은 `n=512`인데, 찾고 싶은 feature 수 `m`은 `4,096`처럼 `n`보다 클 수 있다.

`m>n`이면 식 (1)은 정보가 부족해서 무한히 많은 분해가 가능하다. 따라서 그냥 matrix factorization(행렬 분해)을 하면 아무 방향이나 많이 만들 수 있다. SAE는 “한 datapoint에서는 대부분 feature가 0”이라는 sparsity 가정을 추가한다. 이 제약이 없으면 더 많은 feature는 해석가능성을 높이는 것이 아니라 모호함을 폭발시킨다.

| 질문 | neuron basis만 볼 때 | sparse feature dictionary를 만들 때 |
| --- | --- | --- |
| 분석 단위 | 고정된 좌표 축 하나 | activation space의 임의 방향 하나 |
| 개수 | MLP width와 같음 | width보다 훨씬 많을 수 있음 |
| 한 unit의 의미 | 여러 unrelated pattern이 섞일 수 있음 | activation이 sparse하고 일관적이라는 가설을 시험 |
| 자동 보장 | 없음 | reconstruction·희소성만 보장, 의미는 별도 검증 |

## 무엇인가 — sparse autoencoder는 dictionary learning의 빠른 근사다

### dictionary와 feature activation

dictionary learning은 ‘관측 벡터를 몇 개 dictionary atom(사전 원자)의 sparse한 합으로 표현하라’는 문제다. 여기서 각 decoder column `\mathbf{d}_i`가 atom 또는 feature direction이고, `f_i`가 coefficient(계수)다. dictionary가 overcomplete(과완전)하다는 말은 atom 수 `m`이 원래 vector dimension `n`보다 많다는 뜻이다.

Compressed sensing(압축 센싱)도 낮은 차원 관측에서 sparse한 높은 차원 signal을 복원하는 문제다. 하지만 dictionary가 주어진 경우에도 정확한 sparse coefficient를 찾는 일은 일반적으로 어렵다. 원문은 너무 강한 iterative sparse coding이 model 자신은 계산할 수 없는 feature까지 사후적으로 만들어 낼 수 있다는 점을 걱정했다. 그래서 multi-step search 대신 한 번의 작은 neural network forward pass로 feature를 추정하는 **약한** 방법인 SAE를 택했다.[원문의 SAE 동기](https://transformer-circuits.pub/2023/monosemantic-features/index.html#setup-autoencoder-motivation)

이 선택은 ‘SAE가 진짜 feature만 찾는다’는 보증이 아니다. 원문 authors의 의도는 model의 MLP와 비슷한 계산력으로 접근 가능한 decomposition을 찾자는 것이다. dictionary를 더 잘 맞추는 알고리즘과 original model이 실제로 이용하는 representation은 같은 목표가 아니다.

### monosemantic은 무오류 인증서가 아니다

monosemantic feature(단의미 feature)는 높은 activation example, low activation example, downstream effect가 하나의 비교적 좁은 설명으로 맞는 feature를 뜻한다. 원문은 feature가 ‘상대적으로 monosemantic’하다고 말한다. 한 feature가 base64, Arabic script, DNA, Hebrew script에 반응하는 구체 예를 깊게 조사했지만, 모든 feature의 모든 activation을 인간이 완전히 설명했다고 주장하지 않는다.

따라서 아래 세 문장은 서로 다르다.

| 주장 | 필요한 증거 | SAE train loss만으로 충분한가 |
| --- | --- | --- |
| `x_hat`이 `x`에 가깝다 | held-out reconstruction error | 거의 본다. |
| feature가 ‘Arabic script’다 | 다양한 activation·반례·proxy의 일치 | 아니다. |
| 그 feature가 다음 token prediction에 원인이다 | feature ablation 또는 activation intervention 뒤 logit/NLL 변화 | 아니다. |
| model에 위험 feature가 없다 | coverage와 모든 feature·circuit에 대한 강한 부재 증명 | 아니다. |

## 선행 개념 — L0, L1, L2가 서로 맡는 일이 다르다

### L0는 몇 개가 켜졌는지 센다

feature activation vector를 `\mathbf{f}`라 하자. `\lVert\mathbf{f}\rVert_0`은 값의 크기가 아니라 0이 아닌 원소의 개수다. `f=(0,2.3,0,0.1)`이면 `L0=2`다. 정말 sparse한 code를 원하면 L0를 직접 작게 만들어야 하지만, 0인지 아닌지의 선택은 미분이 매끄럽지 않아 gradient optimization에 어렵다.

### L1는 L0를 흉내 내는 부드러운 벌점이다

\[
\lVert\mathbf{f}\rVert_1=\sum_i |f_i|
\tag{2}
\]

ReLU encoder의 `f_i`는 음수가 아니므로 L1는 그냥 켜진 크기의 합이다. L1는 작은 activation을 0으로 밀어 sparse한 해를 선호하게 한다. 그러나 L1는 ‘사람이 이해할 수 있는 concept’라는 단어를 전혀 모른다. 나중의 직접 검증에서 하나의 diagonal direction이 두 axis feature보다 L1가 작아질 수 있는 반례를 계산한다.

### L2와 MSE는 원래 activation을 버리지 말라고 한다

L2 norm은 제곱 error를 크게 벌한다. MSE(Mean Squared Error, 평균제곱오차)는 vector의 각 좌표 error 제곱을 평균낸 값이다. 이것만 최소화하면 `x_hat=x`를 잘 복사하되 hidden feature가 dense해질 수 있다. L1만 최소화하면 모든 feature를 0으로 만들어 reconstruction을 포기한다. SAE는 두 목적을 같은 loss에 둔다.

\[
\mathcal{L}=\frac{1}{|X|}\sum_{\mathbf{x}\in X}
\lVert\mathbf{x}-\hat{\mathbf{x}}\rVert_2^2+
\lambda\lVert\mathbf{f}\rVert_1
\tag{3}
\]

`X`는 activation dataset, `\lambda`는 sparsity coefficient다. `\lambda`를 키우면 feature 수가 적어지는 경향은 있지만, 너무 크면 reconstruction과 original model behavior를 잃는다. 작은 loss 하나만 최적 hyperparameter의 증거가 아닌 이유다.

## 밑바닥 원리 — encoder는 찾고 decoder는 다시 쓴다

원문 Appendix의 SAE는 input/output dimension `n`, SAE hidden dimension `m`을 둔다. `m\geq n`이며, 원문 사례에서는 `n=512`, 주요 run A/1에서는 `m=4,096`이다. encoder weight `W_e\in\mathbb{R}^{m\times n}`, decoder weight `W_d\in\mathbb{R}^{n\times m}`, encoder bias `\mathbf{b}_e`, decoder bias `\mathbf{b}_d`를 사용한다.

\[
\begin{aligned}
\bar{\mathbf{x}} &= \mathbf{x}-\mathbf{b}_d \\
\mathbf{f} &= \operatorname{ReLU}(W_e\bar{\mathbf{x}}+\mathbf{b}_e) \\
\hat{\mathbf{x}} &= W_d\mathbf{f}+\mathbf{b}_d
\end{aligned}
\tag{4}
\]

실행 순서는 매우 짧다.

```text
원래 Transformer MLP activation x
  → decoder bias b_d를 먼저 뺌
  → encoder W_e가 각 feature 후보를 검사
  → ReLU가 음수 후보를 0으로 만듦
  → 살아남은 sparse activation f
  → decoder dictionary W_d의 column들을 f만큼 더함
  → x_hat을 원래 x와 비교
```

각 `W_d` column은 unit L2 norm(길이 1)으로 고정한다. 그렇지 않으면 model이 decoder vector를 100배 키우고 feature activation을 1/100로 줄여 L1 벌점을 편법으로 낮출 수 있다. 이 normalization은 feature가 얼마나 자주·강하게 켜지는지와 dictionary vector의 길이를 분리한다.[원문의 SAE Architecture](https://transformer-circuits.pub/2023/monosemantic-features/index.html#appendix-autoencoder)

### decoder column이 feature direction이다

feature i가 `f_i=3`만큼 켜지면 `3\mathbf{d}_i`를 reconstruction에 더한다. 그래서 decoder column `\mathbf{d}_i`는 ‘이 feature가 original MLP activation 안에서 어느 방향으로 write되는가’의 후보다. 반면 encoder row는 ‘어떤 noisy activation pattern에서 이 feature를 detect할 것인가’의 detector다. 역할이 다르므로 원문은 `W_e=W_d^T`로 묶지 않았다.

비슷한 feature direction이 서로 가까우면 decoder는 서로 비슷해질 수 있다. 이때 encoder까지 같으면 조금 다른 입력을 같은 feature로 오인하는 crosstalk(누화)이 생긴다. 원문은 encoder가 서로 조금 기울어져 비슷한 dictionary direction을 구분하는 empirical observation을 보고한다. tied weight는 autoencoder에서 흔한 간소화지만, 이 SAE의 capacity를 줄일 수 있다.

### pre-encoder bias가 왜 두 번 보이나

식 (4)에서 decoder bias를 output에 더하고 input에서 빼는 것은 같은 기준점을 이동하는 일이다. activation cloud의 중심이 0이 아닐 때, 먼저 평균적인 background를 떼어 내고 feature가 deviation(편차)을 설명하게 한다. 원문은 toy model에서 이 bias가 성능에 중요했다고 설명하고, pre-encoder bias를 dataset geometric median(기하 중앙값)으로 초기화했다. bias가 없다고 해서 feature가 더 순수해지는 것은 아니다.

## 내부 구조와 실제 실행 흐름 — 512 neuron에서 131,072 candidate까지

원문 Transformer는 attention block 1개와 ReLU MLP block 1개를 가진 one-layer model이다. residual stream dimension은 128, inner MLP dimension은 512다. The Pile로 100 billion token을 Adam optimizer로 학습했다. SAE용 activation은 Pile의 40 million context에서 ReLU 뒤 MLP activation을 모으고, context당 250 token을 뽑아 섞었다. batch size는 8,192, repetition 없이 sample하며 1 million update step 동안 8 billion이 조금 넘는 activation vector를 사용했다.[원문의 Transformer와 SAE dataset](https://transformer-circuits.pub/2023/monosemantic-features/index.html#appendix-autoencoder-dataset)

| 대상 | 원문 설정 | 이 숫자가 뜻하는 것 |
| --- | ---: | --- |
| Transformer MLP neuron | 512 | 원래 neuron basis 크기 |
| SAE expansion factor | 1×–256× | 512–131,072 feature 후보 |
| 상세 분석 A/1 | 4,096 feature | 8× overcomplete dictionary |
| SAE 학습 activation | 8 billion 초과 | rare feature를 관찰하려는 대규모 dataset |
| Transformer training | 100 billion token | SAE가 분석하는 이미 학습된 base model |

원문은 90개 learned dictionary의 activation example과 downstream logit effect를 시각화했다. 다만 `131,072 feature를 발견했다 = 131,072개의 진짜 concept을 증명했다`는 등식은 성립하지 않는다. dictionary width를 키우면 feature splitting(큰 feature가 더 세밀한 여러 feature로 갈라짐)도 일어나고, ultralow-density artifact도 늘 수 있다.

### feature ablation의 실제 연결

원문은 feature i를 없애는 실험에서 context 전체를 MLP layer까지 forward한 뒤 SAE를 돌리고, 각 token의 activation에서 `f_i(\mathbf{x}^{(j)})\mathbf{d}_i`를 뺀 후 나머지 forward pass를 완료한다.

\[
\mathbf{x}^{(j)}_{\text{ablated}}
=\mathbf{x}^{(j)}-f_i(\mathbf{x}^{(j)})\mathbf{d}_i
\tag{5}
\]

그 뒤 각 token의 predicted log-likelihood 변화가 feature의 downstream effect다. 이것이 단지 input text의 빈도만 외운 dictionary가 아니라 model output 기능에 닿는지 검사하는 한 단계다. 하지만 one feature를 뺀 결과는 다른 feature·layer가 보상하는 정도, SAE reconstruction 오차, context에 따라 달라진다. ablation 하나로 circuit 전체가 끝나는 것은 아니다.[원문의 Feature Ablations](https://transformer-circuits.pub/2023/monosemantic-features/index.html#appendix-feature-ablations)

## 직접 검증과 재현 — SAE loss와 dead feature를 작은 벡터로 보기

**직접 실행 확인**이다. 2026-07-24에 Python 3.9.6 표준 라이브러리로 `/tmp/sparse-autoencoders-research/verify_sparse_autoencoder.py`를 실행했다. 이 script는 LLM·PyTorch training·8 billion activation을 재현하지 않는다. 식 (4), unit decoder direction, dead feature detection, resampling의 우선순위, L1의 한계를 2차원 벡터에서 확인한다.

```bash
python3 /tmp/sparse-autoencoders-research/verify_sparse_autoencoder.py
```

실제 출력은 아래다.

```text
activations before resampling: [(1.0, 0.0), (0.0, 0.0)]
reconstructions before resampling: [(1.0, 0.0), (0.0, 0.0)]
per-input MSE before resampling: [0.0, 0.5]
feature usage counts: (1, 0)
squared-loss sampling weights: (0.0, 0.25)
selected high-error input: (0.0, 1.0)
resampled decoder direction: (0.0, 1.0)
resampled encoder row: (0.0, 0.2)
activation after resampling on selected input: (0.0, 0.2)
exact-reconstruction L1 costs: axis=2.000000 diagonal=1.414214
checks passed
```

첫 feature는 `(1,0)`에만 켜지고 두 번째 feature는 negative bias 때문에 두 input 모두에서 0이다. loss가 큰 `(0,1)`은 original paper의 **loss squared에 비례한 확률 sampling**에서 더 자주 seed가 된다. 이 최소 script는 random sampling 대신 가장 큰 loss를 고르는 deterministic version(결정적 버전)으로 의도를 보인다. seed `(0,1)`을 unit decoder vector로 놓고 alive encoder norm의 `0.2`배로 encoder를 초기화하면 새 feature가 그 input에서 약하게라도 켜진다.

마지막 두 줄은 더 중요한 경고다. `x=(1,1)`을 axis dictionary 두 개 `(1,0),(0,1)`로 정확 복원하면 L1는 `2`다. normalized diagonal 하나 `(1,1)/\sqrt2`로도 정확 복원하면 activation은 `\sqrt2`, L1는 약 `1.414`다. L1는 diagonal이 두 개의 독립 axis를 뭉개는 표현인지 알지 못하고, 단지 더 적은 activation을 선호한다. 그래서 feature 의미·causal effect·cross-dictionary stability를 추가로 봐야 한다.

## 성능과 트레이드오프 — reconstruction, sparsity, coverage는 한 점에 모이지 않는다

SAE hyperparameter를 바꾸면 보통 아래 세 축이 충돌한다.

| 축 | 너무 약할 때 | 너무 강할 때 | 확인 지표 |
| --- | --- | --- | --- |
| reconstruction | original MLP behavior를 잃는다 | 해당 없음 | reconstructed Transformer NLL, held-out MSE |
| L1 sparsity | 많은 feature가 동시에 켜져 dense dictionary가 된다 | feature가 죽거나 important detail을 버린다 | 평균 L0, density histogram |
| dictionary width | coarse feature만 남는다 | duplicate·artifact·training 비용 증가 | high-density alive feature 수, manual inspection |
| dataset scale | rare feature를 못 본다 | 비용 증가, redundancy 관리 필요 | 최소 발견 density, held-out diversity |
| resampling 빈도 | dead feature가 capacity를 낭비한다 | loss spike와 divergence 위험 | dead count, loss stability |

원문은 hyperparameter를 고를 때 training loss 하나가 부족하다고 명시한다. L1 coefficient가 다르면 objective 자체가 달라 loss를 공정하게 비교할 수 없다. authors는 평균 L0를 10 또는 20보다 낮게 목표로 삼았지만, 이것도 보편 정답이 아니라 경험적 target이다. reconstructed Transformer NLL은 SAE output `x_hat`로 MLP activation을 교체하고 base model loss가 얼마나 변하는지 보는 지표다.

원문은 MLP를 통째로 ablate한 NLL 차이로 normalize한 ‘MLP contribution 설명 비율’은 과대평가일 수 있다고 경고한다. MLP 제거라는 baseline이 비현실적으로 나쁘기 때문이다. 좋은 percentage 하나가 feature decomposition 전체의 faithful explanation(충실한 설명)을 증명하지 않는다.[원문의 Hyperparameter Selection](https://transformer-circuits.pub/2023/monosemantic-features/index.html#appendix-hyperparameters)

## dead feature와 resampling — unused slot을 고오차 data에 다시 배정하기

ReLU와 L1 penalty를 함께 쓰면 어떤 SAE hidden unit은 encoder preactivation이 계속 음수가 되어 activation이 0으로만 남을 수 있다. 이 dead feature는 overcomplete width 하나를 차지하지만 reconstruction에 전혀 기여하지 않는다. random Kaiming initialization으로 되돌리는 방법도 있지만, 원문은 현재 SAE가 잘 못 맞히는 activation을 seed로 쓰는 resampling을 사용했다.

원문의 정확한 procedure는 다음이다.

1. step `25,000`, `50,000`, `75,000`, `100,000`에서 직전 `12,500` step 동안 한 번도 firing하지 않은 neuron을 찾는다.
2. 무작위 `819,200` input의 current reconstruction loss를 계산한다.
3. 각 input을 `loss²`에 비례한 확률로 뽑는다.
4. dead neuron마다 선택 input을 unit L2 norm으로 정규화해 decoder dictionary vector로 설정한다.
5. 그 encoder vector는 alive encoder norm 평균의 `0.2`배가 되게 정규화하고 encoder bias는 0으로 둔다.
6. 바꾼 weight·bias의 Adam optimizer state도 reset한다.

왜 `0.2`인가. 새 feature가 처음부터 너무 강하게 켜져 기존 dictionary와 간섭하지 않게 하려는 초기 약화다. 이후 gradient가 그 direction이 실제 유용한지 시험한다. 이 절차는 dead feature를 즉시 진짜 feature로 바꾸는 정답지가 아니다. authors는 resampling이 sudden loss spike를 만들고 너무 자주 하면 training이 diverge할 수 있다고 적는다. high-density cluster와 ultralow-density cluster를 분리해 보는 이유도 dead count만으로는 사실상 죽은 feature를 놓칠 수 있기 때문이다.[원문의 Neuron Resampling](https://transformer-circuits.pub/2023/monosemantic-features/index.html#appendix-autoencoder)

## 실패와 한계 — sparse하게 복원했다고 해석한 것은 아니다

### architectural sparsity만으로 문제를 없애지 못한다

‘original model에 1-hot activation을 강제하면 superposition이 없어지고 monosemantic neuron이 되지 않을까’라는 직관은 틀릴 수 있다. 원문은 다음 toy language-model example을 든다. A/B/C/D 네 mutually exclusive feature가 각각 다른 다음 token을 요구하는데 neuron 하나만 있다면, A 하나만 구분하고 나머지를 uniform으로 맞히는 loss는 `\frac34\ln3\approx0.8`이다. A와 B를 하나의 firing state로 묶어 둘 중 uniform prediction을 하고 C/D도 묶으면 loss는 `\ln2\approx0.7`이다.

즉 cross-entropy(교차 엔트로피) next-token loss에서는 information을 버리는 것보다 ambiguous하게 여러 feature를 묶는 편이 더 싸질 수 있다. superposition을 architectural constraint로 막아도 polysemanticity가 사라진다고 보장할 수 없다. SAE는 이 때문에 post-training decomposition을 택한다.[원문의 Why not use architectural approaches](https://transformer-circuits.pub/2023/monosemantic-features/index.html#setup-architectural)

### 원문 자체의 제한

1. **작은 one-layer model** — 512 ReLU MLP 하나의 결과다. multi-layer transformer의 attention·residual stream·layer interaction 전체를 분석하지 않는다.
2. **완전한 feature census 부재** — width를 늘려도 새 feature가 계속 나타난 관찰은 ‘다 찾았다’의 반대 증거다.
3. **interpretability metric 부재** — authors는 subjectively meaningful한 feature와 자동 proxy의 상관을 연구했지만, 최적 dictionary를 단일 숫자로 고르는 만족스러운 metric은 아직 없다고 쓴다.
4. **ultralow-density artifact** — 매우 드문 activation cluster 중 다수는 underlying transformer가 아니라 SAE training artifact일 수 있다.
5. **reconstruction과 causality 간극** — `x_hat≈x`여도 decoder column 하나가 독립 causal variable이라는 보장은 없다. feature ablation·steering도 intervention scale과 downstream compensation의 영향을 받는다.
6. **human label 위험** — top activating example 몇 개에 이름을 붙이면 low activation regime·counterexample·subfeature를 놓칠 수 있다. 원문도 interpretation이 feature behavior의 모든 측면을 포착한다고 주장하지 않는다.

SAE를 운영 도구처럼 사용할 때도 same failure mode가 있다. data distribution이 바뀌면 density가 바뀌고, rare feature는 train corpus에 없으면 dictionary에 없다. feature ID와 checkpoint, extraction site, tokenizer, input normalization, decoder normalization, λ, resampling schedule을 versioned artifact로 함께 저장하지 않으면 같은 “feature 812”를 재현할 수 없다.

## 대안과 선택 기준 — 어떤 질문에 어떤 도구를 쓸까

| 목표 | 첫 선택 | SAE보다 나은 경우 | SAE가 더 맞는 경우 |
| --- | --- | --- | --- |
| 단순 압축·visualization | PCA | 직교 방향·분산 요약만 필요할 때 | sparse overcomplete feature를 찾고 싶을 때 |
| 정확한 sparse coefficient 탐색 | iterative dictionary learning, OMP(Orthogonal Matching Pursuit, 직교 매칭 추적) | 작은 data와 계산 비용을 감당하고 최적화 품질이 우선일 때 | 대규모 activation을 빠른 one-pass encoder로 처리할 때 |
| original model을 더 단순하게 만들기 | architectural sparsity·width 변경 | 연구용 model을 새로 훈련할 수 있을 때 | 이미 학습된 model의 activation을 분석할 때 |
| prediction 영향 확인 | activation patching·ablation | 특정 prompt의 causal path가 질문일 때 | 후보 feature direction을 먼저 만들 때 |
| 서비스 품질 개선 | eval set, retrieval·tool trace | RAG answer quality·latency·권한이 질문일 때 | model internals 자체가 조사 대상일 때 |

PCA와 SAE를 같은 ‘차원 축소’라고 부르면 핵심을 놓친다. PCA는 보통 input보다 적거나 같은 수의 orthogonal direction으로 variance를 요약한다. SAE는 input보다 **많은** decoder direction과 sparse coefficient를 찾아 superposition을 풀려 한다. 반면 SAE만으로 policy, security, factuality를 보증한다고 말해도 안 된다. model introspection과 end-to-end system evaluation은 다른 층이다.

## 흔한 오해와 최초 질문에 대한 답

### SAE feature 하나는 model neuron 하나와 같은가

아니다. SAE feature는 decoder column이라는 activation space direction이며, 보통 원래 neuron 여러 개에 distributed되어 있다. 원문도 Hebrew feature처럼 neuron basis의 top activation example에서는 보이지 않는 feature를 제시한다.

### feature를 131,072개 찾았으면 131,072개를 이해한 것인가

아니다. width는 candidate direction 수다. dead feature, ultralow-density artifact, duplicate, feature splitting이 섞일 수 있다. high-density feature의 activation·logit effect·intervention을 따로 확인해야 한다.

### L1를 크게 하면 더 monosemantic해지는가

아니다. L1는 적은 activation을 좋아할 뿐이다. 직접 검증의 diagonal 반례처럼 독립 feature를 하나로 뭉개는 표현도 더 sparse할 수 있다. λ가 너무 크면 reconstruction을 포기한다.

### reconstructed Transformer NLL이 낮으면 feature 의미도 맞는가

아니다. 낮은 NLL은 SAE output으로 바꿔도 model behavior가 많이 유지된다는 evidence다. feature label의 generality·purity, all feature coverage, individual feature causality는 별도로 봐야 한다.

### 이 논문 다음에 무엇을 읽어야 하나

다음은 **Scaling Monosemanticity**다. 이 글의 one-layer 512-neuron setting에서 나온 SAE 방법과 한계를 더 큰 language model scale에서 어떤 dataset·width·feature validation으로 다루었는지 비교한다. 이 글의 L1, decoder direction, density, resampling을 이해하지 않으면 규모가 커진 결과 그래프만 보고 feature 발견이 끝났다고 오해하기 쉽다.

## 출처 및 검증 경로

### 1차 자료

- Bricken 외. [Towards Monosemanticity Decomposing Language Models With Dictionary Learning](https://transformer-circuits.pub/2023/monosemantic-features/index.html), Transformer Circuits Thread, 2023-10-04 — Problem Setup, SAE Setup, Global Analysis, Discussion, Appendix Feature Ablations, Autoencoder Dataset, Architecture, Neuron Resampling, Hyperparameter Selection을 직접 확인했다.
- Elhage 외. [Toy Models of Superposition](https://transformer-circuits.pub/2022/toy_model/index.html) — superposition·sparse feature·overcomplete representation의 문제 설정 원전이다.
- Donoho. [Compressed sensing](https://doi.org/10.1109/TIT.2006.871582), IEEE Transactions on Information Theory, 2006 — sparse recovery와 overcomplete dictionary의 수학적 인접 분야 원전이다.

### 직접 실행 기록

- 환경 — macOS, Python 3.9.6, 표준 라이브러리만 사용.
- 명령 — `python3 /tmp/sparse-autoencoders-research/verify_sparse_autoencoder.py`.
- 관찰 — dead feature는 usage count 0으로 검출됐고, squared reconstruction loss가 큰 input이 resampling seed로 선택됐다. resampling 뒤 새 feature는 선택 input에서 `0.2`로 켜졌다. exact reconstruction 두 가지 중 diagonal code의 L1 `1.414214`가 axis code의 L1 `2.000000`보다 작았다.
- 경계 — 이 실행은 식 (3)·(4)와 resampling의 local logic을 검증한다. 원문의 8 billion activation, Adam training, 512-neuron Transformer, feature interpretation·causal ablation·steering을 재현하지 않는다.

### 보조 해석

- L1 diagonal 반례와 versioned artifact 운영 제안은 원문 수식·절차를 바탕으로 한 필자의 계산과 실무적 해석이다. 원문이 실제 대형 model에 보편 임계값이나 완전 feature coverage를 증명했다는 뜻이 아니다.
