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
관련 논문
Claude Code는 프롬프트 읽기 전에 33k 토큰을 전송한다; OpenCode는 7k
동일한 모델과 작업 환경에서 Claude Code와 OpenCode의 실제 토큰 사용량을 API 레벨에서 측정한 결과, Claude Code가 시스템 프롬프트 오버헤드만으로 OpenCode 대비 4.7배 더 많은 토큰을 소비한다는 것을 확인했다.
Mesh LLM: iroh 기반 분산 AI 컴퓨팅
사무실, 집, 클라우드에 흩어진 GPU들을 하나의 OpenAI 호환 API로 묶어주는 분산 LLM 실행 시스템으로, 비싼 API 비용 없이 큰 모델을 직접 운영할 수 있다.
Frugon – LLM API 호출 로그를 분석해서 더 싼 모델로 대체 가능한 구간을 찾아주는 로컬 도구
내 LLM API 비용이 어디서 새는지 로컬에서 분석해주는 오픈소스 CLI 도구로, 비싼 모델 대신 저렴한 모델로 전환 가능한 호출을 골라낸다.
로컬에서 SOTA LLM 실행하기 완전 가이드 (하드웨어부터 설정까지)
2천 달러짜리 RTX 3090 한 장부터 4만 달러짜리 RTX PRO 6000 4장 셋업까지, 로컬에서 최신 LLM을 직접 돌리는 방법을 하드웨어 선택·구성·실행 설정까지 통째로 정리한 실전 가이드다.
Manticore Search에서 ONNX 경로를 재설계해 임베딩 속도를 14배 높인 방법
Manticore Search가 기존 SentenceTransformers/Candle 백엔드를 ONNX Runtime으로 교체해 텍스트 임베딩 생성 속도를 평균 14배 향상시켰다. 별도 모델 서비스 없이 DB 내부에서 직접 임베딩을 처리하는 구조에서 INSERT 속도가 곧 임베딩 속도이기 때문에 이 개선은 실질적인 ingest 처리량 향상으로 직결된다.
Asymmetric Quantization: 97% 스토리지 절감으로 Late Interaction 검색 품질 유지하기
멀티벡터 검색 모델의 문서 벡터를 1비트 이진값으로 압축하고 쿼리 벡터만 int8로 유지하는 비대칭 양자화 기법으로, 스토리지를 97% 줄이면서 검색 품질 손실을 0.61점(NDCG@10 기준)에 그치게 만든 실제 프로덕션 적용 사례다.