LLM을 사용하는 방식은 크게 두 가지로 나뉩니다. OpenAI나 Google 제공하는 API를 사용하는 것이 한 가지이고, Llama 같은 오픈소스 LLM을 사용하는 것이 다른 한 가지입니다. 물론 바닥부터 나만의 LLM을 만드는 방법도 있지만 현실적으로 이렇게 하기에는 많은 어려움이 있습니다.
비용, 보안, 나만의 시나리오 등의 이유로 오픈소스 LLM 사용하기로 했다고 가정해 보겠습니다. 이 길로 들어섰을 때 처음 마주하는 어려움 중 하나는 모델이 너무 많다는 점입니다. Llama, Gemma 등 수많은 오픈소스 LLM을 선택하는 이야기가 아닙니다. Llama만 하더라도 선택지가 너무 많습니다.
예를 들어 Hugging Face의 Llama 3.2 Collections 페이지를 보겠습니다.
나는 단지 유명한 Llama를 쓰고 싶을 뿐인데 진입점부터 만만치 않습니다.
오늘은 이 중에서 Pretrained Model과 Instruction Model 의 차이를 살펴보겠습니다.
Pretrained Model vs Instruction Tuned Model
위 페이지에는 3B 파라미터를 가진 모델 중 Llama-3.2-3B 가 있고 Llama-3.2-3B-Instruct 가 있습니다. 이름 상으로는 뒤에 "-Instruct"가 있고 없고 차이입니다.
Llama-3.2-3B 가 흔히 이야기하는 Pretrained Model 이고 Llama-3.2-3B-Instruct 가 Instruction Tuned Model에 해당합니다. Pretrained Model과 Instruction Tuned Model의 차이는 무엇일까요?
Pretrained Model
이 질문을 이해하기 위해서는 먼저 LLM이 어떻게 만들어지는지부터 이해해야 합니다. LLM의 능력은 대단하지만 실제 LLM이 하는 일은 매우 단순합니다. LLM이 하는 일이라고는 주어진 입력에 이어질 다음 단어를 예측하는 것 뿐입니다.
예를 들어보겠습니다. LLM에게 "나는 아침에 밥을"이라고 입력을 주면 LLM은 "맛있게"를 예측합니다. 다른 말로는 "맛있게"를 생성합니다. 생성된 "맛있게"까지 붙여서 다시 "나는 아침에 밥을 맛있게"를 입력으로 줍니다. LLM은 "먹었다"를 예측합니다. 이 과정을 반복하면 LLM은 소설을 쓸 수도 있고, 논문을 쓸 수도 있습니다.
어떻게 LLM은 "나는 아침에 밥을"이라는 입력에 대해서 "딱딱하게"가 아니라 "맛있게"를 생성했을까요? 바로 훈련 과정에서 "밥을" 다음에는 "딱딱하게" 보다는 "맛있게"가 나오더라는 것을 데이터를 통해 배웠기 때문입니다. 물론 실제 훈련에서는 직전 한 단어만 보는 것이 아니라 굉장히 긴 길이를 보기는 하지만 원리는 같습니다.
LLM을 훈련시키는 과정은 이렇습니다.
- 엄청x100000 나게 많은 텍스트 데이터를 모읍니다. 웹에서 모으기도 하고 돈을 주고 사기도 합니다.
- LLM에게 이 데이터들을 보여줍니다. 그럼 LLM 은 이런 문맥(입력) 다음에는 저런 단어가 올 가능성이 높구나라는 패턴을 배웁니다.
- 텍스트 데이터가 다루는 분야도 매우 넓고 언어도 다양하기 때문에 LLM은 굉장히 다양한 분야와 다양한 언어에 대해서 다음 단어를 예측하는 능력을 갖게 됩니다.
이런 과정을 거쳐 훈련된 LLM을 Pretrained Model이라고 합니다. 우리 말로는 사전 학습 모델이라고 합니다. 이미 많은 데이터로 훈련된 모델이라는 뜻입니다.
그런데 Pretrained Model에는 심각한 문제가 있습니다. 우리의 직관과 다르게 작동한다는 점입니다. LLM에게 "대한민국의 수도는"이라고 물으면 뭐라고 대답하기를 기대하시나요? 아마 "대한민국의 수도는 서울입니다." 정도의 답을 기대하실 겁니다. 하지만 Pretrained Model은 우리의 기대를 배신합니다.
위는 제가 Hugging Face의 Llama-3.2-3B 페이지에서 "대한민국의 수도는?"을 입력으로 준 모습입니다. 우리의 기대와 달리 Llama가 서울이라고 답을 하는 게 아니라 마치 시험 문제처럼 보이는 텍스트를 생성했습니다.
기대와는 다르지만 LLM 입장에서는 너무 당연한 일입니다. 아마 Llama를 훈련 시키는데 사용한 데이터 중 "대한민국의 수도는?"이라고 시작하는 텍스트는 시험 문제 같은 것들이 많았을 겁니다. 수집한 데이터의 출처가 대한민국 지리 문제집이였을 수 있고요.
다르게 말하면 Llama는 "대한민국의 수도는?"에 이어질 다음 단어를 자기가 배운 것에 기반해서 정확하게 생성했습니다. 단지, 보통 사람은 "대한민국의 수도는?"에 대해서는 "대한민국의 수도는 서울입니다."와 같은 답을 기대한다는 것을 배우지 않았을 뿐입니다.
그럼 어떻게 해야할까요? 모르는 것이 죄는 아닙니다. 가르쳐주면 됩니다.
Instruction Tuned Model
Pretrained Model은 기본적으로 매우 매우 아는 것이 많고 말을 잘하는 친구입니다. 다만 사회성이 부족해서 묻는 말에 답 하기보다는 자기 할 말한 주저리주저리 하는 친구입니다. 그것도 매우 유식하게요.
Pretrained Model이 사람들과 잘 어울릴 수 있도록 사회성을 가르쳐야합니다. 사람 간의 통념에 맞도록 대답하도록 추가로 LLM을 가르치는 것이죠.
우리 예시부터 시작해보겠습니다. 입력 데이터로 "대한민국의 수도는?"을 준비하고, 출력 데이터로 "대한민국의 수도는 서울입니다."를 준비합니다. 그리고 Pretrained Model에게 이 데이터를 보여줍니다. 하지만 고지식한 Pretrained Model 이 이 한 가지 사례만으로 행동을 바꿀리는 없습니다. 우리가 기대한 대화 방식을 반영한 데이터를 많이 만들어서 계속해서 가르칩니다. 그럼 어느 순간부터 Pretrained Model이 우리의 기대대로 답을 하기 시작합니다.
Pretrained Model에 추가 학습을 해서 우리가 원하는 방향으로 답하게 하는 것을 Instruction Tune이라고 합니다. 이렇게 훈련된 모델은 Instruction Tuned Model이라고 부르고요. Llama-3.2-3B-Instruct 는 Llama-3.2-3B의 Instruction Tuned Model입니다.
위는 제가 같은 입력을 Llama-3.2-3B-Instruct 에게 주었을 때 결과입니다. 확실히 사회성이 좋아졌습니다. 중간에 영어를 섞어 쓰기는 하지만 한국어 실력이 좀 부족한 친구이니 이 정도는 이해해 줄 수 있습니다.
Instruction Tune이라는 용어에 대해서 잠시 살펴보겠습니다. Pretrained Model은 입력에 대해 다음 단어를 예측하는 것이 할 수 있는 전부이기 때문에 실생활에 사용하기는 어렵습니다. 대한민국의 수도가 어디냐고 물어봐도 답을 제대로 안 하고, 이력서를 써달라고 해도 답을 제대로 안 하고 자기 할 만은 하니까요. 그래서 보통 Pretrained Model은 그대로 쓰지 않고, 내가 필요한 용도에 맞춰 추가 훈련을 해서 사용합니다. 이 과정을 Fine Tuning이라고 부릅니다.
예를 들어 제가 날마다 비슷한 양식의 보고서를 쓰는 일을 하고 있다고 가정해 보겠습니다. 이 보고서 양식은 우리 회사에서만 쓰기 때문에 Llama가 알 길이 없습니다. Llama에게 신입사원 가르치 듯 우리 회사 보고서 쓰기를 가르쳐야겠죠. 먼저 보고서의 재료가 될 데이터들을 입력으로 하고, 이 입력에 대한 보고서를 출력으로 하는 데이터를 (많이) 준비합니다. 그리고 이 데이터들은 Pretrained Llama Model에게 보여줍니다. 이 과정을 반복적으로 하면 Pretrained Llama Model은 이제 우리 회사 보고서를 쓸 줄 아는 LLM이 됩니다. Pretraeind Llama Model을 Fine Tuning 시킨 것이죠.
이 방식에는 잠재적인 문제가 하나 있습니다. 이제 이 모델은 우리 회사 보고서는 기가 막히게 쓰지만 다른 Task에는 바보가 됐을 수도 있습니다. 너무 한 가지 Task에 집중해서 훈련되다 보니 일반적인 능력은 잃어버렸다고 할까요? 한 가지 일만 너무 오래 하다 보면 다른 일에는 바보가 되는 우리 사람과도 비슷한 것 같네요.
Instruction Tune도 일종의 Fine Tuning이라고 볼 수 있습니다. 다만 위의 보고서 LLM 처럼 일반적인 능력을 잃지 않도록 균형을 잘 맞춰서 튜닝합니다. Instruction Tuning은 Task 자체를 가르치는 것보다는 LLM의 응답 방식을 조정하는 것에 가깝습니다.
Instruction Tune 훈련 데이터는 보통 세 가지 구성요소로 이루어집니다.
- Instruction: 모델에게 내리는 지시 사항입니다. 예를 들어 "다음 주어진 나라의 수도에 대해 답하시오."가 Instruction입니다.
- Information: LLM이 이 Instruction을 수행하기 위해 필요한 정보입니다. 예를 들어 "대한민국"이 Information입니다.
- Output: Instruction + Information에 대한 LLM이 생성했으면 하는 결과입니다. 예를 들어 "대한민국의 수도는 서울입니다."가 Output입니다.
여기에서 주목할 점은 이미 LLM은 대한민국의 수도가 서울이라는 것(패턴)을 알고 있다는 점입니다. 우리가 하는 일은 LLM이 응답하는 방식을 조정하는 것뿐입니다.
Llama-3.2-3B-Instruct 페이지의 모델 설명 (Model Information)을 가져왔습니다.
The Llama 3.2 collection of multilingual large language models (LLMs) is a collection of pretrained and instruction-tuned generative models in 1B and 3B sizes (text in/text out). The Llama 3.2 instruction-tuned text only models are optimized for multilingual dialogue use cases, including agentic retrieval and summarization tasks. They outperform many of the available open source and closed chat models on common industry benchmarks.
굵은 글씨 부분을 보겠습니다. 이런저런 부가 설명이 많은데 요약하면 "Llama 3.2 Instruction Tuned 모델은 대화 유즈 케이스를 위해 최적화되었다"라는 뜻입니다. 왜 대화 유즈 케이스를 위해 최적화를 했을까요? Llama-3.2-3B 가 사회성이 부족해서 주거니 받거니 대화를 하지 못하고 혼자 할 말만 하는 Pretrained Model 이기 때문입니다. 즉, Llama-3.2-3B 를 가져다가 일반적인 사람이 대화하는 형태로 답하도록 Instruction Tune을 했다는 의미입니다.
마지막으로 Instruction Tuned 모델의 이름은 XXX-Instruct, XXX-IF, XXX-it 등과 같이 붙입니다. XXX라는 Pretrained Model을 기반으로 추가적으로 Instruction Tune 했다는 뜻입니다. IF는 Instruction Fine tuning의 약자일 겁니다.
종종 XXX-chat이라는 이름도 볼 수 있습니다. 예를 들어 Llama-2-7b-chat-hf 가 있습니다. 이름은 다르지만 XXX-chat도 Instruction Tune 모델입니다. Pretrained Model 기반으로 대화(chat) 스타일로 응답하도록 했다는 뜻입니다.
그래서 뭐 사용하면 돼요?
일반적으로는 Instruction Tune 모델을 사용하시면 됩니다. ChatGPT처럼 질의, 응답 용으로 쓰시든, Fine Tuning 용으로 쓰시든 Instruction Tune 모델이 성능이 더 좋습니다.
학술적인 목적이나 정말 바닥부터 Fine Tuning을 해야 한다면 Pretrained Model을 사용하시면 됩니다.
'Deep Learning' 카테고리의 다른 글
LLM : On-Device LLM (0) | 2024.08.29 |
---|---|
LLM : Token (2) | 2024.06.10 |
LLM : Context Window (1) | 2024.05.25 |
LLM : RAG (3) | 2024.04.28 |
LLM : Fine Tuning & LoRA (3) | 2023.11.12 |