06장에서 조립한 GPT 블록의 파라미터 중 약 3분의 2는 Attention이 아니라 **Feed Forward Network(FFN)**에 있습니다. Attention이 “지금 이 토큰이 문맥 안에서 무엇을 봐야 하는가"를 계산하는 역할이라면, FFN은 그렇게 파악된 문맥을 바탕으로 구체적인 사실(지식)을 저장하고 꺼내는 역할을 맡습니다. 이 장은 그 지식이 벡터 공간의 어떤 성질을 이용해 저장되는지, 그리고 그 성질이 왜 환각(hallucination)과 해석 불가능성이라는 대가를 함께 요구하는지를 다룹니다.
직교 벡터로 지식을 분리해서 담기
서로 다른 지식들이 저장 과정에서 섞이지 않으려면, 이상적으로는 서로 **직교(orthogonal, 90도)**하는 벡터에 저장하는 것이 좋습니다. 직교하는 두 벡터는 내적이 0이므로, 한 벡터의 정보를 읽어도 다른 벡터의 정보가 함께 딸려 나오지 않습니다. 문제는 $N$차원 공간에서 완벽하게 직교하는 벡터는 최대 $N$개까지밖에 만들 수 없다는 것입니다 — 임베딩 차원이 768이면 완전히 독립된 지식을 768개까지만 담을 수 있다는 뜻이 되어, 실제 LLM이 담고 있는 방대한 사실의 양과 맞지 않습니다.
이 제약은 “완벽한 직교"라는 조건을 살짝 완화하면 풀립니다. 두 벡터의 사잇각이 정확히 90도가 아니라 “89°~91° 사이"처럼 **거의 직교(near-orthogonal)**해도 된다고 허용하면, Johnson–Lindenstrauss 보조정리에 의해 거의 직교하는 벡터의 최대 개수는 차원 수에 대해 지수적으로 증가합니다.
$$\text{최대 벡터 개수} \approx \exp(\epsilon \cdot N)$$즉 고차원 공간에서는 무작위로 뽑은 두 벡터가 우연히도 거의 직교할 확률이 매우 높습니다. 이것이 비교적 작은 임베딩 차원으로도 LLM이 방대한 지식을 서로 겹치지 않게 저장할 수 있는 수학적 근거입니다.
지식이 뭉개지면 생기는 일 — 환각과의 연결
두 지식을 나타내는 벡터가 거의 직교하지 않고 뭉쳐 있으면, 질문에 대한 답이 명확하게 분리되지 않고 다른 개념과 섞여 나옵니다. 예를 들어 “왕은 권력을 가진다"와 “왕비는 여성이다"라는 두 지식의 벡터가 충분히 분리되지 않은 채 저장되어 있다면, “왕과 같은 권력을 가진 여성은 누구인가?“라는 질문에 정확한 답(왕비) 대신 다른 답이 섞여 나올 수 있습니다. 모델이 클수록(임베딩 차원이 클수록) 더 많은 구체적 사실을 서로 겹치지 않게 저장할 수 있어 이런 뭉개짐이 줄어들지만, 상대적으로 작은 모델에게 아주 세부적인 사실을 물으면 그럴듯하지만 틀린 답 — 즉 **환각(hallucination)**이 나오기 쉽습니다.
Superposition — 하나의 벡터에 여러 개념이 겹쳐 저장되기
실제 모델의 차원 수는 세상의 모든 개별 사실보다 훨씬 적기 때문에, 서로 무관해 보이는 여러 개념이 하나의 벡터에 중첩(superposed)되어 저장되는 현상이 나타납니다. 예를 들어 “마이클 조던(농구선수)“과 “조던(사람 이름)“과 “야구"라는 개념이 있을 때, 새로운 정보(예: “마이클 조던이 한때 야구선수였다”)가 학습되면 이 개념들의 표현이 서로 겹친 하나의 벡터로 압축될 수 있습니다.
Nelson Elhage, Tristan Hume, Catherine Olsson 외, “Toy Models of Superposition”, arXiv:2209.10652 (2022, Anthropic)
레이어가 깊어질수록 이런 중첩이 누적되는데, 이 덕분에 LLM은 제한된 차원 안에 방대한 지식을 압축해서 담을 수 있지만, 동시에 “이 벡터가 정확히 무엇을 의미하는지” 사람이 해석하기 매우 어려워진다는 대가가 따릅니다.
기계적 해석가능성 — 벡터 안을 들여다보는 연구
“모델이 왜 그런 판단을 내렸는지 알 수 없다"는 문제는 단순한 학술적 호기심을 넘어서는 위험을 낳습니다. 판단의 근거를 알 수 없는 상태로 중요한 의사결정에 LLM을 사용하는 것은 책임 소재를 불명확하게 만듭니다. 이런 문제의식에서 나온 것이 기계적 해석가능성(mechanistic interpretability) 연구입니다. 대표적인 접근은 FFN에서 차원을 부풀리는(expansion) 레이어의 특정 값 하나를 인위적으로 바꿔보고 출력이 어떻게 달라지는지를 관찰해, 그 값이 담고 있는 의미를 역으로 추적하는 방식입니다. 실제로 위험한 지식이 저장된 벡터 방향을 찾아내 그 방향의 가중치를 낮추는 방식은, “~하지 말라"는 규칙을 학습시키는 것보다 훨씬 확실하게 해당 지식의 출력을 억제할 수 있다고 알려져 있습니다 — 단순 규칙 기반 거부는 우회(jailbreak)가 상대적으로 쉬운 반면, 지식 자체의 표현을 억제하면 우회가 더 어려워지기 때문입니다.
Latent Space — 반대로 차원을 축소하는 경우
FFN에서 차원을 부풀렸다가(expansion) 다시 원래 차원으로 축소하는 구조를 06장에서 다뤘는데, 반대로 원래보다 더 작은 차원으로 축소하는 경우도 있습니다. 이렇게 축소된 공간을 **Latent Space(잠재 공간)**라고 부르며, 정보를 압축해 저장했다가 필요할 때 원래 차원으로 복원(reconstruct)하는 용도로 쓰입니다. 이후 시리즈에서 다룰 Quantization·Autoencoder류 기법들이 이 잠재 공간 개념을 압축률과 정보 손실의 트레이드오프로 활용합니다.
흔한 오개념 — “모델 파라미터 하나하나가 특정 지식 하나에 대응한다”
파라미터나 뉴런 하나가 “이순신 장군"이나 “사과” 같은 특정 개념 하나씩을 깔끔하게 담당하고 있을 것이라는 직관은 자연스럽지만, Superposition 현상 때문에 실제로는 성립하지 않는 경우가 대부분입니다. 뉴런 하나가 여러 무관한 개념에 동시에 관여하는 **다의성(polysemanticity)**이 일반적이며, 이 때문에 “이 뉴런을 끄면 이 지식만 사라진다"는 식의 단순한 대응 관계를 기대하기 어렵습니다. 기계적 해석가능성 연구가 어려운 이유도 바로 이 지점에 있습니다 — 개념과 뉴런이 1:1로 대응하지 않고, 여러 개념이 겹친 방향(direction)을 찾아야 하기 때문입니다.
이것으로 Phase 1(아키텍처)이 끝났습니다. 다음 장부터는 Phase 2(학습·정렬)로 넘어가, 사전학습된 베이스 모델을 특정 목적에 맞게 조정하는 파인튜닝을 Classification Fine-tuning과 LoRA 중심으로 다룹니다.