LLM의 Knowledge Update
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를 통해 해당 근거가 생성 답안을 뒷받침하도록 학습한다.