Memory Caching: RNNs with Growing Memory
Paper

Memory Caching: RNNs with Growing Memory

Meisam Razaviyayn
2026.06.08
·Arxiv·by Homin.Lee
#Attention#Deep Learning#Memory Caching#RNN#Sequence Modeling

핵심 포인트

  • 1RNN의 고정 메모리 한계를 해결하기 위해, 이 논문은 시퀀스 길이에 따라 RNN의 유효 메모리 용량을 확장하는 Memory Caching (MC) 기술을 소개합니다.
  • 2MC는 시퀀스를 세그먼트(segment)로 분할하여 메모리 상태(hidden states) 체크포인트를 캐싱하고, (Gated) Residual Memory, Memory Soup, Sparse Selective Caching (SSC)과 같은 새로운 전략으로 이를 활용합니다.
  • 3실험 결과, MC는 언어 모델링 및 긴 컨텍스트 이해 태스크에서 RNN 성능을 향상시키며, O(L)과 O(L^2) 복잡도 사이의 유연한 절충을 제공하여 Transformer와의 성능 격차를 좁힘을 보여줍니다.

이 논문은 트랜스포머 (Transformers)의 주요 강점인 증가하는 메모리 용량 (growing memory capacity)이 야기하는 이차적인 복잡성 (O(L2)O(L^2) complexity)과, 반대로 순환 신경망 (RNNs)이 갖는 고정된 크기의 메모리 (fixed-size memory)로 인해 발생하는 장문맥에서의 성능 한계를 다룹니다. 특히, RNNs는 '잊기' 때문에 recall-intensive tasks에서 트랜스포머에 비해 불리한데, 이 문제를 해결하기 위해 메모리 캐싱 (Memory Caching, MC)이라는 간단하지만 효과적인 기술을 제안합니다. MC는 RNN의 메모리 상태 (memory states), 즉 은닉 상태 (hidden states)의 체크포인트 (checkpoints)를 캐싱함으로써 RNN의 유효 메모리 용량을 시퀀스 길이 (sequence length)에 따라 증가시킵니다. 이는 RNN의 O(L)O(L) 복잡성과 트랜스포머의 O(L2)O(L^2) 복잡성 사이에서 유연한 trade-off를 제공합니다.

제안된 MC 프레임워크는 입력 시퀀스를 세그먼트 (segments) S(1),…,S(N)S^{(1)}, \dots, S^{(N)}로 분할하고, 각 세그먼트의 압축된 메모리 상태 ML(s)(s)M^{(s)}_{L^{(s)}}를 캐싱합니다. 모델은 현재 토큰 (token)에 대한 온라인 메모리 (online memory) Mt(s)(⋅)M_t^{(s)}(\cdot)뿐만 아니라 과거의 캐싱된 메모리들 ML(i)(i)(⋅)M^{(i)}_{L^{(i)}}(\cdot)까지 활용하여 출력을 계산합니다. 이를 위해, 임의의 aggregation function Agg(⋅;⋅;⋅)\text{Agg}(\cdot; \cdot; \cdot)을 사용하여 다음과 같이 출력을 계산합니다:
yt=Agg({ML(1)(1)(⋅),…,ML(s−1)(s−1)(⋅)};Mt(s)(⋅);qt)y_t = \text{Agg}\left(\{M^{(1)}_{L^{(1)}}(\cdot), \dots, M^{(s-1)}_{L^{(s-1)}}(\cdot)\}; M^{(s)}_t(\cdot); q_t\right)
여기서 qtq_t는 현재 쿼리 (query)를 나타냅니다. 메모리 업데이트 과정은 기존 RNN과 동일하게 Mt(s)=f(Mt−1(s);kt,vt)M_t^{(s)} = f(M_{t-1}^{(s)}; k_t, v_t)의 형태로 이루어집니다. 이 방식은 메모리 업데이트에는 O(L)O(L) 연산을, 검색 (retrieval)에는 캐싱된 메모리의 수에 비례하는 O(N)O(N) 연산을 요구하므로, 전체 복잡성은 O(NL)O(NL)이 됩니다. N=1N=1일 경우 표준 RNN에 해당하며, N=LN=L일 경우 각 토큰이 독립적인 세그먼트가 되어 트랜스포머의 동작에 가까워집니다.

논문은 MC를 활용하는 네 가지 novel aggregation strategies를 제안합니다:

  1. Residual Memory: 가장 단순한 형태로, 현재 온라인 메모리에 이전 세그먼트의 캐싱된 메모리들을 단순히 합산하여 출력을 계산합니다:
yt=Mt(s)(qt)+∑i=1s−1ML(i)(i)(qt)y_t = M_t^{(s)}(q_t) + \sum_{i=1}^{s-1} M_{L^{(i)}}^{(i)}(q_t)
선형 메모리 (linear memory)의 경우 수학적으로 표준 고정 크기 메모리와 동일하게 되지만, 실제로는 장기 기억 (long past)에 대한 접근성을 향상시키는 효과를 보입니다.

  1. Gated Residual Memory (GRM): Residual Memory의 한계를 극복하기 위해, 입력 의존적인 게이팅 (input-dependent gating) 파라미터 γt(i)\gamma_t^{(i)}를 도입하여 각 세그먼트의 기여도를 조절합니다.
yt=γt(s)Mt(s)(qt)+∑i=1s−1γt(i)ML(i)(i)(qt)y_t = \gamma_t^{(s)} M_t^{(s)}(q_t) + \sum_{i=1}^{s-1} \gamma_t^{(i)} M_{L^{(i)}}^{(i)}(q_t)
여기서 γt(i)\gamma_t^{(i)}는 현재 입력 xtx_t의 선형 투영 (linear projection) ut=xtWuu_t = x_t W_u와 ii-번째 세그먼트 S(i)S^{(i)}의 문맥 (context)을 나타내는 MeanPooling(S(i))\text{MeanPooling}(S^{(i)}) 간의 유사도 (similarity)를 통해 계산됩니다.
γt(i)=⟨ut,MeanPooling(S(i))⟩\gamma_t^{(i)} = \langle u_t, \text{MeanPooling}(S^{(i)})\rangle
이 게이팅은 토큰마다 다시 계산되어야 하므로 선형 메모리에서도 고정 크기 메모리로 붕괴되지 않습니다.

  1. Memory Soup: Wortsman et al. (2022)의 weight souping에서 영감을 받아, 메모리 상태 (memory states) 자체의 파라미터 (parameters)를 조합하여 단일의 데이터 의존적인 메모리 Mt∗M_t^*를 생성합니다. ML(i)(i)M_{L^{(i)}}^{(i)}의 파라미터 집합을 θML(i)(i):={W1(i),…,Wc(i)}\theta_{M_{L^{(i)}}^{(i)}} := \{W_1^{(i)}, \dots, W_c^{(i)}\}라고 할 때, Mt∗M_t^*의 파라미터는 게이팅 파라미터 γt(i)\gamma_t^{(i)}를 사용하여 가중 평균됩니다:
θMt∗:={∑i=1sγt(i)W1(i)∑i=1sγt(i),…,∑i=1sγt(i)Wc(i)∑i=1sγt(i)}\theta_{M_t^*} := \left\{\frac{\sum_{i=1}^s \gamma_t^{(i)} W_1^{(i)}}{\sum_{i=1}^s \gamma_t^{(i)}}, \dots, \frac{\sum_{i=1}^s \gamma_t^{(i)} W_c^{(i)}}{\sum_{i=1}^s \gamma_t^{(i)}}\right\}
그리고 출력을 계산합니다:
yt=Mt∗(qt)y_t = M_t^*(q_t)
선형 메모리에서는 GRM과 수학적으로 동일하지만, 딥 메모리 모듈 (deep memory modules)에서는 Mt∗M_t^*가 새로운 비선형 검색 함수를 생성하므로 큰 차이를 보입니다.

  1. Sparse Selective Caching (SSC): 모든 캐싱된 메모리를 사용하는 것이 아닌, Mixtur of Experts (MoEs)에서 영감을 받은 라우터 (router)를 사용하여 문맥적으로 가장 관련성이 높은 kk개의 캐싱된 메모리만 선택적으로 사용합니다. 각 세그먼트 S(i)S^{(i)}에 대한 관련성 점수 rt(i)r_t^{(i)}는 GRM과 유사하게 utu_t와 MeanPooling(S(i))\text{MeanPooling}(S^{(i)})의 내적 (inner product)으로 계산됩니다:
rt(i)=⟨ut,MeanPooling(S(i))⟩r_t^{(i)} = \langle u_t, \text{MeanPooling}(S^{(i)})\rangle
라우터는 이 점수를 기반으로 상위 kk개의 세그먼트 Rt=arg Top-k({rt(i)}i=1s−1)R_t = \text{arg Top-k}(\{r_t^{(i)}\}_{i=1}^{s-1})를 선택하며, 검색 과정은 선택된 메모리에 대해서만 이루어집니다:
yt=γt(s)Mt(s)(qt)+∑i∈Rtγt(i)ML(i)(i)(qt)y_t = \gamma_t^{(s)} M_t^{(s)}(q_t) + \sum_{i \in R_t} \gamma_t^{(i)} M_{L^{(i)}}^{(i)}(q_t)
이는 메모리 소비를 효율적으로 관리하며, 특히 초장문맥 (ultra-long sequences)에서 유용합니다.

논문은 또한 메모리 캐싱의 두 가지 관점을 논의합니다: 단일 메모리의 체크포인트를 캐싱하는 것 (최적화 관점)과 각 세그먼트에 독립적인 메모리 모듈을 사용하는 것 (압축 관점). 전자는 과거 지식 망각 (forgetting past knowledge)을 방지하는 반면, 후자는 세그먼트 간 간섭 (interference)을 피하고 각 세그먼트의 정보를 독립적으로 압축하는 데 중점을 둡니다.

증명 개념 (proof of concept)으로서, MC 기술은 Linear Attention (LA), 딥 메모리 모듈인 Titans (Behrouz et al., 2025c), Sliding Window Linear Attention (SWLA) 및 Deep Linear Attention (DLA) (Behrouz et al., 2025a)과 같은 다양한 아키텍처에 적용되었습니다. 실험 결과는 언어 모델링 (language modeling), 장문맥 이해 (long-context understanding) 및 검색 작업 (retrieval tasks)에서 MC가 순환 모델의 성능을 향상시키고 유효 컨텍스트 길이 (effective context length)를 확장함을 보여주었습니다. 특히, in-context recall tasks에서 MC 변형 모델들은 트랜스포머에 준하는 경쟁력 있는 성능을 달성하여 최신 순환 모델과의 격차를 줄였습니다.