생각하는 아져씨

Instruction Fine-tuning과 Catastrophic Forgetting 본문

Machine & Deep Learning/Generative AI

Instruction Fine-tuning과 Catastrophic Forgetting

azeomi 2023. 9. 13. 10:00

앤드류 응 교수님의 강의를 듣고 정리 및 공부한 글임을 알려드립니다.

Generative AI with LLMs In Generative AI with Large Language Models (LLMs), created in partnership with AWS, you’ll learn the fundamentals of how generative AI works, and how to deploy it in real-world applications.

 

오늘은 Single-Task와 Multiple-Task에서 Fine-tuning 하는 과정에 대해 공부해보려고 합니다.

LLM은 다양한 Task에도 잘 동작하긴 하지만, 내가 관심 있는 분야 또는 아주 특정한 분야에 한해서 좀 더 좋은 성능을 내고 싶다면, Fine-tuning을 진행하면 됩니다. 👍

예를 들어, LLM의 “요약” 성능을 개선시키고 싶다면, 관련 Instruction Prompts dataset으로 파인튜닝 하는 방법을 사용하면 됩니다. 신기하게도 이때 사용되는 데이터셋은 적은 수여도 좋은 결과를 얻을 수 있습니다. ex) 500~1000개의 예제.

하지만 Only 요약 Task에 대해 파인튜닝 하는 것처럼 단 하나의 Task(Single Task)에 대한 파인튜닝에는 잠재적인 단점이 존재합니다. 바로 이것이 Catastrophic Forgetting(치명적인 망각) 입니다.

 

Catastrophic Forgetting

모델이 현재 주어진 데이터를 학습할 때 기존에 배운 정보를 잃는 현상을 Catastrophic Forgetting, 치명적인 망각이라고 부릅니다.

보통 오리지널 LLM의 weight가 full-fine tuning을 진행하면서 update 되기 때문에 발생합니다. 그렇기 때문에 파인튜닝을 진행한 Single-Task에 대해서는 좋은 성능을 보이지만, 다른 Task에서는 성능이 떨어지는 현상을 확인할 수 있습니다. 🥲

예를 들면, Sentiment Analysis 성능을 개선시키기 위해 파인튜닝을 진행했더니?! → Entity Recognition은 잘하지 못하게 되는 것!

그럼 어떻게 이 현상을 피하면서 좋은 성능의 모델을 얻을 수 있을까요?

  1. Catastrophic forgetting 현상이 다루고자 하는 use case에 영향을 미치는지/ 아닌지 여부를 결정하는 것이 중요합니다. 👉 사실, 다른 Task는 상관없고 난 오직 Single Task 성능만 중요하다! 하면 Generalization을 포기해도 괜찮습니다.
  2. 만약 Multiple Task에 대해서도 Generalization 성능을 유지하거나 나아지길 원한다면, 한 번에 multiple task에 파인튜닝 하는 방법도 고려할 수 있습니다. 👉 물론 이 경우에는 single task의 파인튜닝과 달리 더 많은 데이터셋이 필요합니다. ex) 50 ~ 100,000개
  3. PEFT를 수행하는 방법도 존재합니다. PEFT는 full fine-tuning을 하는 것 대신 효율적으로 파라미터를 파인튜닝 하는 방법입니다. 👉 사전학습된 weights가 대부분 변경되지 않기 때문에 Catastrophic forgetting에 견고합니다. 이 부분은 다음 주에 공부해보려고 합니다.

그렇기 때문에 오늘은 2번에 대해 자세히 들어가 보겠습니다. 😁

 

Multi-task Instruction Fine-Tuning

Multi-task 파인튜닝은 single task 파인튜닝의 확장입니다. 그래서 학습 데이터셋은 여러 Task에 대한 Input-Ouput 예제들로 구성되어 있습니다.

예를 들면, Summary, Review Ratings, Code translation, Entity recognition 등 같은 Task가 포함되어 있습니다.

이렇게 다양한 Task dataset에 대해 학습을 하면 → Single Task 파인튜닝 시 발생하는 “Catastrophic Forgetting” 문제를 방지할 수 있을뿐더러 모델의 성능 개선 효과도 얻을 수 있습니다.

이제 이렇게 얻은 Instruction tuned 모델은 여러 가지 Task에 대한 명령도 잘 답하게 되는 것이죠!

하지만 이런 종류의 데이터가 아주 많이~~ 필요하다는 게 단점인데, 이런 데이터셋을 구축만 한다면 더 좋은 성능의 Multi-task Fine tuning 모델을 얻을 수 있으므로 데이터셋을 구축하는 것 자체가 LLM의 발전을 이끄는 가치 있는 일이라고 볼 수 있습니다.

 

Instruction Fine-tuning with FLAN

Multi-task에 대해 Instruction fine tuning을 진행한 연구에 대해서 살펴보려고 합니다.

FLAN(Fine-tuned Language Net)은 자연어 Instruction set과 one-shot example을 데이터셋으로 구성하여 다양한 모델을 fine-tuning 해 성능을 높인 연구입니다.

논문은 여기서 확인할 수 있습니다.

FLAN의 방식을 따라서,

  • FLAN-T5는 T5 foundation 모델의 Instruction fine tuning 버전이고 → 논문
  • FLAN-PALM은 PALM foundation 모델의 flattening struct 버전입니다.

 

그중 FLAN-T5는 총 146개의 Task, 473개의 dataset에 대해 파인튜닝을 진행했습니다. 😮

여러 가지 Task 중 Summarization에는 “SAMSum” 데이터셋을 사용했다고 합니다. 약 16,000개의 메신저 대화와 그에 대한 요약이 포함되어 있는 데이터로, 대화는 영어에 능통한 언어학자들이 작성하고 기록했고, 언어학자들은 실제 메신저 대화에서 어떤 주제가 차지하는 비중을 반영하여 매일 작성하는 것과 유사한 대화를 만들도록 요청받았다고 합니다.

그리고 요약은 사람들이 대화에서 3인칭으로 이야기한 내용을 간결하게 요약한 것이라고 하네요. 👉 SAMSum 데이터셋 살펴보기

 

samsum · Datasets at Hugging Face

"Ellen: Hi, honey, sorry I've been so unreachable lately, the redecoration is a nightmare. Kate: Don't worry, sweetie, what's wring with the redecoration? Ellen: Well, nothing's wrong per se, it's just it's taking so much time, I barely sleep nowadays... K

huggingface.co

 

이 데이터셋을 템플릿과 함께 프롬프트로 전달해서 학습시키게 됩니다.

"samsum": [
	("{dialogue}\n\Briefly summarize that dialogue.", "{summary}").
	("Here is a dialogue:\n{dialogue}\n\nWrite a short summary!", "{summary}"),
	("Dialogue:\n{dialogue}\n\nWhat is a summary of this dialogue?", "{summary}"),
...
..
]

이렇게 다양한 Dialog Summary에 대해 파인튜닝 함으로써 FLAN-T5는 우수한 기능을 가질 수 있게 됩니다.

이제 여기서 특정 Use case에 대해 더 좋은 성능을 얻고 싶다면?! 관련 데이터셋을 활용해 학습하면 됩니다.

만약, 챗봇을 통한 고객과의 대화 데이터를 요약하고 싶다면 → 비슷한 데이터셋을 활용해 대화 패턴을 학습할 수 있도록 하는 것입니다.

이런 식으로 기업의 내부 데이터를 활용해서 기업의 고객 지원 애플리케이션 채팅서비스 같은 것들을 서비스할 수 있게 됩니다. 👍