3줄 요약

  1. waterloo_intern이 2026년 7월 27일 X에 올린 워크로그. GPT-2(2019)부터 Kimi K3(2026)까지 언어모델 아키텍처의 진화를, 도식과 코드 구현 수준까지 파고들어 추적한다.
  2. 핵심 주장은 하나다. 7년 동안 파라미터가 22,580배 커졌지만 변화의 본질은 스케일이 아니다. 각 단계는 고정 크기 상태(state)가 정보를 저장하고, 갱신하고, 검색하는 방식의 구체적 한계를 하나씩 해결한다.
  3. 결론: 고정 용량의 연상 메모리는 결국 퇴출 정책(eviction policy)이 필요하다. 게이팅·라우팅·감쇠 같은 학습된 선택 기제가 그 답이며, 어텐션은 가장 효과적인 선택적 읽기 장치다.

어텐션에서 LLM으로 이어지는 계보 타임라인. softmax attention(2017) → linear attention(2019) → flash attention(2020) → KDA(2025) → Kimi-3(2026), 그리고 그 아래로 GPT-2·FWP/DeltaNet·Gated DeltaNet·Attention Residuals가 연도별로 놓인다.

출발점: 22,580배

2만 2천 580. GPT-2(2019) 모델 몇 개가 Kimi K3(2026) 하나에 들어가는지를 나타내는 숫자다. 7년 만에 규모가 22,580배 커졌다. 단, 이 숫자는 총 파라미터 수의 단순 비교다. Kimi K3는 매 토큰마다 일부 전문가만 사용하는 MoE 모델이므로, 실제 계산량이 GPT-2의 22,580배라는 뜻은 아니다. 저자가 던지는 질문은 이것이다. 그저… 스케일일 뿐인가?

이 글은 그 답을 아키텍처 계보를 따라 되짚는다. GPT-2에서 Kimi K3에 이르는 주요 구조 변화를 순서대로 추적하면서, 무엇이 실제로 달라졌고 무엇이 그대로인지를 가른다.

GPT-2 — 기준선

GPT-2는 디코더 전용(decoder-only) 아키텍처다. 입력은 토큰 임베딩과 위치 임베딩을 받고, 트랜스포머 블록을 여러 번 통과한 뒤, 언어모델 헤드가 최종 은닉 상태를 어휘 로짓으로 변환한다. 자기회귀 디코딩에서는 다음 토큰을 고를 때 마지막 위치의 로짓만 필요하다.

GPT-2 블록 구조. 왼쪽은 Layernorm → Multi-Head Self Attention → Layernorm → MLP를 12번 반복하는 전체 스택, 오른쪽은 헤드 하나의 Q/K/V 프로젝션과 self attention 세부다.

여기에 디코더 전용 생성의 비효율이 있다. 모델은 모든 입력 위치의 표현을 계산하지만, 각 디코딩 단계는 마지막 위치의 로짓 하나만 소비한다. 캐싱이 없으면 다음 토큰을 위해 그 작업의 상당 부분을 반복하게 된다.

KV 캐시는 단순한 관찰에서 나온다. 생성된 토큰을 입력에 이어 붙이면 모델은 이전 토큰 전부의 프로젝션을 다시 계산해야 한다. 키와 값 벡터를 저장해 두면 그 중복 작업을 피할 수 있다. 그 저장소가 KV 캐시다. 이전 N-1개 토큰의 벡터를 담고 있으며, 커지면 메모리 대역폭 병목을 만들 만큼 부풀 수 있다.

KV 캐시가 있을 때의 데이터 흐름. Q·K·V 프로젝션의 키와 값 벡터를 HBM 메모리에 K·V 캐시로 쌓아 두고, 새 토큰은 그 캐시를 재사용한다.

기준선 모델의 제원은 대략 이렇다. 가능한 토큰 약 5만 개, 블록 12개, 헤드 12개, 임베딩 차원 768. 파라미터는 약 1억 2,400만 개다. 파라미터 2.8조 개인 Kimi K3 하나는 GPT-2 약 22,580개에 해당한다.

Linear Attention — 2차 비용을 선형으로

소프트맥스 어텐션은 q·k 곱 이후에 비선형성을 적용해, 모든 쿼리를 모든 키에 결합한다. 선형 어텐션은 대신 ELU+1 같은 특성 맵(feature map)을 q와 k에 따로 적용한다. 그러면 곱을 재결합할 수 있어, 늘어나는 K·V 벡터 집합을 고정된 D×D 상태로 접어 넣을 수 있다.

저자는 논문의 O(N²) 서술이 자신을 헷갈리게 했다고 적는다. “트랜스포머의 시간 단계당 비용이 현재 시퀀스 길이의 제곱으로 커진다"는 말은 사실이 아니며, 그것이야말로 FlashAttention이 고치는 문제다. 그런데 FlashAttention은 2020년에야 나왔다. 이 논문이 나온 시점에는 학습에서 흔히 N×N 전체 어텐션 행렬을 물리적으로 만들어 냈고, FlashAttention도 없었으며, 참조 구현들은 KV 캐시 없이 토큰 이력을 다시 계산하곤 했다.

트레이드오프가 있다. 소프트맥스가 쓰는 지수 함수를 ELU+1로 바꾸되, q와 k가 상호작용하기 전에 따로 적용한다. 두 방식 모두 점수를 정규화하지만, 선형 어텐션의 특성 맵은 소프트맥스 커널을 표현력이 덜한 방식으로 근사한다. 그 근사는 정확도를 떨어뜨릴 수 있고, 실제 손실 폭은 아키텍처와 작업량에 달렸다.

높은 수준에서 어텐션은 세 단계로 이루어진다.

  1. qk 점수를 음이 아니게 만든다. 선형 어텐션은 ELU+1을, 소프트맥스는 지수화를 쓴다.
  2. 합으로 나눈다.
  3. 값들의 가중 평균을 구한다.

DeltaNet — 유한한 캐시의 덮어쓰기

유한한 캐시는 이미 저장된 정보를 덮어쓰거나 그것과 결합해야 한다. i-1번째 토큰의 상태는 자기만의 슬롯을 받지 못하고, 같은 D×D 행렬에 더해진다. 그래서 새 쿼리는 각 이전 토큰의 완벽히 분리된 표현을 더는 꺼낼 수 없다.

그 덧셈이 효율의 원천이기도 하다. 이어 붙이는 대신 더하는 방식으로 캐시를 갱신하면 O(N)으로 커지는 것을 막지만, 같은 연산이 정보 간섭을 부른다. DeltaNet은 이 회복 불가능성을 다룬다.

Schlag의 논문(Fast Weight Programmers)은 이를 우아하게 설명한다.

시퀀스 길이가 저장 용량을 넘어서면 모델은 초과 용량 상태에 놓일 수 있다. 이런 상태에서 제대로 작동하려면, 모델은 메모리 내용과 동적으로 상호작용하며 어떤 키-값 연관을 유지하고 어떤 것을 지울지 선택적으로 결정할 줄 알아야 한다. 순수한 덧셈식 명령은 이 목적에 부적절할 수 있다. 유한한 크기의 메모리에 새 연관을 끝없이 더하다 보면 결국 한계에 도달할 수밖에 없다.

선형 어텐션을 매력적으로 만드는 바로 그 상황, 즉 N이 D보다 훨씬 큰 상황이 그 한계도 드러낸다. 상태가 유효 용량을 넘어서는 순간, 갱신이 덧셈식이고 캐시에서 빠져나가는 것이 없으므로 연관들이 간섭하기 시작한다.

DeltaNet의 갱신 규칙은 이렇게 작동한다. 현재 키가 캐시에서 어떤 정보를 꺼내는지 먼저 묻는다. 저장하려는 값에서 그 기존 정보를 빼고, 키에 그 차이를 곱한 뒤, 결과를 다시 더한다. 옛 정보는 제거되고 새 정보가 그 자리에 쓰인다.

MHA 트랜스포머(GPT-2)와 DeltaNet 트랜스포머의 블록 구조 비교. 오른쪽 DeltaNet은 self attention 자리에 Delta 규칙 기반의 순환 상태 갱신을 둔다.

DeltaNet 병렬화 — 청크 단위 학습

저자가 글에서 가장 어려운 대목으로 꼽는 부분이다. 제대로 이해하는 데 약 7시간이 걸렸다고 적는다. 요지는 이렇다. DeltaNet은 원래 순차적으로 도는 순환 갱신을, 하드웨어 효율적인 선형 시간 학습이 가능하도록 청크 단위 병렬 순전파로 다시 짠 것이다. 정확히는, 일반화된 하우스홀더(Householder) 전이 행렬을 쓰는 1차 선형 순환으로 구현된다.

실무의 문제는 프리필(prefill)이다. Delta 규칙을 T개 토큰에 순진하게 구현하면 순차적으로 돌 수밖에 없다. 청크 방식이 더 효율적인 해법을 준다. 입력과 출력을 크기 C의 여러 청크로 나누고, 각 청크의 출력을 이전 청크의 최종 상태와 현재 청크의 QKV 블록으로 계산한다.

청크 방식의 직관. 블록 안에서는 일반 어텐션(masked QKᵀV)을 그대로 계산하고, 블록 사이에서는 모든 것을 상태로 접어 넣어 한 번의 행렬 곱으로 읽어 온다. 선형 어텐션과 일반 어텐션이 청크 크기 C로 이어진다.

여기서 C의 의미가 흥미롭다. C=N으로 두면 표준 O(N²) 어텐션이 복원되고, C=1이면 일반 선형 어텐션이 된다. 그 사이 값들은 청크 내 추가 작업과 더 나은 하드웨어 활용을 맞바꾼다. 실무에서 C는 흔히 64나 128이다. 텐서 코어 명령이 그 단위에서 효율적으로 작동하기 때문이다.

청크를 작게 잡을수록 계산량(FLOP)은 줄어든다. 다만 순수 FLOP이 가장 적은 C=1이 벽시계 시간까지 가장 빠른 것은 아니다 — GPU는 작업이 큰 행렬 곱에 잘 맞을 때 더 많은 연산을 더 빨리 끝내기 때문이다. 비용은 두 조각으로 갈린다. C에 좌우되지 않는 고정 항 $2Ld^2$(상태 작업)와, 대각선의 점수 행렬인 증가 항 $2LCd$다. 전체 어텐션은 C가 L과 같아지는 경우로, 이때 둘째 항이 $2L^2d$가 되어 2차로 커진다. 다만 Delta 갱신은 앞선 상태를 모두 알아야 빼낼 정보를 구할 수 있어 덧셈식 청크 방법을 그대로 쓸 수 없는데, 저자들은 갱신식을 재매개변수화해 이 문제를 우회한다. 재매개변수화(reparameterize) 덕분에 청크 코드가 C개의 델타를 한 번에 계산할 수 있다.

Gated DeltaNet — 망각을 더하다

이제 캐시를 정밀하게 고치는 방법이 생겼다. 새 사실(새 키 벡터)마다 그 지점에 저장된 옛 정보를 정확히 보고 새 정보로 교체할 수 있다. 그러나 이 기제는 대체할 구체적 정보가 있는 연관만 잊을 수 있다. 맥락이 전환될 때 여러 연관을 한꺼번에 지우거나, 용량을 확보하려 메모리를 전반적으로 감쇠시키지는 못한다.

Mamba-2의 기여가 여기 들어온다. 이전 캐시를 감쇠시킨 뒤 새 캐시를 온전한 세기로 더해, 상태가 무한정 커지는 것을 막는다. 다만 매 시간 단계에서 모든 키-값 연관을 동적 비율로 균일하게 감쇠시키면, 서로 다른 연관의 중요도 차이를 반영하지 못한다. 특정 연관 하나만 잊어야 할 때도 전부가 똑같이 잊힌다. 반대로 Delta 규칙은 사실 하나를 갱신할 수 있지만, 나머지를 감쇠시킬 방법이 없다.

그래서 Gated Delta 규칙은 Mamba의 게이트 갱신 규칙과 Delta 규칙을 결합한다. 매개변수 alpha를 더해, 1로 두면 순수 Delta 규칙으로, 0으로 두면 메모리를 비우는 쪽으로 전환한다. 수학은 앞서의 DeltaNet 재매개변수화와 거의 같고, 이전 상태의 감쇠를 제어하는 0과 1 사이의 데이터 의존 스칼라 하나가 더해진다.

Gated DeltaNet 트랜스포머 블록. Gated DeltaNet 안에서 Q/K/V 프로젝션과 함께 Alpha·Beta 프로젝션이 추가되어, Delta 규칙에 게이트 기반 감쇠가 결합된다.

Kimi Linear (KDA) — 채널별 세밀한 게이팅

여기서 연구자들은 여러 어텐션 형태를 한 아키텍처 안에 섞는 하이브리드 모델을 실험하기 시작한다. Kimi Linear가 주목받은 핵심 주장은 하나였다. 통제된 비교에서 전체 어텐션(full attention)을 능가했다는 것이다. 저자들은 이를 품질이 더 좋고 디코드 처리량이 최대 6배 높은, 드롭인 방식의 아키텍처 대체재로 내세웠다.

Kimi Linear가 Gated DeltaNet을 개선한 지점은 세밀한 게이팅(fine-grained gating)이다. 단일 스칼라 감쇠 대신, 채널마다 별도의 감쇠 값을 학습한다. 이 채널별 스케일이 메모리 감쇠에 대한 더 미세한 제어를 준다는 것이 이 논문의 가장 큰 기여다.

세 논문의 상태 갱신 규칙 진화. Parallelizing Linear Transformers(2025)의 순수 덧셈식 갱신 → Gated Delta Networks(2025)가 스칼라 감쇠 항 α를 더함 → Kimi Linear(2025)가 그 α를 채널별 대각 행렬 Diag(α)로 확장한다.

DeltaNet 트랜스포머와 나란히 놓으면 Kimi Linear는 세 가지를 바꾼다.

  1. Multi-head Latent Attention(MLA) 레이어를 사이사이 끼워 넣는 하이브리드 구조를 쓴다.
  2. MLP를 Mixture-of-Experts(MoE) 레이어로 교체한다.
  3. alpha 프로젝션으로 DeltaNet에 용량을 더한다.

중요한 것은 이것이 맹목적 스케일링이 아니라는 점이다. 추가 용량은 구체적인 수학적 목적을 갖는다. 각 아키텍처 단계는 앞 시스템의 뚜렷한 한계를 겨냥해, 그것을 쓸 수 있는 형태로, 올바른 자리에 용량을 더한다.

Kimi K3 — 하이브리드의 완성

최종적으로 Kimi K3의 언어 백본은 위 Kimi Linear와 닮았다. 4개 레이어짜리 매크로사이클 23개로 이루어진다. 각 매크로사이클에서 세 레이어는 Kimi Delta Attention(KDA)을, 네 번째는 MLA를 쓴다. 첫 레이어는 조밀(dense) 피드포워드 네트워크를, 나머지 모든 레이어는 잠재 공간 MoE를 쓴다.

Kimi Linear(왼쪽)와 Kimi K3(가운데·오른쪽)의 전체 아키텍처. K3는 KDA 세 레이어 + MLA 한 레이어로 된 매크로사이클을 23번 쌓고, Gated MLA·잠재 MoE·AttnRes를 더한다.

Kimi Linear에서 달라진 점은 언뜻 소소해 보인다.

  • 상당한 규모 증가
  • 12레이어마다 적용되는 블록 단위 AttnRes
  • MLA 쿼리 LoRA와 출력 게이팅
  • 잠재 공간 MoE
  • SiTU 활성화
  • Gated MLA

KDA가 상수 크기의 순환 메모리를 공급하는 동안, 주기적으로 배치된 MLA 레이어가 맥락 전체에 대한 완전한 소프트맥스 검색을 유지한다.

Gated MLA는 MLA에서 나온 각 특성이 잔차 스트림으로 얼마나 통과할지를, 입력에서 프로젝션한 게이트와의 원소별 곱으로 결정한다.

잠재 공간 MoE: 통상의 MoE에서는 학습된 라우터가 내적 유사도로 각 토큰을 전문가 부분집합에 보낸다. Kimi K3에는 전문가가 총 898개 있다. 둘은 공유 전문가로 모든 토큰을 처리하고, 나머지 896개 중 라우터가 토큰마다 16개를 고른다. 전문가는 압축된 잠재 공간에서 작동해 순전파가 훨씬 빠르고 FLOP을 거의 절반으로 줄인다.

SiTU 활성화: 전문가 내부의 활성화를 기존 SiLU 기반에서 SiTU로 교체했다. 기존에는 up 프로젝션에 SiLU를 적용해 게이트와 원소별로 곱한 뒤 down 프로젝션을 적용했다. 융합 커널이 없으면 새 활성화가 이 경로보다 거의 3배 느린데, 이는 추론의 반복되는 난제를 보여 준다.

AttnRes — 깊이 방향 선택적 접근

이 절은 @chloey3k의 도움을 받았다고 저자가 밝힌다. 기존 잔차 연결은 앞선 레이어들의 결과를 하나의 통에 계속 더한다. 원본 임베딩과 앞선 모든 레이어의 출력이 전부 똑같은 가중치로 합쳐지는 것이다. 식으로는 $h_l = h_1 + \sum_{i=1}^{l-1} f_i(h_i)$. 여기서 $h_i$는 레이어 i의 입력, $h_1$은 현재 토큰의 임베딩, $f_i(h_i)$는 레이어 i(어텐션 또는 MLP 블록)의 출력이다.

문제는 선택적 접근의 부재다. 서로 다른 종류의 레이어가 같은 집계 상태를 받는데, 실제로는 서로 다른 가중치가 이로울 수 있다. 순환이 순수 덧셈식이라, 뒤쪽 레이어는 누적된 잔차에 영향을 주려고 점점 더 큰 출력을 학습해야 하고, 이는 학습을 불안정하게 만든다. AttnRes는 그 통만 받는 대신, 현재 계산에 필요한 과거 레이어의 결과를 골라 읽는다. 합의 각 항에 특화된 가중치를 곱해, 맥락에서 가장 유용한 레이어에 더 큰 비중을 주는 것이다. 식으로는 $h_l = \alpha_0 h_1 + \sum_{i=1}^{l-1} \alpha_i f_i(h_i)$. 각 가중치 $\alpha_i$는 레이어마다 학습된 쿼리와 앞선 잔차 스트림 상태(키·값)의 내적으로 계산되며, 합이 1이 되도록 정규화된다. 덕분에 모델은 바로 앞 레이어에만 의존하지 않고, 현재 계산에 가장 유용한 표현을 학습된 쿼리로 꺼낼 수 있다.

레이어마다 잔차 어텐션을 적용하면 학습·추론 비용이 너무 커진다. 그래서 고정된 블록 경계에서만 적용해 대부분의 이점을 더 낮은 비용으로 얻는다. Kimi K3에서 경계는 12개 디코더 레이어마다 온다. 4레이어 매크로사이클 23개에 걸쳐 8개의 AttnRes 블록이 생긴다. AttnRes는 추론 지연을 약 2% 더하지만, 잔차 희석과 은닉 상태 팽창을 완화하는 선택적 검색과 1.25배의 연산 이점을 준다.

Kimi K3의 잔차 연결(왼쪽)과 AttnRes(오른쪽) 비교. 오른쪽은 각 레이어가 앞선 잔차 스트림 상태들을 학습된 쿼리로 선택적으로 끌어와 가중 결합한다.

AttnRes와 MLA는 같은 한계를 서로 다른 방향에서 다룬다. KDA 레이어는 상수 크기 상태로 작동해 정보를 버릴 수밖에 없다. MLA는 토큰 맥락에서 검색하고, AttnRes는 앞선 깊이 방향 표현에서 검색한다.

가장 눈여겨본 것은

내가 곱씹은 대목은 저자가 글을 닫으며 남긴 한 문장이다. 핵심 변화는 스케일만이 아니다. 각 아키텍처 단계는 모델이 무엇을 저장하는지, 그 상태를 어떻게 갱신하는지, 고정 크기 상태가 보존할 수 없는 정보를 어떻게 검색하는지를 바꾼다.

Kimi K3는 상수 크기의 순환 메모리, 주기적 소프트맥스 검색, 희소 전문가 용량, 선택적 깊이 방향 잔차 접근을 결합한다. 결과는 추가 용량을 구체적인 기능적 역할이 있는 곳에만 쓰는 시스템이다.

본질을 저자는 이렇게 정리한다. 고정 용량의 연상 메모리는 퇴출 정책이 필요하다. 순수한 덧셈식 선형 연산은 용량이 차면 결국 간섭을 더하기 때문이다. 그래서 게이팅·라우팅·감쇠 같은 학습된 선택이 필요하고, 어텐션은 그중 가장 효과적인 선택적 읽기 기제다. 7년간의 22,580배 성장을 스케일 서사가 아니라 메모리 관리의 서사로 다시 읽게 만드는 결론이다.

출처

waterloo_intern, “22580: From GPT2 to Kimi3, Explained”, X(2026년 7월 27일). 원문: https://x.com/waterloo_intern/status/2081762065392541951

이 다이제스트는 원문 X Article의 본문 텍스트와 인라인 도식을 함께 옮겨 정리했다. 원문에는 여기 싣지 않은 도식과 PyTorch 구현 코드가 절마다 더 실려 있으니, 자세한 구현이 궁금하면 원문을 함께 참고하기를 권한다.