본문 바로가기

NLP

[Day4] 한권으로 끝내는 실전 LLM 파인튜닝 - 전체 파인튜닝 개념 & 데이터 준비

다음은 <한권으로 끝내는 실전 LLM 파인튜닝> 도서의 스터디 Day4 요약입니다.

3.1 _ 전체 파인튜닝 데이터 준비

3.1.1 전체 파인튜닝의 원리와 종류

(1) 파인튜닝이 필요한 이유

  • 파인튜닝 : 이미 학습되어 공개된 언어 모델(Pre-trained Language Model)을 특정 작업에 맞게 추가로 학습하는 것. 
  • 거대한 크기를 가진 LLM은 방대한 지식을 학습해 다양한 문제를 풀 수 있는 증력을 가지고 있음. (ex - Gemini, ChatGPT) 
  • 다만 전문적이고 특수한 분야에서 Hallucination 문제가 두드러짐.
  • 성능을 높이고자 하는 분야나 풀고자 하는 문제의 데이터로 추가학습 시 모델이 해당 분야에서 더 정확하고 신뢰할 수 있는 응답을 생성할 수 있음. 또한 특정 목적에 맞게 추가로 학습시키는 것 역시 가능하다. 
  • 처음부터 원하는 데이터로 학습시킨다면 가장 좋겠지만, LLM을 학습시키기 위해서는 수조 개의 단어 또는 수 테라바이트 텍스트 데이터를 필요로 한다. 작은 데이터로 학습 시 (~10GB) (1) 과적합, (2) 자연스러운 언어 생성 능력 부족 등의 문제가 발생한다. 따라서 이미 풍부한 지식을 학습한 언어 모델을 기반으로 특화 데이터로 추가학습(파인튜닝) 시킴으로써 기본적인 언어 능력은 유지하면서 특정 분야에 더 정확하고 깊이있는 지식을 가진 '전문 AI'를 만들 수 있다. 

(2) 파인튜닝의 종류

  • Full Fine Tuning : 모든 파라미터의 값을 업데이트 하는 ㅌ닝. 하지만 이 경우 모델이 이전 학습한 내용을 완전히 잊어버리는 catastrophic forgeting 문제가 발생할 수 있음. 또한 파라미터 수가 많은 큰 모델을 전체 파인튜닝 할 경우 시간과 비용이 많이 소요된다. 
  • PEFT (Parameter-Efficient Fine-Tuning) : 매개변수 효율적 파인 튜닝. 모델의 파라미터 전체가 아닌 일부만을 새로 학습시키는 방식임. 이 방법 사용 시 전체 모델 학습보다 시간과 비용을 크게 줄이면서도 더 나은 결과를 얻을 수 있음. 
    • Adapter Tuning : 기존 LLM에 작은 규모의 신경망을 새롭게 추가하는 방식
    • Prompt Tuning : 모델 입력 텍스트에 특별한 지시사항을 추가하는 방식. 모델의 작동을 원하는 방향으로 조절 가능. 보다 자세한 내용은 https://blog.harampark.com/blog/llm-prompt-tuning/ 를 참고하자. 
    • LoRA(Low-Rank Adaptation) : PEFT 방식 중 가장 많이 사용되는 fine tuning 방식. 작은 크기의 두 행렬을 곱한 결과를 원래 행렬에 더하는 방식으로 모델을 효율적으로 조정한다. 모델의 파라미터 수를 크게 늘리지 않으면서도 효과적으로 모델의 성능을 향상시킬 수 있음. 이론적 부분이 매우 흥미롭기 때문에 추후 논문 리뷰 예정.

(3) 파인튜닝을 할 때 주의할 점

  • 과적합의 위험 : 모델이 데이터에 지나치게 최적화되어 새로운 데이터에 대한 일반화 능력이 떨어질 수 있음. 
  • Catastrophic Forgetting : 모델이 이전에 학습한 일반적인 지식을 잃어버리는 현상. 새 작업에 대한 성능은 향상되지만 기존 가중치에 저장되어있던 이전 지식이나 능력을 손실하게 됨. 
  • 막대한 연산 자원과 시간 : 계산 복잡도가 모델 크기에 비례해 증가
  • 데이터의 품질과 양 : Garbage In, Garbage Out. 데이터가 부적절하거나 양이 충분치 않을 경우 모델의 성능 향상을 기대하기 어렵다. 
  • 편향 : 데이터에 편향이 존재하면 모델의 출력에 반영되어 윤리적 문제를 일으킬 수 있다. 

3.1.2 다양한 태스크와 데이터셋

  • Next Token Prediction/텍스트 생성 : 입력 텍스트 다음에 이어질 단어나 문장을 예측하는 테스크. 
    • dataset : Common Crawl, OpenWebText, Korean Common Crawl 등 텍스트 생성 task 
  • Conversational Task : 대화형 태스크는 사람과 자연스럽게 대화를 나눌 수 있도록 하는 작업. 
    • dataset : (1) 다양한 크롤 텍스트를 대화 형식으로 변환 (2) 실제 사람들 사이의 대화를 수집. 이 과정에서 페르소나 개념을 도입하는 것이 중요. MultiWOZ, ConvAI, DailyDialog, Persona-Chat, Korean Dialog 등
  • Question Answering : 질의응답 태스크는 질문에 대해 정확한 답변을 제공하는 작업. 
    • dataset : 질문-답변 쌍으로 구성됨. 다양한 난이도, 주제의 질문을 수집하고 정확한 답변을 제공하며 답변의 출처, 추가 설명도 함꼐 기록해야 함. SQuAD, NaturalQuestions, TriviaQA, KoQuAD 등 
  • Summarization : 요약 태스크, 긴 글 핵심 내용을 간단하게 추려내는 작업. 
    • dataset : 원본 텍스트 - 요약문이 쌍으로 주어져야 함. (1) 추출적 요약 (2) 추상적 요약 2가지 모두를 포함하는 것이 좋음. CNN/Daily Mail, XSum, 문서 요약 텍스트, 논문자료 요약 등 
  • Machine Translation : 기계 번역. 
    • dataset : 원본 언어의 문장 - 대응 번역된 문장 쌍 병렬 코퍼스 데이터셋이 필요함. AI Hub Korean-English Parallel Corpus 등 
  • Paraphrasing : 문장 본래의 의미를 유지하며 다른 방식으로 표현하는 과정. 번역과 유사하지만 같은 언어 안에서 수행됨.
    • dataset : 원본 문장 - 다르게 표현한 문장 짝 데이터가 필요, 각 문장에 대해 여러 다른 표현들도 함께 수집해야 함. PAWs, Quora Question Pairs, Korean Paraphrase Dataset 등
  • Code Generation : 코파일럿이 대표적. 프로그래밍 코드와 그에 관한 설명이 짝을 이루는 데이터가 필요함. 난이도, 언어를 다양하게 수집해야 하며 반드시 일반적인 언어로 된 설명을 함께 작성해야 함. (무엇을 목적으로 하는 코드인지, 어떻게 작동하는지, 어떤 주요 알고리즘을 사용하는 지 등)
  • RAG(Retrieval-Augmented Generation) : 검색 증강 생성은 외부에서 정보를 찾아 이를 활용해 답변을 만드는 작업. 이는 방대한 지식 저장소, 질문-답변 쌍, 검색 결과 활용 사례 등의 자료가 필요하다. 대규모 문서 모음을 효과적으로 사용하기 위해 Chunk 단위로 자르고 (문장/단락 단위) 이를 벡터 데이터베이스에 저장한다. 

3.1.3 데이터 전처리

  • 텍스트 전처리 : 자연어 처리를 위해 원본 텍스트를 컴퓨터가 더 쉽게 분석할 수 있는 형태로 바꿈. 
  • Data Cleansing : 중복 데이터 제거, 오타 보정, 빠진 정보를 채우기, Outlier 데이터 처리, 개인정보 보호, 분석하기 좋은 형식으로 데이터 변형 등을 우선 진행.
  • Tokenizing : 토큰화는 텍스트를 의미있는 작은 단위로 나눔. 
  • Normalization : 정규화를 통해 인공지능 학습에 용이한 형태로 텍스트를 일관된 형식으로 만듦. ex) 어간 추출, 표제어 추출, 불용어 제거 등
  • 다만 최근 인공지능 기술이 발전하며 어간 추출/불용어 제거 과정을 거치지 않아도 모델이 문맥을 적절히 이해하고 처리할 수 있게 됨. 또한 과거 불용어라 여겨졌던 단어들이 실제 중요한 의미 정보가 담겨있다는 사실이 밝혀짐. 따라서 현재는 불용어를 따로 제거하지 않는 추세라고 한다.