Google Titans: 테스트 타임에 기억하는 법을 배우는 Neural Long-Term Memory 아키텍처
Google Titans architecture, helping AI have long-term memory
TL;DR Highlight
Google의 새 아키텍처는 attention을 놀라운 정보만 기억하는 신경망 메모리 모듈로 대체해 Transformer의 quadratic 복잡도 없이 200만 토큰 컨텍스트를 처리한다.
Who Should Read
긴 문서 처리나 대화 히스토리 관리에서 컨텍스트 한계를 느끼는 LLM 애플리케이션 개발자. Transformer 대체 아키텍처(Mamba, RWKV 등)를 검토 중인 ML 엔지니어.
Core Mechanics
- Attention(단기 기억) + Neural Long-Term Memory(장기 기억) + Persistent Memory(영구 지식) 세 가지 메모리를 조합한 새 아키텍처 Titans 제안
- 장기 메모리 모듈은 별도의 작은 신경망으로 구현 — 추론 중에도 파라미터가 업데이트되는 'test-time training' 방식
- 'Surprise(놀라움)' 지표로 뭘 기억할지 결정 — 예측 오차(gradient norm)가 클수록 중요한 정보로 간주해 더 강하게 기억
- 세 가지 아키텍처 변형 제공: 메모리를 컨텍스트로 주입하는 MAC, 게이팅으로 혼합하는 MAG, 레이어로 삽입하는 MAL
- 시퀀스 길이가 늘어도 선형 복잡도 유지 — 2M 토큰 처리 가능, Transformer의 quadratic 복잡도 문제 해결
- Recency Bias 없이 오래된 정보도 유지 — 기존 선형 RNN(Mamba 등)이 최근 토큰에 편향되는 문제를 Forgetting Gate로 보완
Evidence
- BABILong 벤치마크(초장문 추론)에서 Transformer, Mamba-2, TTT 등 기존 모델 대비 일관적으로 성능 우위
- 2M 토큰 컨텍스트에서도 선형 시간복잡도 유지 — Transformer 대비 메모리 사용량 대폭 절감
- MQAR(Multi-Query Associative Recall) 태스크에서 시퀀스 길이 4K~16K 구간 모두에서 Mamba-2, GLA보다 높은 정확도
- 언어 모델링(Wikitext-103, SlimPajama) 및 시계열, DNA 시퀀스 등 다양한 도메인에서 경쟁력 있는 perplexity 달성
How to Apply
- 긴 대화 히스토리를 처리하는 챗봇을 만들 때: Titans 기반 모델이 공개되면 KV Cache 크기 제한 없이 전체 대화를 메모리에 유지할 수 있어 RAG 없이도 긴 세션 처리 가능
- 문서 분석 파이프라인에서 청킹 전략을 쓰고 있다면: Titans 계열 모델은 2M 토큰을 한 번에 처리하므로 청크 분할 로직을 단순화하거나 제거하는 방향으로 아키텍처 재검토 가능
- 자체 모델을 학습하거나 파인튜닝하는 경우: MAC/MAG/MAL 변형 중 사용 케이스에 맞게 선택 — 검색/QA는 MAC(명시적 컨텍스트 주입), 생성 품질 중심은 MAG(게이트 혼합) 권장
Code Example
# Titans 아키텍처의 Surprise 기반 메모리 업데이트 핵심 로직 (개념 코드)
import torch
import torch.nn as nn
class NeuralMemory(nn.Module):
def __init__(self, dim, memory_lr=0.01):
super().__init__()
# 장기 메모리 = 작은 MLP (key-value 연상 기억)
self.memory_mlp = nn.Sequential(
nn.Linear(dim, dim * 2),
nn.SiLU(),
nn.Linear(dim * 2, dim)
)
self.memory_lr = memory_lr # 메모리 업데이트 속도
def compute_surprise(self, query, target):
"""Surprise = 예측 오차의 크기 (gradient norm)"""
pred = self.memory_mlp(query)
loss = nn.functional.mse_loss(pred, target)
grad = torch.autograd.grad(loss, self.memory_mlp.parameters())
surprise = sum(g.norm() for g in grad) # 놀라울수록 강하게 기억
return surprise, loss
def update_memory(self, key, value, forget_gate):
"""놀라운 정보를 메모리에 기록 (test-time update)"""
surprise, loss = self.compute_surprise(key, value)
# Forgetting Gate: 오래된 기억 decay + 새 정보 기록
effective_lr = self.memory_lr * surprise.item() * forget_gate
for param in self.memory_mlp.parameters():
if param.grad is not None:
param.data -= effective_lr * param.grad
def recall(self, query):
"""쿼리로 장기 메모리에서 정보 검색"""
return self.memory_mlp(query)
# MAC (Memory as Context) 변형 사용 예시
# memory_output = neural_memory.recall(current_query)
# context = torch.cat([memory_output, short_term_kv_cache], dim=1)
# output = attention(query, context) # 장기 + 단기 메모리 통합Terminology
관련 논문
Swift로 LLM 학습시키기 Part 1: 행렬 곱셈을 Gflop/s에서 Tflop/s로 끌어올리기
Apple Silicon에서 Swift로 직접 행렬 곱셈 커널을 구현하며 CPU, SIMD, AMX, GPU(Metal)를 단계별로 최적화해 Gflop/s에서 Tflop/s 수준까지 성능을 높이는 과정을 상세히 설명한 글이다. 프레임워크 없이 LLM 학습의 핵심 연산을 밑바닥부터 구현하고 싶은 개발자에게 Apple Silicon의 성능 한계를 체감할 수 있는 드문 자료다.
fsync 없이 로컬 스토리지 엔진을 crash-consistent하게 만든 방법
FractalBits가 fsync 없이 SSD 전용 KV 스토리지 엔진을 구현해 동일 조건 대비 약 65% 높은 쓰기 성능을 달성한 설계 방법을 공유했다. fsync의 메타데이터 오버헤드를 피하기 위해 사전 할당, O_DIRECT, SSD 원자 쓰기 단위 정렬 저널을 조합한 구조가 핵심이다.
Google Chrome, 사용자 동의 없이 4GB AI 모델(Gemini Nano)을 몰래 설치
Google Chrome이 사용자 동의 없이 Gemini Nano 4GB 모델 파일을 자동 다운로드하고, 삭제해도 재다운로드되는 문제가 발견됐다. GDPR 위반 가능성과 수십억 대 기기에 적용될 때의 환경 비용 문제가 제기되고 있다.
OpenAI가 대규모 저지연 Voice AI를 제공하는 방법
OpenAI가 9억 명 이상의 사용자에게 실시간 음성 AI를 제공하기 위해 WebRTC 스택을 어떻게 재설계했는지 설명하는 글로, relay + transceiver 분리 아키텍처의 설계 결정과 trade-off를 상세히 다룬다.
Truncated Decoding Tree의 결정론적 탐색을 통한 효율적인 Test-Time Inference
Self-consistency의 중복 샘플링 낭비를 없애는 결정론적 트리 탐색 디코딩 기법 DLE로 수학/코드 추론 성능과 속도를 동시에 개선
GoModel – Go로 작성된 오픈소스 AI Gateway
OpenAI, Anthropic, Gemini 등 여러 AI 프로바이더를 하나의 OpenAI 호환 API로 묶어주는 Go 기반 오픈소스 AI 게이트웨이로, LiteLLM의 컴파일 언어 대안이다.