끄적

LLM의 Knowledge Update

uvumbu 2025. 1. 9. 10:24

 

 

 

1. Temporal Misalignment

LLM이 새로운 지식을 배우지 못해 발생하는 문제들

 

LLM은 최신 정보를 모른다.

  • 고정된 데이터에 대해서 학습된 모델이기 때문에 시간에 따른 새로운 지식을 학습하지 못한다.

 

과거 데이터로 학습한 모델이 현재 정보를 모른다는 것은 실제 정확도에 얼마나 영향을 끼칠까?

  • Temporal alignment가 존재하며, 시간이 지날수록 틀어진다.

 

그렇다면 매번 새로운 데이터를 학습하면 안될까?

  • Catastrophic forgetting 문제가 있다.

 

Catastrophic forgetting란?

  • 단순하게 여러 태스크를 순차적으로 배울 경우, 앞선 태스크에서 학습한 정보를 잊어버리는 것이다.

따라서 최신 지식을 학습하면서 과거 정보를 기억하는 것 또한 중요하다.

(ex 역사적 사실이나 과학적 사실, 등을 잊지 않고 새로운 지식 들어올 때 갱신하는 방법이 필요함)

 

대표적인 해결 방법

  • Continual Learning : 과거 정보를 잊지 않으면서 LLM을 추가로 학습
  • Retrieval-Augmented Generation : Prompt로 LLM에 추가 정보를 주기

 

 

 

 

2. Continual Learning

이전 학습 데이터를 잊지 않으면서 새로운 과제

Continual Learning은 크게 보면 2가지 태스크가 있다.

  • 새로운 Domain의 데이터에 대해 Continual Learning
  • 시간에 따라 변하는 데이터에 대해 Continual Learning

대표적인 세부 방법론

  • Regularization method : 매개변수를 덜 바꾸자.
  • Parameter expansion method : 추가 매개변수를 학습하자.
  • Rehearsal method : 과거 학습 데이터

 

(1) Regularization method  : 매개변수를 덜 바꾸자.

LM에 있는 파라미터들, MLP 레이어에 있는 weight matrix나 attention matrix에 있는 key, query, value, 등이 LLM의 정보를 나타낸다고 볼 수 있다.

달리 말하면 이런 매개변수들을 덜 바꾼다면, 덜 잊지 않을까? 라는 생각에서 출발한다.

 

새로운 데이터에 대해서 모델을 학습할 때, 기존 매개변수에서 크게 차이 나지 않도록 규제한다.

(예시 : 기존 매개변수와의 L2 거리를 최소화하여 학습하는 것)

 

대표적인 방법 : EWC, Rec-Adam

 

 

(2) Parameter expansion method : 추가 매개변수를 학습하자.

원래 있던 LM에서 MLP레이어나 K, Q, V를 바꾸지 말고, 고정시킨 다음에 추가적인 매개변수를 달아서 그 매개변수를 학습하자는 것이다.

 

대표적인 방법 : LoRA, K-Adapter

 

 

(3) Rehearsal method : 과거 학습 데이터

특정 과제를 Fine-tuning 할 때 해당 Task-specific 데이터셋만으로 학습하지 말고, 사전 학습 자료를 Task-specific 데이터셋을 함께 학습해보자.

 

대표적인 방법 : Mix-review, Deep generative replay (DGR)

 

Continual Learning의 한계

LM에서 Continual Learning는 비주류다.

Continual Learning 는 완벽한 방법이 아니기 때문이다.

  • 하루마다 발생하는 일들을 기억하기 위해 매일 LLM 을 Continual Learning하는 것은 많은 자원과 시간이 소모된다.
  • 그리고 우리가 짧은 시간 간격을 두고 학습을 한다 하더라도 Temporal misalignment는 피할 수 없다.
  • RLHF나 DPO로 Fine-tuning된 모델을 Continual Learning하는 것은 예측할 수 없는 결과를 초래할 수 있다.

그럼 여기서 드는 생각은 모델을 학습 시키지 않고 당장 방금 일어난 일을 활용하는 방법이 없을까? 하는 것일거다.

 

그 방법이 바로 RAG(Retrieval-Augmented Generation)

 

 

3. RAG(Retrieval-Augmented Generation)

LLM을 매번 새로 학습하지 않고, 외부 데이터를 활용하는 방법론이다.

텍스트를 생성할 때, 외부 정보를 Prompt로 제공하면 어떨까?

  • 최신 뉴스 등 시간에 따라 변하는 정보를 제공 >> Temporal alignment 개선
  • 주어진 질문과 관련된 정확한 정보를 제공 >> Hallucination 개선

현재 문맥/상황에 대해 알맞은 정보를 제공할 필요가 있다. >> Retrieval

  • 인터넷 검색
  • Closed DVB
  • 과거 생성 기록

 

Retrieval 방법들

TF-IDF / BM25

  • 단어 빈도를 활용하여 두 텍스트의 유사도 측정

Sentence-BERT

  • BERT 기반 인코더를 학습하여 문장의 유사도 학습

Dense Passage Retrieval (DPR)

  • 주어진 Query와 Passage의 유사도를 측정
  • Query와 Passage를 처리하는 2개의 인코더
    • Query와 관련 있는 Passage라면 유사도 상향
    • Query와 관련 없는 Passage라면 유사도 하향

위 방법들 모두 공통적인 목적은 주어진 텍스트에 대해서 고정된 크기의 벡터를 뽑아내겠다는 아이디어다.

 

 

그 외 가능한 Retrieval 방안들

  • 상용 검색 엔진 활용
  • 자연어에서 SQL을 직접 생성하여 직접 DB 검색
  • 해당 사용자와의 대화 기록 불러오기

 

위 방법들을 통해 Retrieval한 결과를 Prompt에 제공함으로써  LLM의 매개변수는 건드리지 않고, In-context learning으로 생성 결과를 향상할 수 있다.

 

 

Naive RAG의 한계

(1) RAG가 항상 정확도를 향상시키지는 않는다.

  • Retrieval은 완벽하지 않기에 적절치 않은 문서를 참고할 수도 있다.
  • Retrieval된 문서에 다양한 내용이 포함되어 있는 경우, 이들은 노이즈로 작용하기도 한다.
  • 너무 유명한 사실은 오히려 LLM이 더 잘 안다.

(2) 학습 때 본 지식으로 인해 LLM이 문서를 안 볼 수도 있다.

  • LLM의 사전 지식은 강력하다. >> Context와 사전 지식이 상충될 경우 Context를 무시할 수도 있다.
  • 단순히 In-context learning으로 정보를 제공할 경우, Context를 따르게 하는 걸 강제하기는 어렵다.
  • 해당 문제는 LLM이 Instruction을 잘 따르지 못하는 문제로도 볼 수 있다.

 

이런 한계들을 극복하기 위해 아래와 같은 방법들이 제시됐다.

 

심화 RAG 방법론들

Retrieval-Augmented Generation(RAG)

  • 모델 이름이 RAG로 여기서 Retrieval-Augmented Generation라는 단어를 처음으로 제안했다.
    • 현재는 RAG라는 단어의 의미가 확장되어 Retrieval 을 활용하는 생성을 통칭하게 된다.
  • Retrieval 로 한 질의에 관한 여러 문서를 들고 온 뒤, 각 문서 기반으로 계산된 토큰 확률 값을 Marginalize하여 하나의 텍스트를 생성한다.
  • Retrieval (Query encoder)와 Generator를 End-to-End로 학습한다.

 

위 방법은 End-to-End로 학습한다는 점 때문에 이전의 문제점이라고 봤던 Instruction을 잘 따르지 못하는 부분을 고치는 것에 주목했고, 그 결과가 GopherCite다.

 

GopherCite

  • GopherCite: 구글의 280B LLM
  • 구글 검색을 통해 질문과 관련된 웹페이지를 찾고, 해당 답에 대한 근거가 되는 문단을 함께 인용한다.
  • RLHF를 통해 해당 근거가 생성 답안을 뒷받침하도록 학습한다.