포스트

Memory Is Reconstructed, Not Replayed

Memory Is Reconstructed, Not Replayed

Agent memory 연구는 무엇을 저장하고 어떻게 검색할지에 집중해 왔어요. Mem0, ExpeL, Memp 모두 저장 구조와 검색 정확도를 다듬는 방향이에요. 검색된 기억을 어떻게 쓸지는 대체로 컨텍스트에 그대로 넣는 것으로 끝나요. MemHarness는 이 마지막 단계를 문제 삼아요. 검색이 정확해도 그 기억이 지금 상태에 적용 가능한지는 별개 문제이고, 적용 불가능한 기억을 그대로 넣으면 오히려 성능이 떨어진다는 관찰이에요.

Retrieval relevance와 applicability는 다른 문제예요

Memory-augmented agent의 표준 구성은 간단해요. 과거 trajectory를 자연어 원칙으로 증류해 저장하고, 현재 상황에서 임베딩 유사도로 상위 몇 개를 꺼내 프롬프트에 넣어요. 이 구조는 검색된 기억이 지금 쓸 만한지를 따로 확인하지 않아요. 문제는 두 종류의 관련성이 다르다는 점이에요. Semantic relevance는 기억이 현재 과제와 같은 주제를 다루는지를 봐요. Applicability는 그 기억이 만들어진 전제 조건이 지금도 성립하는지를 봐요. 검색기는 앞의 것만 판단해요.

ALFWorld의 예를 들면 이렇게 돼요. “머그는 countertop에서 잘 안 보이니 cabinet부터 열어라”는 기억이 있어요. 지금 관측에 이미 머그가 countertop 위에 놓여 있다면, 이 기억은 여전히 검색 점수가 높지만 따르는 순간 낭비된 스텝이 돼요. 저자들은 이 간극을 applicability gap이라 부르고, 여기서 생기는 성능 저하를 negative transfer로 정리해요.

대안 방향은 두 갈래로 갈려요. MemGen처럼 경험을 파라미터에 내재화하면 상태에 맞춰 유연하게 쓰이지만 어떤 경험이 어떤 결정에 영향을 줬는지 들여다볼 수 없어요. 명시적 memory bank는 추적 가능하지만 사용 방식이 고정돼요. MemHarness가 노리는 지점은 그 사이예요. 기억은 명시적 레코드로 남기되, 그 기억을 현재 상태에 맞게 고쳐 쓰는 과정을 정책 안으로 넣어요.

인간의 회상은 재생이 아니라 재구성이에요

저자들이 근거로 드는 것은 Loftus와 Palmer(1974)의 고전적 결과예요. 사람은 과거 기록을 원본 그대로 꺼내지 않고, 현재 단서와 사전 지식을 써서 해석하고 재조직한 다음에 행동해요.

fig1

이 관점에서 memory-guided decision-making을 다섯 단계로 다시 씁니다.

  1. Observation. 현재 상황을 관측해요.
  2. Retrieval. 관련 기억과 그 기억의 출처 맥락을 함께 꺼내요.
  3. Critique. 그 기억이 지금 적용 가능한지 판단하고 어긋난 부분을 찾아요.
  4. Reconstruction. 옮겨 쓸 수 있는 지식은 남기고 맞지 않는 내용은 고치거나 버려요.
  5. Action. 재구성된 guidance를 근거로 행동해요.

Retrieve and replay에서 retrieve, evaluate, and reconstruct로 바뀌는 것이 핵심이에요.

Memory에는 경험과 그때의 상태가 함께 들어가요

문제 설정은 POMDP(Partially Observable Markov Decision Process) $\mathcal{M} = (\mathcal{S}, \mathcal{A}, \mathcal{O}, P, R)$ 예요. 부분 관측을 다루기 위해 정책은 최근 $w$ 스텝의 history window에 조건화돼요.

\[h_t = (o_{t-w+1}, a_{t-w+1}, \ldots, o_{t-1}, a_{t-1}, o_t)\]

실험에서는 $w = 3$ 을 써요.

Memory bank는 $\mathcal{B} = {m_i}_{i=1}^{N}$ 이고, 각 항목은 두 부분으로 이뤄져요.

\[m_i = (e_i, o_i^{src})\]

$e_i$ 는 추상적인 전략이고, $o_i^{src}$ 는 그 전략이 만들어진 시점의 source observation이에요. 이 두 번째 필드가 이 논문의 설계에서 가장 중요한 부분이에요. 기존 memory 시스템은 원칙만 저장하는데, 여기서는 원칙이 성립했던 상태를 같이 저장해요. 재구성 단계가 “그때”와 “지금”을 비교할 기준점을 갖게 돼요.

검색은 상위 $k$ 개를 반환해요.

\[\mathcal{E}_t = \mathcal{R}(q_t, \mathcal{B}), \qquad |\mathcal{E}_t| = k\]

구현은 Milvus 벡터 DB에 BGE-M3 임베딩을 쓰고 $k = 3$ 이에요. Memory bank는 비어 있는 상태로 시작해서 RL 학습 중 정책이 자기 trajectory를 증류하며 채워요. 성공과 실패 trajectory를 균형 있게 남기고, 생성된 trajectory의 50%만 증류에 써요. 관리는 세 단계로 이뤄져요. 쓰기 시점에 코사인 유사도 0.85를 넘으면 삽입을 건너뛰고, 검색 시점에 큰 후보 풀에서 greedy dedup 후 잘라내고, 주기적으로 EvolveR 방식의 Laplace-smoothed utility score로 낮은 항목을 정리해요.

\[s(p) = \frac{c_{\text{succ}}(p) + 1}{c_{\text{use}}(p) + 2}\]

점수가 0.3 미만이고 최소 3회 이상 검색된 항목이 pruning 대상이에요.

Reconstruction이 retrieval과 action 사이에 들어가요

fig2

Verbatim replay는 검색 결과에 바로 조건화해서 행동해요.

\[a_t \sim \pi_\theta(\cdot \mid \mathcal{T}, h_t, \mathcal{E}_t)\]

MemHarness는 그 사이에 한 단계를 넣어요. 재구성 컨텍스트는 과제 설명, 현재 history, 검색된 기억 튜플을 이어 붙여서 만들어요.

\[x_{\text{recon}} = \mathcal{T} \oplus h_t \oplus \bigcup_{i=1}^{k}(e_{t,i}, o_{t,i}^{src})\]

같은 정책이 여기서 guidance를 생성해요.

\[g_t \sim \pi_\theta(\cdot \mid x_{\text{recon}})\]

적용할 만한 기억이 없으면 정책은 <EMPTY> 토큰을 출력해요. 이 경우 memory 없이 스스로 추론하라는 지시 $p_{\text{self}}$ 로 대체돼요.

\[\tilde{g}_t = \begin{cases} p_{\text{self}}, & \text{if } g_t = \text{EMPTY} \\ g_t, & \text{otherwise} \end{cases}\]

행동은 원본 기억이 아니라 재구성 결과에 조건화돼요.

\[a_t \sim \pi_\theta(\cdot \mid \mathcal{T}, h_t, \tilde{g}_t)\]

주목할 점은 재구성과 행동 생성이 같은 파라미터 $\theta$ 를 공유한다는 것이에요. 별도 critic 모델이나 rewriter를 두지 않아요. 하나의 정책이 기억을 평가하는 역할과 행동하는 역할을 번갈아 수행해요.

정답 없는 재구성을 GRPO로 학습해요

$g_t$ 에는 ground truth가 없어요. 어떤 재구성이 좋은 재구성인지 사람이 라벨링한 데이터가 없다는 뜻이에요. 저자들은 $g_t$ 를 latent reasoning으로 두고 파이프라인 전체를 task reward로 학습해요.

보상은 성공 여부 중심이에요.

\[R(\tau_i) = R_{\text{outcome}} + 0.1 \times R_{\text{format}}\]

$R_{\text{outcome}}$ 은 성공 10, 실패 0이에요. $R_{\text{format}} \in [0, 1]$ 은 세 기준을 동등 가중해요.

  • 스텝마다 유효한 <think> 블록과 <action> 블록이 정확히 하나씩 있을 것
  • <retrieve_memory> 블록을 에피소드당 1회에서 5회 사이로 쓸 것
  • 출력을 영어로 유지할 것

GRPO는 그룹 내 정규화로 advantage를 계산해요.

\[A_i = \frac{R(\tau_i) - \mathrm{mean}(\{R(\tau_k)\}_{k=1}^{G})}{\mathrm{std}(\{R(\tau_k)\}_{k=1}^{G})}\]

이 trajectory-level advantage가 $\tau_i$ 의 모든 토큰에 동일하게 배분돼요. 사고 과정 토큰, 재구성 토큰, 행동 토큰이 같은 신호를 공유한다는 뜻이에요. 재구성 능력이 별도 목적함수 없이 학습되는 메커니즘이 여기예요. 좋은 재구성은 좋은 행동으로 이어지고, 그 결과가 보상으로 돌아와 재구성 토큰까지 밀어 올려요.

\[\mathcal{J}(\theta) = \mathbb{E}\left[\frac{1}{\sum_i |\tau_i|}\sum_{i=1}^{G}\sum_{j=1}^{|\tau_i|}\left(\mathcal{L}^{\mathrm{CLIP}}_{i,j}(\theta) - \beta\, \mathbb{D}_{\mathrm{KL}}[\pi_\theta \| \pi_{\text{ref}}]\right)\right]\]

RL 전에 짧은 cold-start 단계를 둬요. 벤치마크당 200개의 memory-augmented interaction trajectory와 200개의 trajectory-to-memory 요약 쌍을 GPT-5.1로 만들어 2 epoch SFT해요. 목적은 상호작용 프로토콜과 memory 요약 포맷을 익히는 것이지 과제 능력 획득이 아니에요. 실제로 cold-start 모델만으로는 ALFWorld 7.6%에 그쳐요.

백본은 Qwen2.5-7B-Instruct이고 verl-agent 위에 구현했어요. $G = 8$, learning rate $1 \times 10^{-6}$, $\epsilon = 0.2$, $\beta = 0.01$ 이에요.

7B 모델이 Gemini-2.5-Pro를 앞서요

table1

MemHarness는 ALFWorld 평균 성공률 85.2%, WebShop 성공률 75.6%(score 87.4)를 기록해요. 베이스 모델인 Qwen2.5-7B-Instruct가 14.5%, 7.8%인 것과 비교하면 대부분의 이득이 학습에서 나와요. Gemini-2.5-Pro가 62.1%, 35.9%이니 7B 규모로 closed-source 모델을 앞선 셈이에요.

더 의미 있는 비교는 같은 백본을 쓴 RL 계열이에요. 순수 GRPO가 76.4%, 66.1%로 이미 강한 베이스라인이에요. Prompt 기반 memory 방법(Reflexion 39.9%, ExpeL 45.3%, Memp 41.0%)은 정책 최적화 없이는 이 수준에 미치지 못해요.

여기서 논문의 동기가 수치로 드러나요. RL에 외부 memory를 단순 결합하면 ALFWorld 성능이 떨어져요. Mem0+GRPO가 52.0%, SimpleMem+GRPO가 54.5%로 순수 GRPO의 76.4%보다 한참 낮아요. EvolveR 재현본도 70.1%로 GRPO 아래예요. 검색된 기억을 그대로 넣는 방식이 실제로 해가 된다는 직접 증거예요.

다만 WebShop에서는 방향이 달라요. EvolveR이 72.6%로 GRPO의 66.1%를 넘어요. 두 환경에서 memory의 부호가 반대예요. ALFWorld는 방 배치와 물체 위치가 에피소드마다 바뀌어서 과거 상태가 지금과 어긋날 확률이 높고, WebShop은 검색-필터-구매라는 절차가 반복돼서 추상적 원칙이 그대로 쓰이는 경우가 많아요. Negative transfer가 환경의 state variance에 비례한다는 해석과 일관돼요.

Memory를 꺼도 성능이 오르는 이유

Ablation이 이 논문에서 가장 흥미로운 부분이에요.

table2

Raw memory는 노이즈로 작동해요. 재구성 없이 원본 기억을 주입한 “RL + Raw Memory”가 ALFWorld 70.1%로 memory를 안 쓴 76.4%보다 낮아요. 학습된 정책에 test time에서만 재구성을 끈 “w/o reconstruction”도 79.6%로 전체 85.2%보다 떨어져요.

Test time에 memory를 꺼도 RL only보다 좋아요. “w/o memory” 설정이 83.0%예요. 순수 GRPO의 76.4%보다 6.6%p 높아요. 학습 중에만 재구성 과정을 거쳤을 뿐 추론 시점에는 memory를 전혀 안 쓰는데도 그래요.

이 결과의 해석이 중요해요. 재구성 목적이 단순히 노이즈를 걸러내는 방어 장치가 아니라, 학습 과정에서 정책의 내재 추론 능력 자체를 끌어올린다는 뜻이에요. 매 스텝마다 “이 원칙이 지금 상태에 맞는가”를 명시적으로 판단하도록 강제하면, 그 판단 습관이 memory 없는 상황에도 남아요. 저자들은 재구성 출력을 latent guidance로 부르는데, 좋은 재구성 문장이 사실상 고품질 chain-of-thought 역할을 한다는 관점이에요.

동시에 이 결과는 memory 자체의 기여를 작게 만들어요. 전체 85.2%와 memory 없는 83.0%의 차이는 2.2%p예요. 재구성 학습이 주는 이득이 6.6%p이고, 추론 시점 memory가 주는 추가 이득이 2.2%p인 구조예요. 논문 제목은 memory 활용 방식을 말하지만, 수치상 더 큰 몫은 학습 신호 쪽에 있어요.

재구성은 정책 안에 있어야 해요. 학습된 actor는 그대로 두고 재구성만 일반 Qwen2.5-7B-Instruct에 맡기면 77.7%로 떨어져요. Zero-shot 텍스트 재작성으로는 부족하고, 환경 동역학에 정렬된 적응이 end-to-end RL로만 나온다는 근거예요.

Out-of-Distribution에서 replay는 더 위험해져요

방 배치와 물체 구성이 학습 때 보지 못한 것으로 바뀐 ALFWorld OOD 설정이에요.

table3

MemHarness가 85.9%, “w/o reconstruction”이 82.4%, “RL + Raw Memory”가 76.3%예요. 상태 어긋남이 심해질수록 재구성의 가치가 커진다는 논지에 맞아요.

논문은 여기까지만 다루지만, 두 가지 부분이 걸려요. 첫째, “w/o memory” 행이 83.0%로 Table 2의 in-distribution 수치와 카테고리별 값까지 동일해요. 같은 평가 결과를 옮겨 놓은 것으로 보이고, 그렇다면 OOD 조건에서의 memory가 없는 baseline은 사실상 제시되지 않은 셈이에요. 둘째, MemHarness의 OOD 성능 85.9%가 in-distribution 85.2%보다 높아요. OOD 분할이 실제로 더 어렵지 않았을 가능성을 배제하기 어려워요.

카테고리별 수치도 해석에 주의가 필요해요. ALFWorld의 여섯 카테고리는 평가 에피소드 수가 작아요. Look 카테고리에서 52.6%와 68.4%의 차이는 19개 중 3개 차이이고, Heat에서 78.6%와 92.9%는 14개 중 2개 차이예요. Table 2에서 “w/o memory”가 Pick 100%로 전체 모델의 87.0%보다 높은 것도 같은 맥락이에요. Macro-average 하나만 보면 안정적으로 보이지만, 개별 항목의 변동 폭이 커요.

재구성은 정말 상태를 비교할까

재구성이 실제로 $o^{src}$ 와 $h_t$ 를 대조하는지, 아니면 표면적 패턴에 반응하는지를 두 방향으로 확인해요.

table4

Macro-level filtering. 재구성 입력에서 source state를 조작해요. $o^{src}$ 를 아예 빼면 reject rate는 8.7%에서 7.8%로 거의 그대로인데 성공률이 85.2%에서 80.0%로 떨어져요. 비교 대상이 없으니 어긋난 guidance를 그대로 받아들이는 거예요. 반대로 $o^{src}$ 를 무작위 기억의 상태로 바꾸면 reject rate가 13.3%로 뚜렷하게 올라가요(WebShop은 56.0%에서 63.3%). 필드가 비었다는 사실이 아니라 내용이 어긋난다는 사실에 반응한다는 뜻이에요.

다만 이 조작에서 성공률은 84.3%로 거의 안 변해요. 필터링 신호는 반응하지만 최종 성능은 그 신호에 크게 의존하지 않는다는 관찰이 함께 나와요.

Micro-level counterfactual adaptation. 환경을 실제로 굴리는 대신 재구성 단계만 떼어내서 보는 오프라인 검사예요. 한 문항은 세 조각으로 이뤄져요. 실제 상호작용에서 뽑은 상태 $s^{+}$, 그 상태에서 실제로 검색됐고 적용 가능성이 높은 기억 $m$, 그리고 $m$ 이 성립하지 않도록 $s^{+}$ 를 최소한만 고친 상태 $s^{-}$ 예요. 편집은 GPT-5.1이 하고, 관측 형식을 그대로 유지하도록 강제해서 포맷 단서로 거부하는 경로를 막아요. 두 상태 각각에 정책을 태워 재구성 출력이 어떻게 갈리는지만 보고, 이후 과제 수행은 측정하지 않아요. ALFWorld와 WebShop에 1,000개씩 만들었어요.

ALFWorld 예시는 실패에 기반한 탐색 휴리스틱의 전제를 무효화하는 방식이에요. 대상 물체가 이미 보이도록 상태를 바꾸면 “먼저 cabinet을 열어라”는 원칙이 성립하지 않게 돼요.

결과를 보면 방향은 맞아요. ALFWorld에서 unchanged 출력이 46.0%에서 37.3%로 줄고 adapted가 53.4%에서 56.3%, reject가 0.6%에서 6.4%로 늘어요. WebShop은 reject가 72.1%에서 78.8%로 올라가요.

효과 크기는 크지 않아요. 기억을 쓸 수 없게 만들도록 설계된 편집인데도 ALFWorld의 거부율은 6.4%에 그쳐요. 대부분은 거부가 아니라 수정으로 처리되는데, 수정이 실제로 올바른 방향인지는 이 지표로 알 수 없어요.

두 환경의 거부율 차이도 눈에 띄어요. ALFWorld는 8.7%, WebShop은 56.0%예요. 같은 메커니즘이 환경에 따라 완전히 다른 동작점에 수렴해요. WebShop의 관측이 긴 웹페이지 내용이라 상태가 매번 크게 달라지고, ALFWorld는 간결한 상태 서술이라 겹치는 부분이 많다는 것이 저자들의 설명이에요.

학습 중 memory 사용 패턴은 어떻게 변할까

fig3

ALFWorld는 학습이 진행되면서 검색 횟수가 trajectory당 2~3회로 줄어드는 sparse 정책으로 수렴해요. WebShop은 잦은 검색을 유지하면서 거부를 계속 병행해요. 고정된 규칙이 아니라 환경별 전략이 학습된다는 것이 저자들의 주장이에요.

여기서 format reward를 다시 볼 필요가 있어요. 검색 횟수가 에피소드당 1~5회 범위를 벗어나면 보상이 깎여요. ALFWorld가 수렴한 2~3회는 이 구간 안쪽이에요. 검색 빈도가 순수하게 창발한 것인지, 보상 설계가 만든 밴드 안에서 조정된 것인지는 구분하기 어려워요.

fig4

Figure 4는 memory 결정과 과제 결과의 상관을 봐요. 재구성을 수용한 trajectory가 거부한 trajectory보다 일관되게 높은 성공률을 보여요. 정책이 기억의 적용 가능성을 실제로 판별한다는 근거로 제시돼요.

다만 이 상관은 인과로 읽기 어려워요. 쉬운 에피소드일수록 검색된 기억이 잘 맞고 성공률도 높다면 같은 곡선이 나와요. 거부가 성공률을 낮추는 것인지, 어려운 상황이 거부와 실패를 함께 만드는 것인지를 이 그림만으로 나눌 수 없어요.

마무리하며

MemHarness의 기여는 memory 파이프라인에서 그동안 비어 있던 자리를 지적한 데 있어요. 저장 구조와 검색 정확도는 오래 다듬어졌지만, 검색과 행동 사이는 대체로 문자열 연결로 처리돼 왔어요. 그 자리에 학습 가능한 단계를 넣고, 그 단계를 별도 supervision 없이 task reward만으로 학습시킨 구성은 깔끔해요. 기억에 $o^{src}$ 를 함께 저장한 설계가 이를 가능하게 하는 최소 장치예요. 비교 기준 없이는 재구성이 판단할 근거가 없어요.

실험이 뒷받침하는 것과 그렇지 않은 것을 나눠 볼 필요가 있어요. Negative transfer가 실재한다는 주장은 강하게 뒷받침돼요. ALFWorld에서 memory를 붙인 RL 변형들이 순수 GRPO보다 낮다는 결과가 여러 방법에서 반복돼요. 반면 재구성이 상태 비교를 통해 작동한다는 주장은 방향성 수준의 증거예요. Source state 조작은 거부율을 움직이지만 성공률은 거의 안 움직이고, counterfactual 프로브의 행동 변화 폭도 작아요.

가장 다시 볼 만한 결과는 memory를 끈 상태에서의 83.0%예요. 학습 중 재구성을 강제하는 것만으로 추론 능력이 올라간다면, 이 기법의 위치는 memory 시스템보다 RL 학습 신호 설계 쪽에 가까워져요. Memory bank가 학습용 커리큘럼 생성기 역할을 하고 추론 시점에는 없어도 되는 구조라는 해석도 가능해요. 논문은 이 가능성을 latent guidance라는 이름으로 언급만 하고 분리해서 측정하지는 않아요. 재구성 없이 같은 분량의 self-reflection 토큰만 강제한 대조군이 있었다면 이 부분이 훨씬 명확해졌을 거예요.

평가 규모도 한계예요. ALFWorld 카테고리별 에피소드가 수십 개 단위라 몇 개 차이가 수 %p로 증폭돼요. 시드 반복이나 신뢰구간 없이 macro-average 하나로 방법 간 우열을 매기기에는 여백이 좁아요. OOD 표에서 memory가 없는 baseline이 in-distribution 값과 동일하게 적힌 것도 확인이 필요한 부분이에요.

Agent memory를 저장과 검색의 문제로 보는 흐름에 사용 단계라는 축을 하나 더 세운 점은 분명한 기여예요. 다음 질문은 이 재구성 능력이 어디까지 일반화되는가예요. 두 시뮬레이션 환경과 7B 백본에서 나온 결과이고, 재구성 학습이 정책 자체를 개선한다면 그 개선이 환경 특유의 것인지 환경을 넘어 옮겨지는지가 확인될 부분이에요.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.