본문 바로가기
논문리뷰

In Prospect and Retrospect: Reflective Memory Management for Long-term Personalized Dialogue Agents / RMM(Reflective Memory Management) : Reranker는 강화학습이 가능한 최소한의 랭킹 구조

by 혜룐 2025. 4. 30.
반응형

최근에 읽은 이 논문 "In Prospect and Retrospect: Reflective Memory Management for Long-term Personalized Dialogue Agents"는 대화형 에이전트가 어떻게 장기 기억을 효과적으로 다룰 수 있는지에 대한 흥미로운 접근을 보여준다. 이 논문에서는 특히 **RMM(Reflective Memory Management)**이라는 구조를 제안하는데, 이는 Prospective Reflection Retrospective Reflection이라는 두 가지 메커니즘으로 구성된다.

효과적인 개인화는 현재 맥락뿐만 아니라, 사용자의 과거 관련 정보를 기억하고 활용하는 능력이 필요하다. 과거정보를 자연스럽게 보존하고 회상하는 능력! 나도 단순 컨텍스트와는 다른 개념이라고 생각한다.

LLM이 응답을 생성한 뒤, 어떤 메모리를 인용했는지를 보고 보상을 준다. 리워드의개념과 닮아있다. 그리고 리랭커 모듈을 강화학습 방식으로 계속 업데이트한다. (온라인업데이트) 이걸 Retrospective Reflection 이라고 부른다. 

한줄로 정리하자면 이 논문에서의 Reranker는 강화학습이 가능한 최소한의 랭킹 구조로 설계된 간단한 모델이다.

내가 흥미롭게 본 부분은 Retrospective Reflection, 즉 대화 이후 LLM이 실제로 어떤 메모리를 참조했는지를 기반으로 reranker를 강화학습(REINFORCE)을 통해 업데이트하는 구조였다. 메모리를 인용했으면 +1, 그렇지 않으면 –1로 간단한 보상 신호를 만들어낸다는 점에서, 학습을 위한 별도의 라벨 없이도 자동으로 학습 신호를 만들어낸다는 점이 인상적이었다. 이부분은 지난번에 정리한 글을 참고해봐도 좋을거 같다. (지난번글 https://rhr0916.tistory.com/357 )

 

Stable Hadamard Memory: Revitalizing Memory-Augmented Agents for Reinforcement Learning

대화형이든 게임 속 캐릭터든, 어떤 에이전트가 "과거의 경험을 잘 기억하고, 지금 상황에 맞게 잘 행동하려면" 메모리라는 개념이 중요하다. 딥러닝 메모리 구조를 대화형에이전트에 활용하면

rhr0916.tistory.com

 

이 구조를 보며 생각이 들었던 건, 내가 익숙하게 봐왔던 랭커 모델(reranker)와는 조금 결이 다르다는 점이다. 보통은 임베딩 벡터를 만든 뒤 디코더 계층이나 cross-encoder로 점수를 출력하는 구조가 일반적인데, 이 논문에선 query와 memory embedding에 선형변환과 residual을 적용한 뒤, 내적을 통해 score를 계산하고, Gumbel-softmax로 확률을 만들어 Top-M을 선택하는 방식이었다. 더 단순하지만 reinforcement learning에 적합한 구조로 설계된 것 같다.

또 한 가지 흥미로웠던 점은 멀티턴 대화에서의 쿼리 구성이다. 예를 들어 사용자가 다음과 같이 말한다고 해보자:

“전에 엄마랑 갔던 카페 있잖아.”
“어디였더라…”
“그래 석촌호수 쪽 거기 다시 찾아줘.”

이렇게 여러 턴에 걸쳐 하나의 의미를 갖는 질의가 있을 때, 이를 하나의 검색용 query로 구성하는 것이 굉장히 중요하다. 일반적으로는 여러 문장의 임베딩을 더하거나 평균내는 방식, 또는 T5 같은 모델로 query rewriting을 통해 하나의 문장으로 구성하는 방식이 쓰인다. 내가 흥미를 갖는 지점은 바로 이 부분이다. 쿼리를 어떻게 구성하느냐에 따라 retrieval quality가 달라지고, 이후 reranking에도 영향을 준다는 점에서, 멀티턴 대화에서의 query representation은 실전에서 중요한 요소라는 걸 다시금 느꼈다.

이 논문은 retriever와 LLM은 고정시켜두고, reranker만 강화학습으로 개선해가는 구조다.
만약 실제로 이런 시스템을 내가 구현한다면, query rewriting → memory retrieval → reranking → 응답 생성까지 하나의 파이프라인으로 설계하는 쪽이 현실적일 것이다.
또한, query와 memory embedding을 잘 정렬하기 위해 선형변환 + residual 연결을 사용하는 것도 학습 안정성 측면에서 인상 깊었다.

결국 이 논문은 "강화학습을 어떻게 실용적인 메모리 시스템에 얹을 수 있을까?"라는 질문에 꽤 영리한 해답을 준 것 같고, 나에게도 나중에 구현해보고 싶은 아이디어들을 많이 던져줬다.


개인 맞춤형 헬스케어 에이전트 예시

대형 언어 모델(LLMs)의 문맥 창(context window)을 넘는 대화를 처리하는 능력이 부족하다는 한계는, LLM용 외부 메모리 시스템의 개발을 촉진시켰다. 그러나 외부 메모리 메커니즘은 의미 있는 진전을 이루었음에도, 다음 두 가지 중요한 한계점이 있다.

  • 고정된 메모리 단위(granularity) 문제
    • 대부분 시스템은 대화를 턴, 세션, 시간 단위 등으로 고정적으로 분할하여 저장한다.
    • 이는 대화 중 의미적 단위(예: 주제 전환)와 잘 맞지 않아서, 단편적이거나 불완전한 메모리 표현을 초래하고
    • 결과적으로 LLM이 정보를 검색하고 활용, 업데이트하는 데 방해가 된다 (Pan et al., 2025; Wu et al., 2024).
  • 고정된 검색기(retriever) 문제
    • 현재 시스템은 대부분 정해진 방식의 retriever에 의존하고 있으며,
    • 이는 다양한 도메인이나 사용자 상호작용 패턴에 맞춰 유연하게 적응하지 못한다 (Li et al., 2024b; Zhong et al., 2024).
    • 특히, 개인화된 retriever를 학습하려면 고비용의 라벨링 데이터가 필요하다는 점도 실용적 장벽이다.

Reflective Memory Management (RMM)이라는 세분화된 메모리 구성이 가능한 설계를 다룬 논문이다. LongMemEval에서 RMM이 베이스라인대비 5% 성능향상을 보여줬다고 한다.  https://github.com/xiaowu0162/LongMemEval 요즘 LLM 기반 대화 시스템에서 "장기 기억 성능"을 평가할 수 있도록 설계된 벤치마크 테스트셋이다. 

  • Prospective Reflection
    • 과거 대화를 주제 단위로 요약 및 재구성하여, 파편화된 정보를 통합하고 구조화된 메모리로 정리
    • 이를 통해 세션이나 턴 경계를 넘어서 더 효과적인 미래 검색이 가능해짐
  • Retrospective Reflection
    • 검색기의 한계를 해결하기 위해, LLM이 응답 생성 중 사용한 근거(citation)를 활용
    • LLM이 어떤 메모리를 실제로 활용했는지를 자동 감지하여, retriever를 온라인에서 점진적으로 강화학습 기반으로 업데이트

Problem Formulation 

우리는 멀티 세션(multi-session) 대화 설정에서 개인화된 대화 에이전트를 구축하는 문제를 다룬다. 이 환경에서 에이전트는 사용자와 여러 개의 독립적인 세션을 통해 상호작용한다. 

  • 세션(session)은 하나의 상호작용 기간을 의미하며, 일반적으로 사용자의 비활성 상태, 명시적인 종료 발화, 혹은 새로운 대화의 시작으로 구분된다.
  • 각 세션은 여러 턴(turn)으로 구성되며, 각 턴은 사용자 발화와 이에 대한 에이전트 응답으로 이루어진다.
  • 에이전트는 외부 메모리(external memory)를 갖고 있으며, 이는 과거 세션에서 수집된 정보를 저장하는 유일한 저장소이다.

에이전트의 목표는 현재 세션의 문맥 + 메모리에서 검색된 정보를 활용하여, 사용자의 질의에 문맥적으로 관련 있고 개인화된 응답을 생성하는 것이다. 

 

  • 각 세션에서 중요한 정보를 선제적으로 추출하고 저장해야 함 → 미래에 검색될 가능성을 고려해야 함. (나는 priority스코어도 뽑았는데 검색시 실제로 priority가 높은 값에 검색히트율이 어땠는지를 보면 좋겠다 싶다. 미래에 검색될 가능성을 고려한다는게 아무래도 중요한 정보들? 이 될것이라는 전제를 두고 있으니까 말이다.)
  • 과거의 관련 정보를 정확히 검색해야 함 → 관련 없는 정보를 포함하면 LLM의 품질이 떨어지고 주의가 산만해짐.

그래서 Reflective Memory Management (RMM)를 제안한다.

  1. Prospective Reflection
    • 대화 이력을 주제 단위(topic-based)로 나누어 메모리화
    • 향후 검색을 최적화하기 위해 사전 구성함
  2. Retrospective Reflection
    • LLM의 응답 중 실제로 인용된 메모리 정보(citation)를 바탕으로
    • 온라인 피드백 신호로 검색기(reranker)를 동적으로 개선

이 두 메커니즘을 통합하여 검색 품질을 향상시키고, 효과적인 개인화에 기여했다고 한다. (와씨.. ㅋㅋ 우리도 롱텀Eval같은거 돌려볼걸..)

온라인 적응형 메모리 검색 시스템"을 LLM 기반 대화에 통합한 구조 / 강화학습 기반 반영

 

LLM이 현재 질의 q 와 현재 세션 대화 기록 S , 리랭크된 메모리 M_M 를 바탕으로 응답 a를 생성 하고 각 메모리가 실제로 사용됐는지를 표시 한 citation 정보 R_M 도 함께 반환함.

리랭커 g_φ 는 R_M 을 보상 신호로 받아 REINFORCE 알고리즘 기반으로 업데이트됨 .

  • Memory Bank:
    대화 이력을 저장하는 곳이고 각 항목은 (요약된 주제, 원문 대화) 쌍으로 저장됨.
  • Retriever:
    현재 질의에 대해 적절한 메모리를 초기 검색하는 역할.
  • Reranker: ( 이부분은 우리는 두지 않았다. 이유는? 험.. )
    Retriever의 결과 중 더 관련성 높은 메모리만 선별함.
    학습 가능한 모듈로, RL을 통해 점진적으로 개선됨.
  • LLM: ( 이부분은 에이전트가 돌아가는 내부에서 또는 후처리로 암묵적인 피드백레이어에서 관리하는걸 생각했다. 얼마나 좋은정보를 잘 참조했는가 )
    최종 응답을 생성함. 이 과정에서 어떤 메모리를 썼는지 citation 정보를 같이 출력함 → reranker 업데이트에 활용됨.

Prospective Reflection: 주제 기반 메모리 구성

기존 메모리 시스템은 턴/세션 등 고정된 경계를 사용해 대화 이력을 분리하지만, 이는 대화의 의미 단위와 잘 맞지 않아 정보가 분산되고 검색이 어렵다는 한계가 있다. 그렇다 매우 동의함..

  • 각 세션이 끝날 때, LLM을 이용해 주제 단위로 요약함.
  • 이를 기존 메모리와 비교해:
    • 새로운 주제면 → 새로 추가
    • 기존 주제면 → 내용 병합 (merge)

이부분을 보면서 드는 생각은 우리가 구상한 숏텀의 작은 주제들을 일이나 주단위로 머지(나는 아카이빙이라고 불렀는데) 하는 부분에 신경을 좀더 썼으면 하는 생각이 든다. 짧은 시간에 주고받은 주제가 메신져라서 더 자주 파편화되고 주제는 이어지지면 주고받은 내용의 중요도가 낮거나 없을수 있기때문이다. (요건 메모를 남겨두자^^)

세션이 끝났을 때 대화 내용을 주제 단위로 분해(summarize)하고 그 주제들을 메모리 뱅크에 병합(merge) 또는 추가(add)하는 과정

 

하나의 세션 대화가 끝나면, LLM이 이 대호에서 중요한 정보를 뽑아낸다. 좋아하는것, 좋아하지 않은것.. 등등

그리고 이 정보들을 주제 단위로 정리해서 토픽서머리 + 대화원문을 쌍으로 만든다. 그리고 메모리뱅크에 업데이트를 하는데 병합하거나 추가한다. (이런 흐름은 메모리쪽에서는 너무 당연한 플로우라소..) 머지가 된부분은 노란색이고 연두색은 새로 추가된것이다. 

이렇게 구성하면 미래의 검색이 훨씬 효율적이도록 메모리를 구조화한다고 설명한다. 정리를 다시 한번 해보면?

Prospective Reflection은 미래에 검색이 잘되도록 과거의 데이터를 참고 할수있도록 정보를 잘 정리해주는 기능

Retrospective Reflection은 지금 검색이 잘 됐는지를 평가하는 기능이다. 여기에 강화학습 리랭커 모델이 쓰였다.


Reranker Design

이 논문에서 강화학습(RL)이 리랭커모델에서 쓰였다.

  • Reranker는 Retriever가 뽑은 Top-K memory들 중에서 Top-M개를 재정렬해서 선택하는 역할
  • 이 Reranker는 학습 가능한 모듈이고, 바로 여기에 REINFORCE 강화학습 알고리즘이 적용됨

리랭커라고 해서 헷갈리면 안되는게 웹이나 추천시스템에서 쓰이는 리랭커랑은 다르다. 보통 추천시스템에서는 후보군을 임베딩 한 후 디코딩 레이어를 통해서 최종 점수로 변환하는 구조에 가깝다. 예를 들면 듀얼인코더 -> 크로스 인코더와 같은 구조

그런데 이논문에서 말하는 리랭커는 다른(?) 개념이다. retriever는 고정, reranker만 online 업데이트하는 구조가 목표다. 

 

  • Retriever가 뽑은 Top-K 메모리 후보들이 있음
    → 각 memory mim_i는 이미 임베딩되어 있음
  • Reranker는:
    • query qq와 memory mim_i를 각각 선형변환 + residual 연결q′=q+Wqq,mi′=mi+Wmmiq' = q + W_q q, \quad m_i' = m_i + W_m m_i
    • 내적해서 점수 계산si=q′Tmi′s_i = q'^T m_i'
    • Gumbel noise 추가 → softmax로 확률화
    • 확률적으로 Top-M 선택
  • 여기서 학습되는 건 WqW_q, WmW_m 같은 단순 선형 계수들이고, 디코더 구조나 attention은 없다.

논문을 좀더 읽어보자.

Residual은 원래 입력을 그대로 더해주는것을 말한다. 그말인 즉슨 원본 임베딩 정보가 그대로 전달되니까 학습 안정성이 올라간다. = 정보 손실을 막을수 있다는거다. 그리고 그레디언트 흐름이 더 잘이어진다. (딥러닝 네트워크가 깊어져도 오브플로딩같은데 안정적이라는 얘기다. ResNet에서 도입된 아이디어인데 CNN정리된 글에서 참고~)

Residual 연결 포함한 선형 변환을 통해 재정의

q' = q + Wq·q
mᵢ' = mᵢ + Wm·mᵢ

Softmax를 통해서는 Top-K memory들 중 어떤 걸 선택할지 확률적으로 결정한다. Gumbel noise는 포함된 점수를 소프트맥스에 넣고 확률 분포로 만들어서 샘플링하는 방식이다. 이렇게 하면 gradient를 유지하면서도 강화학습에 적합한 확률적 선택이 가능해진다. (Gumbel-Softmax는 noise로 살짝 흔들고 softmax로 부드럽게 선택)

 

LLM이 직접 생성한 citation을 자동 보상 신호로 사용 하기 때문에 label-free 이며, 매 대화마다 학습이 일어나므로 온라인 강화학습 형태

 


https://arxiv.org/abs/2503.08026 논문을 추천한다^^

 

In Prospect and Retrospect: Reflective Memory Management for Long-term Personalized Dialogue Agents

Large Language Models (LLMs) have made significant progress in open-ended dialogue, yet their inability to retain and retrieve relevant information from long-term interactions limits their effectiveness in applications requiring sustained personalization.

arxiv.org

 

나도 아래처럼 프롬프트를 구성했는데 굉장히 닮아있다. 근데 예시라서 그렇겠다만은.. 모바일에서 추출한 데이터라면.. 저렇게 길게 얘기를 하지 않고.. 이모티콘과 같은것도 텍스트화하는 작업도 필요하다. 이런게 디테일이지^^

 

 

 

 

 

반응형