# 파인튜닝 이란

## 파인튜닝이란?

**파인튜닝(Fine-tuning)** 은 미리 학습된 모델(Pre-trained Model) 을 특정 작업이나 목적에 맞게 추가로 학습시키는 과정을 의미함.

기본적으로, 대규모 언어 모델(예 : Tulu3, GPT, BERT 등)은 일반적인 데이터를 기반으로 학습되어 다양한 언어 패턴과 구조를 이해하지만, 특정 도메인 또는 작업에 최적화되지는 않음.

이를 해결하기 위해 파인튜닝을 진행함.

***

## 주요 개념

1. **미리 학습된 모델**:
   1. Pre-trained Model 은 대규모 데이터(예: 위키피디아, 책, 코드 등)를 학습하여 언어 이해, 생성 능력을 갖춘 모델임.
2. **추가학습(특정 작업에 맞춤화):**
   1. 특정 도메인(예: 의료, 법률, 게임 데이터 등) 이나 특정 작업(질문-답변, 텍스트 분류, 요약 등)에 특화된 추가 학습을 통해 모델을 조정함.
3. **효율성**:
   1. 미리 학습된 모델을 활용하기 때문에 처음부터 학습하는 것보다 훨씬 적은 리소스와 시간이 필요함.
   2. 소량의 데이터로도 높은 성능을 얻을 수 있음.

***

## 파인튜닝의 단계

1. **모델 로드**:
   1. 미리 학습된 모델을 로드함.
   2. 예를 들어, Hugging Face 라이브러리를 통해 Tulu3 모델을 로드할 수 있음.
2. **데이터 준비**:
   1. 학습 데이터를 준비함. 데이터는 모델이 수행할 작업에 맞게 구성되어야 함.
   2. 예 : 텍스트 생성 모델의 경우 질문-답변 쌍, 분류 모델의 경우 라벨이 포함된 텍스트
3. **모델 구조 조정**:
   1. 모델의 최종 출력 계층(Head)을 특정 작업에 맞게 조정함.
   2. 예를 들어, 분류 작업의 경우 출력 계층을 분류용 Dense Layer 로 교체
4. **학습 진행**:
   1. 준비된 데이터로 모델을 학습시킴
   2. 학습 도중 과적합(Overfiting)을 방지하기 위해 정규화(Regularization) 기법을 사용함.
5. **평가 및 테스트**:
   1. 파인튜닝한 모델의 성능을 테스트 데이터로 평가함.
   2. 성능 지표(예: 정확도, F1 스코어 등) 를 통해 결과를 검증함.
6. **배포 및 활용**:
   1. 파인튜닝된 모델을 저장하고, API 또는 다른 애플리케이션에 통합하여 실사용함.

***

## 파인튜닝이 필요한 이유

1. **특정 도메인 최적화**:
   1. 예를 들어, 의료 데이터는 일반적인 데이터와 다름. 미리 학습된 모델을 의료 데이터에 맞게 조정하면 성능이 크게 향상됨.
2. **특정 작업 수행**:
   1. 모델이 문서 요약, 챗봇 응답 생성, 특정 문맥에 맞는 번역 등 특정 작업을 잘 수행하도록 만듬.
3. **효율적인 학습**
   1. 모든 데이터를 처음부터 학습하는 것은 비용과 시간이 많이 드는 반면, 파인튜닝은 기존 모델을 활용해 효율적임.

***

## 파인튜닝에 자주 사용되는 기술

1. **LoRA(Low-Rank Adaptation)**:
   1. 모델 전체를 학습시키는 대신 일부 파라미터만 조정하여 리소스를 줄이는 기법
2. **Prompt Tuning**:
   1. 모델의 파라미터를 고정한 상태에서 특정 입력 형태(Prompt) 에 따라 모델을 조정
3. **Adapter**:
   1. 기존 모델에 추가적인 계층을 삽입하여 학습
4. **양자화(Quantization(Quantization):**
   1. 모델 크기와 계산량을 줄여 학습 및 배포를 최적화

***

## 대안

* **Few-shot Learning** : 모델에 몇 가지 예제를 제공하는 것만으로 작업 수행
* **Zero-shot Learning** : 추가 학습 없이 작업 수행
