항해 플러스 AI 후기 7주차 WIL

1. 이번 주 목표

  • 지난 커리큘럼 챗봇 형태의 서비스를 구현해보는 것 커리큘럼에 이어, 서비스에 맞는 fine-tuning을 적용해본다.

  • 개인적으로 가성비를 어떻게 하면 최대한 올릴 수 있는지 고민해본다.


2. 학습 내용

요새 사용하고 있는 LLM들이 너무 좋아 일반적인 문제를 굉장히 잘 해결한다. 가령 리팩토링을 해달라던가, 테스트코드와 시나리오를 작성해달라던가 하는 task들은 솔직히 사람보다 낫다.

하지만 어떤 문제에 deep-dive 할 수록, 급격하게 답변의 퀄리티가 저하되는 것을 경험하곤 했다. 특히 인터넷에 공개된 지식들이 적을수록 더 심한 경향을 보였다.

그걸 보간하기 위해 Word embedding도 해보고 few-shot도 함께 적용해보고 했는데, 토큰을 금방금방 사용해... 카드 요금이 많이 발생했다.

위에 나온 문제들을 요약하면 다음과 같다.


  • Domain knowledge의 부족: 일반적인 LLM은 말 그대로 일반적인 text에 대한 질의응답을 위해 만들어졌다. 따라서 지식이 부족해 domain specific한 task를 잘 할 수 없다.

  • 토큰 비용: context 내에서 알려줘야 되는 정보가 많을 수록 토큰이 많이 소모된다.

위의 문제들은 대부분이 겪고 있는 문제들이고, 이를 좀 줄이기 위한 방법들을 정리해본다.


1. LLM Pre-training

일반적으로 LLM은 다음과 같은 두 단계를 거쳐서 완성된다.

  1. pre-training: LLM의 일반적인 text 이해 능력을 높이는 단계. Text corpus는 평문으로 구성되며, 이 과정을 거친 LLM은 아직 사용자의 요청에 따른 text 생성과 같은 섬세한 작업을 수행할 수 없다.

  2. instruction-tuning: 사용자의 요청에 따라 text를 생성할 수 있도록 거치는 단계. 질문 - 답변 형식의 data로 구성되어 있다.


1.1 Next Token Prediction

pre-training은 gpt의 학습방법을 그대로 따라가기 때문에, next token prediction을 다시 복습할 필요가 있다.

Next token prediction은 문장이 주어졌을 때 다음으로 올 token을 예측하는 task이다. 이러한 task를 학습하기 위해서는 다음과 같은 전처리가 필요하다.


  1. Text corpus 생성: 일반적으로 text 형태의 data는 여러 개의 독립적인 문장, 또는 독립적인 문서들로 구성되어 있다. GPT를 학습하기 위해서는 우리가 가지고 있는 문장 또는 문서들을 하나의 거대한 text 더미로 만들어야 한다.

  2. 일정한 단위로 자르기: 하나의 거대한 text 더미인 corpus를 쪼개는 작업을 진행한다. 한 번의 next token prediction을 진행할 때 input으로 들어갈 수 있는 text는 메모리 이슈 때문에 유한해야한다. 그래서 이 길이를 hyper-parameter로 설정한 후, corpus를 설정한 단위로 쪼갠다.

  3. Next token prediction data 생성: 마지막으로 쪼개져서 나온 각 text들을 next token prediction data로 만든다. Label은 input text의 두 번째 token부터 마지막 token까지가 되며, attention mask를 같이 준다.


위의 전처리 과정을 통해 나온 data를 trainer에게 전달하면, 티가 전혀 나지 않지만 학습이 진행된다. 그 이유는 간단한데, 모래사장에 모래를 한컵만 더해서 그렇다. 이렇게 데이터가 적을때에는 instruction-tuning이 적격이다.


2. **LLM Instruction-tuning

HuggingFace에서 Gemma를 찾아보면 다음과 같이 it라는 suffix가 있는것과 없는것으로 나뉜다. it가 붙은것은 instruct-tuning이 진행된 모델이다.


Gemma3도 찾아봤는데 Gemma3 부터는 default가 instruction-tuning을 진행한 모델인 것 같다. it suffix가 붙지 않은게 없다... 대신 pt라는 suffix가 등장해 정보를 조금 찾아보았는데, pre-trained의 줄임말이였다. 명확하게 구분해주기 위함인듯 하다.


2.1 Aligning LLMs

일반적으로 LLM은 pre-training과 SFT를 학습할 때 많은 양의 일반적인 data를 활용한다. 계속 언급해왔듯 이런 general한 knowledge는 모든 상황에 도움이 되지는 않는다.

LLM이 특정 능력만을 활용하도록 하기 위한 기법들을 공유한다.


2.1.1 Preference data

LLM이 특정 능력만을 활용하도록 하기 위해 일반적으로 preference data를 준비한다. Preference data는 다음과 같이 이루어진다.


  • 질문: SFT와 마찬가지로 instruction이 주어진다.

  • 두 가지 답변: 주어진 instruction에 대해 LLM에 나올 수 있는 답변 두 가지가 주어진다.

  • 더 선호되는 답변: 두 가지 답변 중, 더 선호되는 답변이 무엇인지 labeling한다.


즉, 일반적은 SFT data에서 답변이 두 가지, 그리고 선호되는 답변에 대한 labeling이 추가된 형태이다.


2.1.2 RLHF: Reinforcement learning with human feedbacks

RLHF는 SFT로 instruction-tuning이 완료된 LLM이 있을 때, preference data를 사용하여 좀 더 사람들이 선호하는 답변을 내놓도록 학습하는 방법 중 하나이다. RLHF는 다음과 같이 진행된다.

  1. Reward model 학습: 두 문장이 주어졌을 때, 어떤 것이 선호되는지 binary classification을 진행하는 reward model을 주어진 preference data로 학습한다.

  2. LLM align: 위에서 학습한 reward model을 가지고 강화학습을 통해 LLM이 선호되는 답변을 내놓도록 align한다.


RLHF의 핵심은 두 문장 중 사람들이 더 선호하는 문장을 구별하는 reward model을 preference data로 학습한다는 것이다. 이후는 기존의 강화학습 알고리즘을 그대로 활용하면 되기 때문이다.

실제로 RLHF를 거친 LLM은 실험결과 단순히 SFT만으로 학습된 GPT와 비교한 benchmark는 다음과 같다.


  • Correctness: 좀 더 정확한 답변을 내놓음

  • Controllable: 답변을 내놓을 때 prompting를 통해 주어진 조건들을 잘 지킴

  • Hallucination: 답변에서 hallucination이 줄어듦


2.1.3 DPO: Direct preference optimization

DPO는 preference data를 align하는 또다른 방법론이다. RLHF 같은 경우에는 reward model을 학습하고, 이를 가지고 LLM을 align했다. DPO는 여기서 수학적인 테크닉을 활용하여 preference data를 가지고 다음 loss로 LLM을 학습하면 reward model을 굳이 따로 학습하지 않아도 같은 효과를 낼 수 있는 것을 밝혔다.


고 하는데, 솔직히 뭔말인지 아직 모르겠다.


3. 느낀점

  • 뭘 하려고 하면 기존에 느끼고 있던 문제(양질의 데이터가 없음)가 계속 순환되고 있다.

    • 너무 domain specific한걸 계속 시도하려고 했기 때문에 딱히 좌절할만한 포인트는 아니긴 하지만... 결국 약간의 비용을 들이지 않으면 현재는 힘들다는것을 깨달았다. 지금 힘들다는것을 깨달은 것도 자산이다.

    • 앞으로 어떻게 할지에 대해 초점을 잘 두면 될 것 같다.


#항해99 #항해플러스AI후기 #AI개발자 #LLM

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2025년 5월 26일 오후 2:19

댓글 0