You could have invented transformers from memory
기억의 관점에서 트랜스포머를 유도할 수 있습니다
선형층, MLP, self-attention을 키-값 기억 저장소로 해석하고, 기억을 불러올 때 생기는 간섭을 기준으로 저장 용량을 비교합니다. 키 차원이 64일 때 추정 용량은 단순 선형 저장소의 약 64개에서 제곱 ReLU MLP의 약 2,700개, self-attention의 약 120만 개로 늘어납니다.
- 주제
에디터 노트
이 글의 용량 수치는 트랜스포머 전체가 저장하는 사실의 개수가 아니라, 무작위 키와 값을 둔 한 층이 저장된 키를 질의할 때 간섭이 신호에 도달하는 지점입니다. 이 조건을 분명히 한 비교는 선형층에서 MLP, self-attention으로 구조가 달라지는 이유를 설명하는 데 설득력이 있습니다. 댓글에서는 수식보다 의사 코드와 실제 데이터 구조 예시가 이해를 돕는다는 의견이 나왔고, 다른 참여자들은 수학 표기 자체가 분석의 가치를 담는다고 반박했습니다. 두 반응은 설명 방식과 분석 내용의 필요성을 구분합니다. 실제로 글은 수식과 시각 자료를 중심으로 전개하며, 댓글에는 코드 링크도 언급됩니다. 다만 수백만이라는 수치를 모델의 실질적인 지식 저장량으로 읽으면 글이 세운 조건을 벗어납니다. 학습 데이터와 실제 표현을 반영하지 않은 분석이라는 한계가 끝부분에 명시되어 있습니다.
AI 요약
이 글은 트랜스포머의 층을 키-값 쌍을 저장하고 질의에 따라 값을 되찾는 연관 기억(associative memory)으로 설명합니다. 기억 저장소의 성능은 저장한 내용을 얼마나 정확히 회상하는지에 달렸습니다. 여러 키가 질의와 비슷해지면 목표 값에 다른 값들이 섞이므로, 글은 간섭 대 신호 비율(interference-to-signal ratio)을 용량의 기준으로 삼습니다. 이 추정은 무작위 키와 값으로 구성한 기억을 저장한 뒤, 저장된 키를 질의하는 상황을 다룹니다.
선형층의 기억 용량
가장 단순한 저장소는 각 키와 값의 외적(outer product)을 가중치 행렬에 더합니다. 질의 키와 저장 키의 유사도를 계산하고, 각 값에 유사도를 곱해 더해 회상합니다. 키 차원이 d_k이고 키가 무작위 단위 벡터라면, 다른 기억이 일으키는 간섭은 기억 개수 M에 따라 커집니다. 간섭이 목표 신호만큼 커지는 지점은 대략 M = d_k입니다. 따라서 d_k가 64일 때 단순 외적 저장소의 추정 용량은 약 64개입니다.
저장된 키 전체를 고려해 최소제곱 회귀로 가중치를 구하면 최적 선형 저장소를 만들 수 있습니다. 이 방식은 키 사이의 공분산을 보정합니다. 키 개수가 차원 이하이고 서로 선형 독립이면 모든 기억을 간섭 없이 회상합니다. 차원을 넘어서면 간섭이 생기지만, 추정 용량은 약 2d_k로 늘어납니다. d_k가 64일 때 약 128개입니다.
MLP는 유사도가 낮은 기억을 억제합니다
선형 저장소는 유사도가 낮은 키도 회상 결과에 기여합니다. 유사도에 비선형 함수 σ를 적용하면 낮은 유사도의 기여를 줄일 수 있습니다. 이 구조는 두 층 MLP와 같습니다. ReLU는 음수 유사도를 0으로 만들고, 제곱 ReLU는 0에 가까운 양수 유사도도 더 강하게 낮춥니다. 글은 유사도에 ReLU의 p제곱을 적용할 때 추정 용량이 대략 d_k의 p제곱에 비례한다고 설명합니다.
d_k가 64인 예에서 ReLU의 추정 용량은 약 128개입니다. 제곱 ReLU는 약 2,700개, 세제곱 ReLU는 약 35,000개입니다. 제곱 ReLU 기반 GLU MLP와 SwiGLU MLP의 추정 용량은 각각 약 2,700개와 2,900개로 제시합니다. 실제 트랜스포머의 MLP는 여러 사실을 같은 가중치에 겹쳐 저장하며, 입력마다 일부 은닉 유닛만 활성화할 수 있습니다. 글은 학습된 모델의 저장 내용을 이 단순한 무작위 벡터 분석만으로 설명할 수는 없다고 덧붙입니다.
Self-attention은 문맥에 기억을 저장합니다
유사도가 낮은 키를 더 강하게 억제하려고 유사도에 지수 함수를 적용하면 softmax로 이어집니다. 이것이 self-attention의 가중합입니다. MLP에서는 키와 값이 학습된 가중치에 저장되지만, self-attention에서는 문맥의 토큰마다 키와 값을 계산합니다. 따라서 기억 개수는 문맥 길이에 따라 늘어납니다.
키 차원 64에 해당하는 β = √d_k = 8을 사용하면, 글의 분석과 실험에서 용량은 약 120만 개로 추정됩니다. 이 수치는 무작위 단위 키와 값, 저장된 키를 질의하는 조건에 따른 결과입니다. 기억 개수가 늘어날수록 attention logit의 크기를 조정하는 방법도 소개합니다. Su의 방식과 Qwen의 LogN-Scaling은 기준 문맥 길이 이후 log M에 비례해 크기를 조정하며, Qwen2.5-1M의 YaRN 방식은 log M에 따라 더 빠르게 증가합니다. 글의 실험에서는 이 조정으로 200만 개까지 간섭 비율이 낮아집니다. 다만 매우 큰 logit 배율은 softmax를 포화시켜 다른 키로 흐르는 기울기를 줄일 수 있다고 설명합니다.
용량 추정의 범위
제시한 수치는 한 층이 무작위 벡터 기억을 회상할 때 간섭이 신호만큼 커지는 지점을 추정합니다. 학습 데이터나 모델이 실제로 표현하는 정보량을 직접 측정하지는 않습니다. 글은 별도의 연구에서 파라미터당 저장 비트를 추정한 결과도 언급하며, 단일 층의 무작위 키-값 저장 용량과 학습된 언어 모델의 지식 저장량을 구분합니다.
Hacker News 반응
- @craftkiller — 이 글은 두 가지 점 때문에 저에게 도움이 되지 않았습니다. 첫째, 수학 기호를 씁니다. 소프트웨어 개발자 사이트라면 복잡한 그리스 문자와 라틴 문자 대신 의사 코드로 쓰는 편이 훨씬 명확하지 않을까요? 둘째, 구체적인 예를 따라가며 설명하지 않습니다. 예를 들어 R^(M * d_v)는 숫자인가요, 집합인가요, 리스트인가요, 행렬인가요? 임베딩을 문자열을 입력받아 실수 리스트를 반환하는 함수로, RAG를 프롬프트의 실수 리스트와 가까운 데이터의 실수 리스트를 찾는 방식으로 배웠을 때 이해가 쉬워졌습니다. 실제 데이터 구조를 보여주며 기억을 저장하고 질의하는 간단한 예를 들면 이 글도 더 명확해질 겁니다.
- @saghm — 뻔한 말을 하는 셈일 수도 있지만, 여기는 사람들이 임의의 사이트에 있는 글을 올리는 포럼입니다. 그 사이트가 Hacker News를 읽는 정확한 사람들만을 대상으로 한다고 볼 근거는 없습니다. alexwang.ai가 소프트웨어 개발자만을 대상으로 한다고 설득력 있게 주장하기는 어려울 것 같습니다.
- @Nevermark — 이해하지 못하는 게 문제는 아닙니다. 글의 질도 문제가 아닙니다. 여기서는 콘텐츠가 도전적으로 느껴질 수 있습니다. 수학적인 분석을 하면서 수학을 빼 달라는 요청은 수학의 가치를 근본적으로 오해한 것입니다.
- @mrandish — 간섭 대 신호 비율을 기억 용량을 생각하는 직관적인 방식으로 소개한 부분이 흥미로웠습니다. 모델이 용량을 어떻게 늘리는지 더 알고 싶었지만 첫 번째 수식에서 이해가 끊겼습니다. 도입부의 친근한 어조 때문에 수학 기호 없이도 폭넓게 읽을 수 있는 글이라고 예상했습니다. 수학을 다루는 사람이 수학 기호로 설명하는 데는 문제가 없습니다. 다만 이런 글이라면 먼저 기호 없이 핵심 아이디어를 설명하고, 필요한 세부 내용을 풀 때 수식을 더하면 좋겠습니다.
- @dullcrisp — 이 글이 기억과 LLM을 연결하는 대목에서 이해가 막혔습니다. LLM에서 키는 문맥의 토큰이라고 할 때 값은 정확히 무엇인가요?
- @wilkystyle — Attention 층에서는 질의, 키, 값을 모두 추론 시점에 계산합니다. 각 토큰 표현 X에 학습으로 정해진 질의, 키, 값 가중치 행렬을 곱해 Q, K, V를 구합니다. K와 V는 Python 사전의 키와 값처럼 볼 수 있고 Q는 조회 키입니다. 실제 사전과 달리 내적 유사도로 각 키를 비교하고, 값 하나가 아니라 값들의 가중합을 반환합니다.
- @kooi — 좋은 글이라고 생각합니다. 수학이 접근하기 어렵다고 불평하는 사람들이 있네요. 이 정도 수학은 접근하기 쉬운 편이고 설명도 잘합니다. 더 높은 차원의 의미 공간에 대한 직관을 만들려면 선형대수에서 시작하는 게 맞다고 생각합니다.
- @kccqzy — 작성자가 블로그 글에 사용한 실제 코드 링크를 달아 두었습니다.
- @ketothekingdom — 작성자입니다. 도움이 된다면 짧은 요약도 여기서 볼 수 있습니다.
- @rd11235 — 한동안 본 블로그 글 중 가장 잘 쓰인 글입니다. 감사합니다.
- @ketothekingdom — 감사합니다. 오랫동안 머릿속에 있던 내용이었습니다. 마침내 공유하게 되어 기쁩니다.
- @femto — 간섭 대 신호 비율이나 용량 같은 용어는 통신·전기공학자에게 익숙합니다. 통신 엔지니어가 AI 내부 작동을 배우기 시작하면 좋겠습니다. 채널 용량과 처리량을 높이는 지식이 AI에도 적용될 가능성이 있습니다. AI를 기억이 있는 채널로 볼 수도 있습니다.
원문: Alex Wang / 번역·요약: Trawling