거대 언어 모델의 지시사항 조정(instruction tuning)에 대해 더욱 깊이 있게 다룰 예정입니다. 그리고 효율적인 방법으로 미세 조정(fine-tuning)하는 방법에 대해서도 나중에 알아볼 것입니다.
우선 지시사항 미세조정(instruction fine-tuning)에 대해 살펴봅시다. 기본 모델은 세상에 대한 많은 정보를 미리 학습하게 됩니다. 그러나 우리의 프롬프트나 질문에 반응하는 방법은 반드시 알지 못합니다. 따라서 특정 작업을 수행하도록 지시할 때에는 반드시 반응하는 방법을 알지 못하게 됩니다. 지시사항 미세조정은 이를 변경하여 우리에게 더욱 도움이 되도록 하는데 도움을 줍니다.
인터넷과 다른 출처에서 일반 텍스트를 학습함으로써, 다음 단어를 예측하는 방법을 배우게 됩니다. 인터넷에서 다음 단어를 예측하는 것은 지시사항을 따르는 것과 같지 않습니다. 수백억 단어를 통해 대형 언어 모델을 학습시키고, 그 후에는 지시사항을 따르는 방법에 대한 더 작은 데이터 세트로 미세 조정할 수 있다는 것은 놀랍습니다.
물론, 기억의 대량 손실에 대비해야 할 것입니다. 이것은 우리가 코스에서 이야기하는 부분입니다. 즉, 이런 지시사항 미세조정 과정에서 모델에게 추가 데이터를 학습시키면 이전에 가지고 있던 정보의 큰 부분을 잊어버리게 됩니다. 이를 대처하기 위한 몇 가지 기법에 대해서는 이번 코스에서 논의할 예정입니다.
그리고 개발자가 자신의 응용 프로그램, 특수화된 응용 프로그램을 위해 미세 조정을 시도할 때, 두 가지 유형의 미세 조정이 매우 중요하다는 것이 판명되었습니다. 미세 조정의 문제 중 하나는 거대한 모델을 가져와서 그 모델의 모든 매개 변수를 미세 조정하는 것입니다.
그런데 우리는 PEFT (Parameter Efficient Fine-Tuning) 라는 메소드들이 이러한 문제를 완화하는 데 도움이 될 수 있음을 보았습니다. 많은 고객들이 매우 특정한 작업, 매우 특정한 도메인을 위해 조정하길 원합니다. PEFT는 원래의 모델 가중치를 고정하거나, 훨씬 더 작은 메모리 사용량을 가진 적응형 계층을 추가하는 기법을 활용하여, 여러 작업을 위한 훈련을 할 수 있도록 합니다.
개발자들 사이에서 많이 보는 것은, 대부분의 개발자들이 프롬프트로 시작하고, 때때로 그것이 충분한 성능을 제공하기도 합니다. 그러나 때때로 프롬프트는 성능에서 천장에 도달하고, 이런 종류의 LoRA나 다른 PEFT 기법으로의 미세 조정이 추가적인 성능을 향상시키는데 필수적입니다.
결국 전체 미세조정은 비용이 많이 들 수 있습니다. 따라서 PEFT 같은 기법을 사용하여 제너레이티브 AI 모델의 미세 조정을 일상적인 사용자들의 손에 넣을 수 있다는 것은 중요합니다.
Instruction Fine-tuning (명령어 미세 조정)
명령어 미세 조정은 모델 훈련의 한 부분으로, 대규모 언어 모델을 특정 작업이나 목적에 맞게 조정하는 방법입니다. 기본 아이디어는 모델에게 어떤 작업을 수행하도록 지시하는 것입니다.
- 배경:
- 대규모 언어 모델은 일반적인 언어 이해와 생성 능력을 가지고 있지만, 특정 작업에 대한 지시를 정확하게 따르지 않을 수 있습니다.
- 프로세스:
- 명령어 미세 조정은 특정 지시에 따른 모델의 반응을 최적화하기 위해 사용됩니다.
- 예를 들어, “한 문장으로 요약해주세요”와 같은 지시를 주었을 때, 모델이 이 지시를 더 정확하게 따르도록 만드는 것이 목적입니다.
- 데이터 수집:
- 특정 지시에 따라 예상되는 응답을 포함하는 훈련 데이터를 수집하거나 생성합니다.
- 미세 조정:
- 이렇게 수집된 데이터를 사용하여 모델을 미세 조정합니다. 이 과정은 모델이 지시에 따라 원하는 방식으로 반응하도록 합니다.
- 평가 및 반복:
- 미세 조정된 모델의 성능을 평가하고, 필요에 따라 추가적인 미세 조정을 반복적으로 수행합니다.
명령어 미세 조정은 특정 작업에 대한 모델의 성능을 향상시키기 위한 중요한 방법입니다. 이를 통해 모델은 사용자의 지시에 더 정확하고 일관되게 응답할 수 있게 됩니다.
Instruction fine-tuning
기존 모델의 성능을 향상시키는 방법과, 세밀하게 튜닝된 언어 모델의 성능을 평가하고 기본 모델에 비해 얼마나 개선되었는지를 측정하는 중요한 지표에 대해 배울 것입니다.
Fine-tuning an LLM with instruction prompts
어떻게 언어 모델을 세밀하게 튜닝하는지에 대해 먼저 설명하겠습니다. 이번 코스에서 보았듯이, 일부 모델들은 프롬프트 내의 지시사항을 식별하고, 제로샷 추론을 정확하게 수행할 수 있는 능력을 가지고 있습니다. 그러나 다른 모델들, 특히 작은 언어 모델들은 이러한 작업을 수행하는데 실패할 수 있습니다. 이러한 경우, 원하는 모델의 동작을 하나 이상의 예시를 포함시키는 것만으로도, 모델이 작업을 식별하고 좋은 완성을 생성하는 데 충분한 경우가 많습니다. 이를 원샷 또는 퓨샷 추론이라고 합니다. 그러나 이 전략에는 두 가지 단점이 있습니다. 첫째, 작은 모델들에게는 항상 효과적이지 않습니다. 심지어 5개나 6개의 예시를 포함시켰음에도 불구하고요. 둘째, 프롬프트에 포함된 예시들은 컨텍스트 창의 소중한 공간을 차지하므로, 다른 유용한 정보를 포함시키는 데 있어 제한이 됩니다.
다행히도, 다른 해결책이 존재합니다. 바로 세밀 튜닝(fine-tuning)이라는 프로세스를 활용하여 기반 모델을 추가 학습시킬 수 있습니다. 사전 학습 과정에서는 대량의 비구조화된 텍스트 데이터를 사용하여 언어 모델을 학습시키는 반면, 세밀 튜닝은 지정된 예시를 사용하여 언어 모델의 가중치를 업데이트하는 감독 학습 과정입니다. 지정된 예시들은 프롬프트-완성 쌍으로, 세밀 튜닝 과정은 특정 작업에 대해 좋은 완성을 생성하는 모델의 능력을 향상시키는 모델 학습을 확장합니다.
지시사항 세밀 튜닝(instrrunction fine-tuning)이라는 전략은 모델의 다양한 작업에 대한 성능을 향상시키는 데 특히 효과적입니다. 이 방법이 어떻게 작동하는지 자세히 살펴보겠습니다. 지시사항 세밀 튜닝은 특정 지시사항에 따라 어떻게 응답해야 하는지를 보여주는 예시를 사용하여 모델을 학습시킵니다. 이는 모델이 주어진 지시사항에 따른 응답을 생성하도록 학습하는데 도움이 됩니다.
지시사항 세밀 튜닝은 모든 모델의 가중치가 업데이트되는 프로세스로, 완전 세밀 튜닝이라고도 합니다. 이 과정의 결과는 업데이트된 가중치를 가진 모델의 새로운 버전이 생성됩니다.
세밀 튜닝을 어떻게 수행하는지에 대해 설명하겠습니다. 첫 번째 단계는 학습 데이터를 준비하는 것입니다. 공개된 데이터셋이 많이 있지만, 대부분은 지시사항으로서의 형식으로 제공되지 않습니다. 다행히 개발자들은 기존 데이터셋, 예를 들어 아마존 제품 리뷰의 대량 데이터셋,을 세밀 튜닝을 위한 지시사항 프롬프트 데이터셋으로 변환할 수 있는 프롬프트 템플릿 라이브러리를 만들어 왔습니다.
지시사항 데이터셋이 준비되면, 표준 감독 학습과 마찬가지로, 데이터셋을 학습, 검증, 테스트 분할로 나눕니다. 세밀 튜닝 과정에서는 학습 데이터셋에서 프롬프트를 선택하고 이를 언어 모델에 전달하면, 모델은 완성을 생성합니다. 그런 다음, 언어 모델의 완성과 학습 데이터의 응답을 비교합니다.
언어 모델의 출력은 토큰 분포입니다. 따라서 완성의 분포와 학습 레이블의 분포를 비교하고, 두 토큰 분포 사이의 교차 엔트로피 함수를 사용하여 손실을 계산할 수 있습니다. 그리고 계산된 손실을 사용하여 표준 역전파에서 모델 가중치를 업데이트합니다.
이와 같은 과정을 많은 프롬프트-완성 쌍 배치들에 대해, 그리고 여러 에폭 동안 수행하면, 모델의 작업 성능이 향상됩니다. 표준 감독 학습과 마찬가지로, 검증 데이터셋을 사용하여 언어 모델의 성능을 측정하는 별도의 평가 단계를 정의할 수 있습니다.
세밀 튜닝 과정의 결과는 기본 모델의 새로운 버전인 instruct 모델이 생성되고, 이는 당신이 관심 있는 작업에서 더 나은 성능을 발휘합니다. 현재 지시사항 프롬프트를 사용한 세밀 튜닝은 언어 모델을 세밀 튜닝하는 가장 일반적인 방법입니다. 이제 ‘세밀 튜닝’이라는 용어를 듣거나 볼 때는 항상 ‘지시사항 세밀 튜닝’을 의미한다고 생각하면 됩니다.
Fine-tuning on a single task
LLM은 다양한 언어 작업에 유용하나, 특정 작업에만 미세 조정이 가능합니다. 미세 조정은 종종 치명적인 망각 현상을 초래하여 모델이 다른 작업을 잊어버릴 수 있습니다. 이 문제를 피하기 위한 방법 중 하나는 여러 작업에 동시에 미세 조정을 하는 것이며, 또 다른 방법은 파라미터 효율적인 미세 조정(PEFT)을 사용하는 것입니다. PEFT는 원래의 모델 가중치를 대부분 보존하면서 작업 특정 파라미터만 조정합니다.
LLM(Long-form Language Model)의 성능, 미세 조정의 잠재적인 문제점 및 해결 방법에 관한 것입니다.
- LLM의 성능: LLM은 여러 가지 언어 작업을 수행할 수 있는 능력을 가지고 있습니다. 그러나 특정 애플리케이션에서는 하나의 작업만 필요로 할 수 있기 때문에, 해당 작업에 특화된 성능 향상을 위해 모델을 미세 조정할 수 있습니다.
- 미세 조정의 문제점: 미세 조정을 할 때, 모델이 한 작업에 너무 특화되면 다른 작업에 대한 정보나 능력을 잊어버리는 ‘치명적인 망각’이라는 현상이 발생할 수 있습니다. 예를 들어, 감정 분석 작업에 모델을 미세 조정하면 그 작업에는 훌륭한 성능을 보이지만, 다른 작업, 예를 들면 명명된 엔터티 인식 작업에서는 능력이 저하될 수 있습니다.
- 해결 방법: 이 문제를 해결하기 위한 방법으로는 두 가지가 제시됩니다. 첫 번째는 여러 작업에 대해 동시에 미세 조정을 하는 다중 작업 미세 조정 방법입니다. 두 번째는 파라미터 효율적인 미세 조정(PEFT)라는 방법으로, 이는 원래의 모델 가중치의 대부분을 보존하면서 특정 작업에 관련된 파라미터만을 조정하는 방식입니다.
LLM은 단일 모델 내에서 여러 가지 언어 작업을 수행할 수 있는 능력으로 유명해졌지만, 여러분의 애플리케이션은 단 하나의 작업만 수행해야 할 수 있습니다. 이런 경우, 관심 있는 작업에서의 성능을 향상시키기 위해 사전 훈련된 모델을 미세 조정할 수 있습니다. 예를 들어, 해당 작업을 위한 예제 데이터셋을 사용한 요약이 그렇습니다. 흥미롭게도 상대적으로 적은 수의 예제로도 좋은 결과를 얻을 수 있습니다.
종종 500-1,000개의 예제만으로도 사전 훈련 중에 모델이 본 수십억 개의 텍스트에 비해 좋은 성능을 낼 수 있습니다. 그러나 단일 작업에서 미세 조정하는 것에는 잠재적인 단점이 있습니다. 이 과정은 치명적인 망각이라는 현상을 초래할 수 있습니다. 치명적인 망각은 전체 미세 조정 과정이 원래 LLM의 가중치를 수정하기 때문에 발생합니다.
이로 인해 단일 미세 조정 작업에서 훌륭한 성능을 보이지만, 다른 작업에서의 성능은 저하될 수 있습니다. 예를 들어, 미세 조정으로 모델이 리뷰에 대한 감정 분석 능력을 향상시킬 수 있고, 품질 있는 완성을 얻을 수 있지만, 모델은 다른 작업을 수행하는 방법을 잊어버릴 수 있습니다.
이 모델은 미세 조정 전에 문장에서 고양이의 이름인 Charlie를 올바르게 식별하는 명명된 엔터티 인식 작업을 수행할 수 있었습니다. 그러나 미세 조정 후에는 이 작업을 수행할 수 없게 되어, 식별해야 할 엔터티를 혼동하고 새 작업과 관련된 행동을 보여줍니다.
치명적인 망각을 피하기 위한 옵션은 무엇입니까? 우선, 치명적인 망각이 실제로 여러분의 사용 사례에 영향을 미치는지 결정하는 것이 중요합니다. 미세 조정한 작업에서만 믿을 만한 성능이 필요하다면, 모델이 다른 작업에 일반화할 수 없다는 것이 문제가 아닐 수 있습니다. 만약 모델이 다중 작업의 일반화 능력을 유지하길 원하거나 필요로 한다면, 한 번에 여러 작업에 미세 조정을 수행할 수 있습니다.
좋은 다중 작업 미세 조정은 많은 작업에 걸쳐 50-100,000개의 예제가 필요하며, 따라서 더 많은 데이터와 컴퓨팅 훈련이 필요합니다. 이 옵션에 대해 곧 자세히 논의하겠습니다. 두 번째 옵션은 전체 미세 조정 대신 파라미터 효율적인 미세 조정 또는 PEFT를 수행하는 것입니다.
PEFT는 원래 LLM의 가중치를 보존하고 작은 수의 작업 특정 어댑터 계층 및 파라미터만 훈련하는 기술 집합입니다. PEFT는 치명적인 망각에 대한 더 큰 견고성을 보여주는데, 대부분의 사전 훈련된 가중치가 변경되지 않기 때문입니다.
Multi-task instruction fine-tuning
다중 작업 미세 조정은 단일 작업 미세 조정의 확장입니다. 여기서 훈련 데이터 세트는 여러 작업의 예제 입력과 출력으로 구성됩니다. 데이터 세트는 요약, 리뷰 평점, 코드 번역 및 엔터티 인식과 같은 다양한 작업을 수행하도록 모델에 지시하는 예제를 포함합니다. 이 혼합 데이터 세트에서 모델을 훈련시켜 모든 작업에서 동시에 성능을 향상시킵니다. 이렇게 하면 치명적인 망각 문제를 피할 수 있습니다. 여러 에폭 동안 훈련을 거치면, 예제들 간의 계산된 손실을 사용하여 모델의 가중치를 업데이트하게 됩니다.
다중 작업 미세 조정의 한 가지 단점은 많은 데이터가 필요하다는 것입니다. 훈련 세트에는 최대 50-100,000개의 예제가 필요할 수 있습니다. 그러나 이 데이터를 모으는 것은 매우 가치 있을 수 있습니다. 결과적으로 나오는 모델들은 종종 많은 작업에서 좋은 성능을 원하는 상황에서 사용하기에 적합합니다.
모델 계열 중 하나를 살펴보면, 다중 작업 지침 미세 조정을 사용하여 훈련된 모델이 있습니다. 모델의 변형은 미세 조정 중 사용된 데이터 세트와 작업에 따라 다릅니다. FLAN 모델 계열의 한 예는 Fine-Tuned Language Net을 의미합니다. 이는 다양한 모델을 미세 조정하기 위해 사용되는 특정 지침 세트입니다.
FLAN-T5는 T5 기반이며, FLAN-PALM은 PALM 기반이라는 것을 이해하실 수 있을 것입니다. FLAN-T5는 일반적인 목적의 지침 모델로, 473개의 데이터 세트와 146개의 작업 카테고리에 걸쳐 미세 조정되었습니다.
요약 작업에 사용된 데이터 세트의 한 예는 FLAN-T5의 SAMSum입니다. 이는 Muffin 작업 및 데이터 세트 컬렉션의 일부로, 대화를 요약하는 언어 모델을 훈련시키는 데 사용됩니다. SAMSum은 요약이 포함된 16,000개의 메신저 스타일 대화로 구성된 데이터 세트입니다.
SAMSum은 16,000개의 메신저 스타일 대화와 요약이 포함된 데이터 세트입니다. 여기에는 왼쪽에 대화, 오른쪽에 요약이 표시된 세 가지 예제가 있습니다. 이 대화와 요약은 언어 모델을 위한 고품질 훈련 데이터 세트를 생성하기 위한 목적으로 언어학자들에 의해 제작되었습니다. 언어학자들은 그들이 일상적으로 쓸 것 같은 대화를 생성하도록 요청 받았으며, 이는 그들의 실제 생활 메신저 대화의 주제 비율을 반영합니다. 비록 언어 전문가들은 그 대화의 중요한 정보와 대화에 참여한 사람들의 이름을 포함한 짧은 요약을 만들었지만요. 여기에는 이 SAMSum 대화 요약 데이터 세트와 함께 사용하기 위해 설계된 프롬프트 템플릿이 있습니다. 이 템플릿은 사실 모델에게 같은 것을 요청하는 여러 다른 지침으로 구성되어 있습니다. 대화를 요약하십시오. 예를 들면, 그 대화를 간략하게 요약하십시오. 이 대화의 요약은 무엇입니까? 그 대화에서 무슨 일이 벌어졌나요? 같은 지침을 다르게 표현하는 것은 모델이 일반화하고 성능을 향상시키는 데 도움이 됩니다. 이전에 보았던 프롬프트 템플릿처럼요. 각 경우에서, SAMSum 데이터 세트의 대화가 대화 필드가 나타나는 템플릿에 삽입됩니다. 요약은 라벨로 사용됩니다. SAMSum 데이터 세트의 각 행에 이 템플릿을 적용한 후, 대화 요약 작업을 미세 조정하기 위해 사용할 수 있습니다.
FLAN-T5는 많은 작업에서 좋은 능력을 보이는 훌륭한 일반 사용 모델이지만, 특정 사용 사례의 작업에 개선의 여지가 있을 수 있습니다.
이를 위해, FLAN-T5 모델을 추가적인 대화 데이터 세트를 사용하여 미세 조정하여, 특정 대화가 발생하는 봇과의 대화가 훨씬 가까워지도록 만들 수 있습니다.