<- Back to projects and build log

RAG-DDR

원문 ICLR 2025 Poster Why DDR? 기존에는 Retrieval 모듈과 실제로 답변을 생성하는 Generation 모듈을 따로 최적화한다. 그런데 Retrieval 모듈만 최적화하면, Generation 모듈 (LLM)에서 이미 내부적으로 학습한 지식 (parametric knowledge)와 Retrieval 모듈에서 온 지식끼리 충돌이 발생할 수 있다. 이렇게 충돌이 발생하...

rag / ddr / dpo / retrieval
RAG-DDR 글 대표 일러스트
Jeffrey Kim의 SecondBrain 빌드 로그 아티클 커버

Quick context

First, this page captures one concrete build-log step, research note, or project lesson from Jeffrey Kim.

Next, use the tags, related reading, and home archive to move from this note to deeper material in the same topic cluster.

Finally, follow the RSS feed if you want the next experiment, retrospective, or paper review as soon as it ships.

Why DDR?

기존에는 Retrieval 모듈과 실제로 답변을 생성하는 Generation 모듈을 따로 최적화한다. 그런데 Retrieval 모듈만 최적화하면, Generation 모듈 (LLM)에서 이미 내부적으로 학습한 지식 (parametric knowledge)와 Retrieval 모듈에서 온 지식끼리 충돌이 발생할 수 있다. 이렇게 충돌이 발생하면 더 좋은 답변으로 이어지기 어렵다. 더불어 Generation 모듈만 튜닝하는 SFT 같은 경우에는 주어진 instruction-tuning 데이터셋의 대답 양식에 제한되고 (오버피팅되고), 다양한 passage들이 오는 RAG와 같은 것에 대응하기 힘들다.

그래서 DDR은 DPO를 이용해 Retrieval과 Generation 모듈 모두를 훈련한다. (RAG의 처음부터 끝까지 훈련시킬 수 있다). 리워드는 RAG의 각 단계에서 리워드를 모아, 전체 시스템을 향상시키는 방향으로 학습이 진행된다.

DDR

기본적으로 RAG 시스템의 [[Markov Process]]와 유사하게, 처음에 들어온 쿼리부터 document를 retrieve하고, 그 결과를 다음 모듈들로 넘겨가면서 최종적으로 답변을 내놓게 된다. 어떠한 일련의 과정이라고 볼 수 있다. 물론 Modular RAG 등에서는 여러 모듈들이 반복적으로 사용되기도 하는데, 이것도 하나의 인퍼런스를 생각해서 펼쳐보면 일련의 [[Markov Process]]라고 할 수 있겠다.

Pasted%20image%2020250507151650 이런 식으로 여러 모듈들을 거쳐서 최종적인 결과가 나오게 되는 것이 통상적인 RAG 구조이다.

그러면 중간의 각 모듈들에 있어서 리워드를 어떻게 줄 것인가? 다양한 방법이 있겠지만 DDR은 아래와 같이 리워드를 준다.

DDR에서의 리워드

위의 RAG 구조에서, 리랭커의 리워드를 DDR 방식으로 구해보자.

  1. 리랭커에서 리랭킹을 수행한 후, 재정렬된 문서를 output으로 내보낸다.
    1. 만약 하이퍼 파라미터 조정, 리랭커 종류 바꾸기 등 리랭커를 최적화할 수 있다면, 여러 output들을 내보낼 수 있다.
  2. 그 재정렬된 문서들을 활용해서, 그 뒤의 모듈들을 차례대로 실행한다 (필터 -> compressor -> LLM)
    1. 리랭커의 여러 output들에 대해 각각 실행될 것이다.
  3. 마지막으로 나온 LLM의 답변을 평가한다.
  4. LLM 답변의 평가 결과가 곧 리랭커의 리워드가 된다.

즉, 해당 모듈의 리워드는 해당 모듈의 결과를 다음 모듈들에 넣어 최종 결과의 평가 값이 곧 리워드가 된다. 일반화하면 다음과 같다.

모듈 VtV_t를 최적화하려고 한다면, VtV_t에서 여러개의 output들을 구한다. (이것을 yt~\tilde{y_t}라 하자) 그러면 Vt+1:TV_{t+1:T}를 통과해서 나온 결과인 yTy_T를 구하고, 이 yTy_T의 평가 결과 (S(yT)S(y_T))가 리워드가 된다.

r(x,yt~)=S(yT)r(x, \tilde{y_t}) = S(y_T)

DDR의 최적화

최적화를 위해서는 [[DPO]]를 활용한다. 이를 활용한 loss 함수를 보면 다음과 같다.

L(Vt;Vtref)=E(x,y+~,y~)D[log σ(βlogVt(yt+~x)Vtref(yt+~x)βlogVt(yt~x)Vtref(yt~x))]\mathcal{L}(V_t ; V_t^{ref}) = - \mathbb{E}_{(x, \tilde{y^+}, \tilde{y^-}) \sim \mathcal{D}} [ \log \ \sigma (\beta \log \frac{V_t(\tilde{y_t^+} | x)}{V_t^{ref}(\tilde{y_t^+} | x)} - \beta \log \frac {V_t(\tilde{y_t^-} | x)}{V_t^{ref}(\tilde{y_t^-} | x)} ) ]

DPO 손실 함수와 사실상 같다는 것을 쉽게 알 수 있다. yt+~\tilde{y_t^+}는 리워드가 최대인 샘플이고, yt~\tilde{y_t^-}는 리워드가 최소인 샘플이다.

어떻게 적용하는가?

1. Knowledge Refinement 모듈 훈련

여기서는 우리가 흔히 말하는 Retrieval 모듈 (VectorDB 등)에 대한 훈련은 진행하지 않고, LLM 에이전트 기반 모듈들에 대한 튜닝만 진행된다. 이 Knowledge Refinement 모듈 (이하 KR 모듈)은 LLM 기반의 passage reranker라고 보면 된다. 이 KR 모듈은 만약 쿼리와 단락이 관련있다면 YES, 관련이 없다면 NO를 내뱉도록 한다.

이제 여러 단락들에 대하여 모두 리워드를 계산한다. (모두 관련 있다고 가정하고, 다음 모듈들을 사용해 대답을 생성한 후 평가한다.) 여러 단락 중에 가장 리워드가 높은 것을 positive sample (yt+~\tilde{y_t^+}), 가장 낮은 것을 negative sample (yt~\tilde{y_t^-})로 지정하면 위의 loss 함수에 적용할 수 있다.

2. Generation 모듈 훈련

실제로 답변을 생성하는 LLM을 말한다. 이것을 어떻게 훈련할까?

첫 번째 답변 샘플으로는 KR 모듈까지 통과해서 필터링 된 단락들을 쿼리와 함께 넣어 답변을 생성한다. 두 번째로는 단락 없이 쿼리만 넣어 답변을 생성한다. 이제 두 답변에 대하여 리워드를 계산하고, 더 높은 리워드가 positive sample이 되고, 낮은 샘플이 negative sample이 된다.

이 뜻은, 만약 retrieve된 단락을 아예 이용하지 않는 경우가 더 높은 리워드를 얻는 경우, 아예 이용하지 않도록 훈련이 된다는 뜻이다. 이를 통해서, LLM의 parametric 지식과 retrieve가 된 단락의 지식 간에 충돌이 일어나는 현상을 줄일 수 있다.

실험 결과

Pasted%20image%2020250507160114

Related reading

같이 읽으면 좋은 프로젝트 로그와 연구 노트를 이어서 탐색해보세요.

  • Measuring and Enhancing Trustworthiness of LLMs in RAG through Grounded Attributions and Learning to Refuse ICLR 2025 Oral 논문 원문 들어가며 RAG를 만드는 분들은 하나같이 LLM 에 대한 걱정을 많이 할 것이다. 특히, 보안이 중요한 문서로 RAG 시스템을 구축할 때에는 오픈소스 모델을 사용할 수 밖에 없고...
  • MemoRAG - 기억하는 모델을 만들자 요약 인간은 공부를 어떻게 하는가? 교과서 등에 있는 내용을 학습하며 기억하고, 정확한 정보가 필요하다면 나중에 교과서를 찾아본다. 근데 RAG는? 공부는 안하고 매번 찾아본다. 공부를 안했으니 잘 찾을리가 없다!...
  • Multi-field Adaptive Retrieval ICLR 2025 Spotlight 논문 링크 논문을 보기 전에 = [[Hybrid RRF & Hybrid CC]], [[Hybrid Retrieval의 가중치. 아무 값이나 쓰고 있나요]] RAG 및 Informa...
  • Promptriever 논문 링크 ICLR 2025 Poster 논문의 아이디어 LLM은 여러 프롬프트를 이용하여 LLM에게 다양한 task를 시키거나 명령을 수행하게 할 수 있다. 프롬프트 엔지니어링이 가능하다는 것이 현대 LLM의 발전...