NLP Trends: 지식 업데이트

SeongGyun Hong·2025년 1월 7일

NaverBoostCamp

목록 보기
63/64

1. LLM 자체는 과거에 멈춰있다.

  • LLM은 최신 정보를 그 자체로는 알 수가 없다.
    따라서 변화해가는 지식을 물으면 틀릴 확률이 높다.

과거 데이터로 학습한 모델이 현재 정보를 모르면 실제 정확도가 차이가 크게 날까?

Temporal alignment가 존재하며, 시간이 지날수록 틀어지게 된다. 학습한 기간과 평가 기간이 멀어질 수록 대조군 모델 대비 Perplextity가 증가하는 것을 확인

그러면 매번 새로운 데이터를 학습하면 되지 않나요?

  • 여러 태스크를 순차적으로 배우는 경우에, 앞선 태스크에서 학습한 정보를 잊어버리게 된다.
  • 예시:
    멀티모달 모델이 CIFAR10 이미지 분류 문제에 대해서 학습한 뒤에, MNIST 태스크에 대하여 추가 FIne-tuning을 하게 되면 앞에서 맞췄던 문제도 못 맞추게 된다.

최신 지식을 습득하면서도 과거 정보를 잊지 않게 하는 것이 중요하구나!

그래서 나온 방안
1. Continual Learning
과거 정보를 까먹지 않으면서 LLM을 추가 학습시키는 방법
2. Retrieval-Augmented Generation
Prompt로 LLM에 추가 정보를 주는 방법

2. Continual Learning

  • 이전 학습 데이터를 까먹지 않으면서도 새로운 과제와 데이터에 최적화하는 방법!

  • 시기에 따라 변하는 데이터셋(wikidata에서 시기에 따라 변하는, 변하지 않는) 정보로 Perplexity 측정

  • 변한 정보만 학습한 Diff의 경우에 변하지 않는 정보에 대해서 Catastrophic forgietting 발생

  • Continual learning: Diff 대비 이전 정보를 기억하면서도 initial 대비 새로운 정보 또한 잘 학습

2.1 Regularization method

매개변수를 덜 바꾸자

  • 새로운 데이터에 대해서 모델을 학습할 때, 기존 매개변수에서 크게 차이나지 않도록 규제한다.
    • 예를 들어 기존 매개변수와의 L2 거리를 최소화하여 학습하는 것
    • 대표적인 방법: Elastic Weight Consolidation (EWC), Rec-Adam

2.2 Parameter expansion method

추가 매개변수를 학습하자

  • 원래 매개변수는 그대로 고정하고, 특정 지식/태스크를 다루는 모듈을 모델에 추가해서 학습하자.
    • 대표적인 방법: LoRA, K-Adapter

2.3 Rehearsal method

과거 학습 데이터를 함께 학습하자

  • 특정 과제를 Fine-tuning할 때 해당 Task-specific 데이터셋만으로 학습하지 말고, 사전 학습 자료를 Task-specific 데이터셋을 함께 학습해보자
  • 대표적인 방법: Mix-review Deep generative replay (DGR)

Mix-review

  • Fine-tuning 할 때 사전학습 데이터를 같이 학습
  • Weight decay (WD) 사전 학습 가중치로 L2 규제
  • 사전 학습 데이터의 Negative log-likelihood (NLL) 비교
    • WD: Fine-tuning할 수록 사전 학습 데이터의 NLL 상승
    • Mix-Review: Fine-tuning해도 사전학습 데이터의 NLL 유지

Continual Learning의 한계

하루마다 발생하는 일들 전부 기억하려고 매일 LLM을 훈련할 수는 없다.

  • 심지어 아무리 짧은 시간을 두더라도 그 짧은 시간의 간격이라는 Temporal misalignmnet를 피할 수 없다.
  • RLHF나 DPO로 fine-tuning 된 모델에 대해서 Continual learning을 한다?
    Causal LM에 미칠 영향을 예측하기 어렵다.

    그렇다면 학습시키지 않으면서 당자 일어난 일을 활용할 수는 없나?

    RAG

3. RAG: Retrieval-Augmneted Generation

  • 핵심
    텍스트를 생성함에 있어서 외부 정보를 Prompt로 제공하자.
  • 핵심개념
    현재 문맥과 상황에 알맞는 정보를 제공해야하므로, 이를 수행할 Retrieval이 중요하게 된다.
    • 인터넷 검색
    • Closed DB
    • 과거 생성 기록
      등을 넘겨주는 역할
  • Retrieval로 사용되는 대상들
    • TF-IDF / BM25
    • Sentence-BERT
    • Dense Passage Retrieval (DPR)
      주어진 테긋트에 대해서 고정된 크기의 벡터를 추출해준다.

방법

  1. 현재의 Context를 Query로 활용하고
  2. 문서 뭉치 중에서 가장 유사한 문서를 벡터 검색한다.
  • 관련 라이브러리: FAISS, Pinecone

    이외에도 그냥 상용 검색 엔진을 사용하거나
    자연어에서 SQL 생성하여 직접 DB를 검색
    또는 해당 사용자와의 대화기록을 불러오는 방법도 있다.

Naive RAG의 한계

RAG가 항상 정확도를 향상시키지는 못한다.

  • Retrieavl은 완벽하지 않기에, 적절하지 않은 무서를 참고할 수도 있고, 그 포함된 문서에 너무나 다양한 내용이 있는 경우에 이들은 일종의 Noise로 작용하게된다.
  • 또한 너무 유명한 사실은 오히려 LLM이 잘 안다.
  • 높은 Popularity를 가진 경우 리트리버를 안 쓰는 것이 더 정확하고
  • 낮은 Popularity를 가진 경우에 리트리버를 쓰는 것이 정확도가 더 올라가는 경우가 많다.

    학습때 이미 본 지식이 있다면, 리트리버를 사용하여 프롬프트로 문맥을 주더라도, LLM이 해당 문맥을 무시할 수도 있다.
    LLM의 Prior knowledge는 그만큼 강력하기 때문이다.
    본 문제에 대해서는 LLM이 Instruction을 잘 따르지 않는 문제로도 볼 수 있다.

심화 RAG

  • Retrieval로 하나의 Query에 대한 여러 문서를 들고오게 한 뒤에, 각 문서 기반으로 계산된 토큰 확률 값을 Marginalize하여서 하나의 텍스트를 생성한다.
  • Retrieval(Query encoder)GeneratorEnd-to-End로 학습

    GopherCite
    구글의 280B LLM
    구글 검색을 통해 질문과 관련된 웹페이지를 찾고, 해당 답에 대한 근거가 되는 문단을 함께 인용한다.

    • RLHF를 통해 해당 근거가 생성 답안을 뒷받침하도록 학습한다.
    • 유사 연구: WebGPT(OpenAI), BlenderBOt3(Meta)
profile
헤매는 만큼 자기 땅이다.

0개의 댓글