The complete guide to LLM fine-tuning
사전에 훈련된 대규모 언어 모델(LLM)은 텍스트 생성, 요약, 프로그래밍과 같은 다양한 작업을 즉시 수행할 수 있습니다. 그러나 LLM은 모든 애플리케이션에 적합한 일률적인 해결책이 아닙니다. 때로는 (또는 응용 프로그램에 따라 자주) 언어 모델로 해결할 수 없는 작업에 부딪힐 수 있습니다.
이러한 상황에서 가질 수 있는 옵션 중 하나는 LLM을 세밀하게 조정하는 것입니다. 기본적으로 세밀 조정은 새로운 데이터에 기반 모델을 다시 훈련하는 과정입니다. 이는 비용이 많이 들고, 복잡하며, 먼저 생각해야 할 첫 번째 해결책은 아닙니다. 그럼에도 불구하고, LLM을 자신들의 애플리케이션에 도입하는 기관들이 갖추어야 할 중요한 기술 중 하나입니다.
다음은 거대 언어 모델을 세밀하게 조정하는 것에 대해 알아야 할 것입니다. 직접 그것을 할 전문 지식이 없더라도 세밀 조정이 어떻게 작동하는지 알고 있으면 올바른 결정을 내릴 수 있게 도와줍니다.
LLM 세밀 조정이 무엇인가요?
이것은 LLM 세밀 조정에 관한 글이지만, 이 문제는 언어 모델에만 특정한 것이 아닙니다. 어떤 기계 학습 모델이든 다양한 상황에서 세밀 조정이나 재훈련이 필요할 수 있습니다. 모델이 데이터셋에서 훈련될 때, 이는 기본 데이터 분포의 패턴을 근사하려고 시도합니다.
이 개념을 더 잘 설명하기 위해 자동차의 이미지를 감지하도록 설계된 컨볼루션 신경망(CNN)을 고려해보세요. 이 모델은 도시 환경에서의 승용차 이미지 수만 개에서 훈련되었습니다. 그것은 이런 종류의 차량과 환경에서 자주 보이는 형태, 색상, 픽셀 패턴에 대한 자신의 매개변수를 조정하였습니다. 그리고 그것은 도시에서의 자동차 이미지를 사용할 때 매우 잘 수행됩니다.
이 경우, 하나의 옵션은 고속도로에서의 트럭 이미지로 모델을 처음부터 훈련시키는 것입니다. 그러나 이렇게 하려면 트럭의 수만 개의 라벨이 붙은 이미지를 포함하는 매우 큰 데이터셋을 만들어야 합니다, 이는 비용이 많이 들고 시간이 많이 걸릴 수 있습니다.
- 훈련된 ML 모델은 분포 밖의 예제에서는 잘 동작하지 않습니다.
우연히도, 트럭과 승용차는 많은 시각적 특징들이 공통적으로 있습니다. 그러므로 새로운 모델을 처음부터 훈련시키는 대신에 이미 훈련된 모델에서 계속 진행할 수 있습니다. 트럭 이미지의 작은 데이터셋 (수천 또는 몇백 개)과 몇 번의 훈련 세대를 통해 기존의 모델을 새로운 애플리케이션에 최적화할 수 있습니다. 기본적으로, 내부적으로 세밀 조정은 새로운 데이터셋의 분포와 일치하도록 모델의 매개변수를 업데이트합니다.
이것이 세밀 조정의 핵심 아이디어입니다. 훈련된 ML 모델을 가져와 새로운 데이터를 사용하여 새로운 설정이나 새로운 응용 프로그램을 위해 그 매개변수를 업데이트합니다.
이 같은 규칙은 언어 모델에도 적용됩니다. 모델을 훈련시키는 데 사용된 데이터의 분포가 응용 프로그램과 크게 다르다면, 세밀 조정을 고려하고 싶을 수 있습니다. 예를 들어, 의학적 애플리케이션에 LLM을 사용하는 경우, 그 훈련 데이터에 의학 문헌이 포함되어 있지 않다면 이런 상황이 발생할 수 있습니다. 그럼에도 불구하고, LLM을 세밀하게 조정하는 것은 그 자체로 탐험할 만한 독특한 특징을 가지고 있습니다.
다양한 LLM 세밀 조정 기법
모든 형태의 세밀 조정이 동일한 것은 아니며, 각각은 다른 응용 프로그램에 유용합니다. 일부 경우에는 모델을 다른 애플리케이션에 맞게 변경하고 싶을 수 있습니다. 예를 들어, 텍스트를 생성할 수 있는 사전 훈련된 LLM을 가지고 있습니다. 이제 감정 또는 주제 분류와 같은 다른 유형의 애플리케이션에 그것을 사용하고 싶습니다. 이 경우, 세밀 조정하기 전에 그 구조에 작은 변화를 주어 모델을 목적에 맞게 변경합니다.
이 응용 프로그램에서는 모델의 트랜스포머 부분이 생성하는 임베딩만 사용합니다. 임베딩은 입력 프롬프트의 다양한 특징을 포착하는 숫자 벡터입니다. 일부 언어 모델은 직접 임베딩을 생성합니다. GPT 계열의 LLM과 같은 다른 모델들은 토큰(또는 텍스트)을 생성하기 위해 임베딩을 사용합니다.
목적 변경에서는 모델의 임베딩 계층을 분류 모델(예: 완전 연결된 계층의 세트)에 연결하여 임베딩을 클래스 확률에 매핑합니다. 이 설정에서는 모델이 생성하는 임베딩에서 분류기만 훈련시키면 됩니다. LLM의 주의 계층은 고정되어 있어 업데이트할 필요가 없으므로 엄청난 계산 비용이 절약됩니다. 그러나 분류기를 훈련시키려면 텍스트의 예와 해당 클래스로 구성된 지도 학습 데이터셋이 필요합니다. 세밀 조정 데이터셋의 크기는 작업의 복잡성과 분류기 구성 요소에 따라 달라집니다.
그러나 어떤 경우에는 트랜스포머 모델의 매개변수 가중치를 업데이트해야 합니다. 이를 위해서는 주의 계층의 고정을 해제하고 전체 모델에 대한 완전한 세밀 조정을 수행해야 합니다. 이 작업은 모델의 크기에 따라 계산 비용이 많이 들고 복잡할 수 있습니다. (어떤 경우에는 모델의 일부를 고정 상태로 유지하여 세밀 조정 비용을 줄일 수 있습니다. 그리고 LLM의 세밀 조정 비용을 줄일 수 있는 여러 기법이 있습니다 – 이에 대해서는 조금 더 자세히 다룰 것입니다.)
- LLM의 임베딩 활용하기:
- LLM (대형 언어 모델)에서 생성되는 ‘임베딩’이란 것은 입력 텍스트의 다양한 특징을 숫자 벡터로 표현한 것을 의미합니다.
- 특정 응용 프로그램에서는 모델이 생성하는 이 임베딩만을 사용할 수 있습니다. 예로, 모델이 텍스트를 생성하는 대신 특정 주제나 감정을 분류하는 작업에 이 임베딩을 사용할 수 있습니다.
- 이 임베딩 계층을 분류 모델(예: 완전히 연결된 신경망 계층)에 연결하여 새로운 작업을 수행하도록 할 수 있습니다. 이렇게 하면 기존 LLM의 대부분의 부분은 업데이트할 필요가 없으므로 계산 비용을 절약할 수 있습니다.
- 트랜스포머 모델의 세밀 조정:
- 가끔은 트랜스포머 모델의 파라미터를 업데이트해야 하는 상황이 있습니다. 이를 위해, 모델의 특정 계층을 ‘고정 해제’하고 전체 모델에 대한 세밀 조정을 진행해야 합니다.
- 이런 세밀 조정 작업은 계산적으로 많은 비용이 들 수 있습니다, 특히 모델 크기가 큰 경우에 그렇습니다.
- 그러나 모델의 일부를 고정 상태로 두어 세밀 조정의 비용을 줄일 수 있는 방법이나 다른 최적화 기법도 있습니다.
- LLM repurposing vs full fine-tuning
비지도학습 vs 지도학습 세밀 조정 (SFT)
때때로 당신은 단순히 LLM의 지식을 업데이트하고 싶을 수 있습니다. 예를 들어, 모델을 의학 문헌이나 새로운 언어에 세밀하게 조정하고 싶을 수 있습니다. 이러한 상황에서는 의학 저널에서 수집한 기사와 과학 논문과 같은 비구조화된 데이터셋을 사용할 수 있습니다. 목표는 모델을 새로운 도메인이나 대상 애플리케이션에서 직면할 입력 유형을 대표할 수 있을 정도의 토큰에 훈련시키는 것입니다.
비지도학습 세밀 조정:
이 경우, 특정한 ‘라벨’이나 ‘정답’ 없이 데이터셋만을 사용해 모델을 업데이트합니다. 주 목적은 모델이 새로운 도메인의 언어나 주제에 더 익숙해지게 만드는 것입니다.지도학습 세밀 조정 (SFT):
지도학습 세밀 조정의 경우, 각 데이터 포인트에 대한 명확한 ‘라벨’ 또는 ‘정답’이 필요합니다. 예를 들어, 긍정 또는 부정적인 감정을 가진 텍스트의 경우와 같이 특정 카테고리나 클래스에 대한 훈련 데이터가 필요합니다. 여기서의 목표는 모델이 정해진 태스크에 대해 더 정확한 예측을 할 수 있도록 학습시키는 것입니다.
두 방법 모두 LLM을 특정 애플리케이션에 더 적합하게 만드는 데 도움이 됩니다만, 사용하는 데이터와 훈련 방식에 따라 선택해야 합니다.
비구조화된 데이터의 장점은 비지도학습이나 자기 지도학습을 통해 모델을 훈련시킬 수 있기 때문에 확장성이 있습니다. 대부분의 기본 모델은 수천억 개의 토큰으로 구성된 비구조화된 데이터셋에 훈련됩니다. 새로운 도메인의 모델을 세밀하게 조정하기 위한 비구조화된 데이터를 수집하는 것은 상대적으로 쉽습니다, 특히 기업 내부 지식 베이스와 문서를 보유하고 있을 경우에요.
그러나, 경우에 따라 모델의 지식을 업데이트하는 것만으로는 충분하지 않고 LLM의 동작을 수정하고 싶을 수 있습니다. 이런 상황에서는 지도학습 세밀 조정 (supervised fine-tuning (SFT) ) 데이터셋이 필요합니다. 이는 프롬프트와 그에 해당하는 응답들의 모음입니다. SFT 데이터셋은 사용자에 의해 수동으로 정제될 수도 있고, 다른 LLM에 의해 생성될 수도 있습니다. 지도학습 세밀 조정은 ChatGPT와 같은 LLM에 특히 중요합니다. ChatGPT는 긴 텍스트 구간에 걸쳐 사용자의 지시를 따르고 특정 작업에 집중하도록 설계되었습니다. 이 특별한 유형의 세밀 조정은 지시 세밀 조정(instruction fine-tuning)으로도 불립니다.
요약하면:
- 비구조화된 데이터: 훈련에 확장성이 있고, 모델의 지식을 쉽게 업데이트할 수 있습니다. 주로 비지도 또는 자기 지도 학습에서 사용됩니다.
- 지도학습 세밀 조정 (supervised fine-tuning (SFT) ): 모델의 특정 동작을 수정하려는 경우 필요하며, 특별한 지침에 따라 모델을 조정하는 것입니다.
- Unsupervised vs supervised LLM fine-tuning
인간의 피드백으로부터 강화학습 (RLHF)
어떤 회사들은 SFT 또는 지시 세밀 조정을 다음 단계로 나아가, Reinforcement learning from human feedback (RLHF)을 사용합니다. 이것은 인간 검토자를 모집하고 LLM을 세밀하게 조정하기 위한 보조 모델을 설정하는 복잡하고 비싼 과정을 필요로 합니다. 이 때문에 현재로서는 큰 기술적 및 재무적 자원을 보유한 회사와 AI 연구소만이 RLHF를 수행할 수 있습니다.
RLHF의 핵심 개념:
RLHF는 기본적으로 LLM이 주어진 작업을 어떻게 수행하는지에 대한 인간의 피드백을 기반으로 모델을 조정하는 방법입니다. 강화학습의 전통적인 방법은 보상 시스템을 사용하여 모델에게 어떤 응답이 더 바람직한지를 학습시키는 것인데, RLHF에서는 이러한 보상이 인간 검토자의 피드백을 통해 제공됩니다.이 방법은 특히 복잡한 문제나 모호한 지침에 대한 모델의 반응을 개선할 때 유용합니다. 일반적인 지도학습 방법으로는 이러한 복잡한 문제를 해결하기 어렵기 때문에, 인간의 직접적인 피드백을 통한 강화학습이 필요하게 됩니다.
그러나 RLHF는 자원이 풍부한 연구 기관이나 대기업에서 주로 수행되는 고비용의 방법입니다. 높은 비용과 복잡성 때문에 모든 조직이 RLHF를 사용하는 것은 현실적이지 않을 수 있습니다.
RLHF(인간의 피드백에서의 강화 학습)에 대한 요약:
기본 아이디어:
RLHF의 전반적인 개념은 LLM이 수십억 토큰에 대해 학습할 때, 가장 그럴듯하게 이웃한 토큰의 시퀀스를 생성하는 것입니다. 생성된 텍스트는 대체로 일관되며 의미가 있습니다. 그러나 이것이 사용자나 응용 프로그램이 요구하는 것일 수는 없습니다. RLHF는 LLM을 올바른 방향으로 이끄는 것에 인간을 도입합니다. 인간 검토자들은 모델의 출력을 평가합니다. 이러한 평가는 높은 점수의 출력을 생성하기 위해 모델을 세밀하게 조정하는 신호로 작용합니다.
RLHF의 사례: ChatGPT:
ChatGPT는 RLHF의 대표적인 예입니다. OpenAI는 InstructGPT 논문을 기반으로 이 모델을 세밀하게 조정했습니다. 먼저, 수동으로 생성된 프롬프트와 응답 세트에 대해 GPT-3.5 모델을 SFT를 통해 세밀하게 조정했습니다. 다음 단계에서, 그들은 인간 검토자를 모집하고 다양한 프롬프트에 대한 모델의 출력을 평가하게 했습니다. 그들은 인간의 피드백 데이터를 사용하여 인간의 선호도를 흉내 내려고 하는 보상 모델을 학습시켰습니다. 마지막으로, 그들은 강화 학습(RL) 루프를 통해 언어 모델을 세밀하게 조정했습니다. 이 루프에서 LLM은 출력을 생성하고, 보상 모델이 그것들을 평가하고, LLM은 보상을 최대화하는 방식으로 파라미터를 업데이트합니다.
이 접근 방식을 통해, 모델은 인간의 평가자가 선호하는 결과를 생성하도록 “학습”하게 되며, 이것은 특정 작업이나 응용 프로그램에 맞추어 모델을 최적화하는 데 도움이 됩니다.
- ChatGPT training process (source: OpenAI)
파라미터 효율적인 세밀 조정 (PEFT)에 대한 설명:
기본 아이디어:
PEFT(parameter-efficient fine-tuning)는 LLM 세밀 조정에서의 연구 분야 중 하나로, 모델의 파라미터를 업데이트하는 비용을 줄이려는 목표를 가지고 있습니다. 이를 위한 여러 기술이 있으며, 그 중 하나가 Low-rank Adaptation (LoRA)입니다.
LoRA (Low-rank Adaptation):
LoRA의 핵심 아이디어는 기본 모델을 하위 작업에 세밀하게 조정할 때 모든 파라미터를 업데이트할 필요가 없다는 것입니다. 하위 작업의 공간을 매우 높은 정확도로 나타낼 수 있는 저차원 행렬이 있습니다.
LoRA를 사용한 세밀 조정:
기본 LLM의 파라미터를 업데이트하는 대신, LoRA는 이 저차원 행렬을 훈련시킵니다. 그 다음, LoRA 모델의 파라미터 가중치는 주요 LLM에 통합되거나 추론 중에 추가됩니다. LoRA는 세밀 조정의 비용을 최대 98%까지 줄일 수 있습니다. 또한 런타임에 LLM에 연결할 수 있는 여러 작은 규모의 세밀 조정된 모델을 저장하는 데도 도움이 됩니다.
결론:
PEFT와 LoRA와 같은 기술은 LLM 세밀 조정의 계산 비용을 크게 줄일 수 있으므로, 효율적인 방식으로 여러 작업에 대한 모델을 적용할 수 있게 됩니다.
- Low-rank adaptation (LoRA)
LLM 세밀 조정을 사용하지 않아야 할 때
몇몇 상황에서는 LLM 세밀 조정이 불가능하거나 유용하지 않을 수 있습니다:
1- 일부 모델은 세밀 조정 서비스가 없거나 제한된 응용 프로그래밍 인터페이스(API)를 통해서만 사용 가능합니다.
2- 하위 작업이나 애플리케이션의 도메인에 모델을 세밀 조정하기 위한 충분한 데이터가 없을 수 있습니다.
3- 애플리케이션의 데이터가 자주 변경될 수 있습니다. 모델을 자주 세밀 조정하는 것이 불가능하거나 해로울 수 있습니다. 예를 들면, 뉴스 관련 애플리케이션의 데이터는 매일 변합니다.
4- 애플리케이션은 동적이고 맥락에 민감할 수 있습니다. 각 사용자에게 출력을 맞춤화하는 챗봇을 만드는 경우, 사용자 데이터에서 모델을 세밀 조정할 수 없습니다.
이러한 경우, 추론 시간 동안 모델에 맥락을 제공하는 인-컨텍스트 학습(in-context learning) 또는 검색 확장(retrieval augmentation)을 사용할 수 있습니다. 예를 들어, LLM에게 기사나 이메일 작성을 도와달라고 요청하면, 관련 문서(뉴스 보고서, 위키백과 페이지, 회사 문서 등)를 프롬프트 앞에 추가하고 그 내용에 따라 응답을 조절할 수 있습니다. 다른 예로, 사용자 특정의 답변을 제공해야 하는 LLM, 예를 들면 그들의 재무 데이터, 건강 데이터, 이메일 등에 대한 것입니다. 사용자가 프롬프트를 입력할 때, 애플리케이션은 사용자의 데이터를 검색하여 프롬프트 앞에 추가하여 모델을 조절할 수 있습니다.
- A workflow to augment LLMs with contextual documents
설계 패턴 및 LLM 활용의 미래
유용한 설계 패턴(useful design pattern) 중 하나는 회사 문서의 임베딩을 저장하는 벡터 데이터베이스를 생성하는 것입니다. 사용자가 프롬프트를 입력하면 벡터 DB는 관련 문서를 검색하고 모델에 맥락으로 전송합니다.
때로는 혼합 접근법을 사용하여 특정 애플리케이션의 데이터셋에서 모델을 세밀 조정한 다음, 추론 중에 사용자 특정 맥락을 제공할 수 있습니다.
다양한 애플리케이션에서 LLM을 사용하는 데 대한 관심이 높아짐에 따라, 가까운 미래에 더 흥미로운 세밀 조정 기술 및 대체 솔루션이 등장할 것으로 예상됩니다.