Fine-tuning
미세 조정은 사전 학습된 모델을 작업별 데이터로 계속 학습해 훨씬 적은 데이터와 연산량으로 작업에 적응시킵니다. 작동 원리, PEFT, 코드를 다룹니다.
파인튜닝은 대규모 데이터셋으로 이미 학습된 모델의 학습을 이어 가며, 더 작고 작업에 특화된 데이터셋에서 가중치 일부 또는 전체를 업데이트하는 과정입니다. 사전 학습된 모델 가중치에는 비전 모델의 에지, 텍스처, 형태나 대규모 언어 모델(LLM)의 문법과 사실 등 일반 지식이 이미 인코딩되어 있습니다. 따라서 파인튜닝은 무작위 가중치에서 학습하는 것보다 훨씬 적은 레이블 데이터와 연산 자원으로 높은 정확도를 달성합니다. 파인튜닝은 전이 학습을 수행하는 가장 일반적인 방법이며, 대부분의 맞춤형 객체 감지 모델과 채팅 어시스턴트는 사전 학습된 파운데이션 모델을 바탕으로 구축됩니다.
파인튜닝 작동 방식#
파인튜닝 실행은 사전 학습된 가중치를 불러오고, 분류기나 감지 헤드처럼 원래 작업에 연결된 계층을 교체하거나 크기를 조정한 다음 일반적인 손실 함수와 옵티마이저를 사용해 새 데이터로 학습합니다. 원래 모델을 얼마나 유지할지는 다음 세 가지 선택에 따라 달라집니다.
- 학습률: 파인튜닝에서는 사전 학습보다 낮은 학습률을 사용하며, 일반적으로 짧은 워밍업을 거칩니다. 이를 통해 사전 학습된 특징을 덮어쓰지 않고 정교하게 조정합니다. ULMFiT은 한 단계 더 나아가 차등 학습률을 적용했습니다. 최상위 계층보다 아래에 있는 계층마다 학습률을 2.6으로 나누었습니다.
- 학습할 계층: 백본의 초기 계층을 고정하면 일반적인 특징이 유지되고 메모리 사용량이 줄며, 소규모 데이터셋에서 과적합이 발생할 위험도 낮아집니다. 점진적 동결 해제 방식은 새 헤드를 먼저 학습한 다음 더 깊은 계층을 차례로 학습에 포함합니다.
- 학습 시간: 새 데이터만으로 모델을 더 오래 학습할수록 치명적 망각으로 인해 기존 기술을 더 많이 잃게 됩니다.
적절한 설정은 사용 가능한 메모리, 레이블 데이터의 양, 기존 기술이 여전히 중요한지 여부에 따라 달라집니다.
전체 파인튜닝과 매개변수 효율적 파인튜닝 비교#
전체 파인튜닝은 모든 가중치를 업데이트합니다. 매개변수가 70억 개인 LLM의 경우 70억 개 값의 그래디언트와 옵티마이저 상태를 메모리에 유지하고, 작업마다 모델 전체 사본을 저장해야 합니다. 매개변수 효율적 파인튜닝(PEFT)은 사전 학습된 가중치를 고정하고 추가하거나 선택한 소수의 매개변수만 학습합니다. Hugging Face의 PEFT 라이브러리는 일반적인 방법을 구현합니다. LoRA는 고정된 가중치 행렬 옆에 학습 가능한 저랭크 행렬을 추가합니다. GPT-3 175B를 Adam으로 전체 파인튜닝하는 것과 비교해 학습 가능한 매개변수 수를 10,000분의 1로, GPU 메모리를 3분의 1로 줄였습니다. QLoRA는 4비트 양자화된 기본 모델 위에서 LoRA 어댑터를 학습하므로, 48GB GPU 하나로 매개변수 650억 개 모델을 파인튜닝할 수 있습니다.
LLM은 사전 학습 후 여러 단계를 거쳐 파인튜닝됩니다. 인스트럭션 튜닝은 프롬프트와 응답 쌍으로 학습하며, 인간 피드백 기반 강화 학습(RLHF) 및 직접 선호도 최적화(DPO)와 같은 선호도 기반 방법은 응답을 사람의 선호도에 맞춥니다.
파인튜닝과 관련 용어 비교#
- 전이 학습: 한 작업으로 학습한 모델을 다른 작업에 재사용하는 더 포괄적인 개념입니다. 파인튜닝은 사전 학습된 가중치를 업데이트하지만, 특징 추출은 가중치를 고정하고 새 헤드만 학습합니다.
- 처음부터 학습: 무작위 가중치에서 시작하며 훨씬 많은 레이블 데이터와 연산 자원이 필요합니다. 새로운 아키텍처나 사용 가능한 사전 학습 데이터와 공통점이 거의 없는 도메인에 적합합니다.
- 선형 프로빙: 고정된 특징을 사용해 선형 분류기만 학습하며, 일반적으로 사전 학습된 표현이 이미 얼마나 많은 정보를 포착하는지 측정하는 데 사용합니다.
- 프롬프트 엔지니어링 및 검색 증강 생성(RAG): 가중치는 그대로 두고 입력을 통해 LLM의 동작을 변경합니다.
객체 감지기 파인튜닝#
사전 학습된 YOLO26 체크포인트에 새 데이터셋을 지정해 train()을 호출하면 모델이 파인튜닝됩니다. 호환되는 모든 가중치가 전이되고, 기본 cls_remap=True는 클래스 이름이 일치하는 분류기 행을 복사합니다. 따라서 African Wildlife 데이터셋에서는 코끼리와 얼룩말의 출력이 COCO 사전 학습 행에서 시작하지만, COCO에 없는 버팔로와 코뿔소의 출력은 새로 초기화됩니다.
from ultralytics import YOLO
# COCO로 사전 학습된 YOLO26n 가중치를 로드합니다. 대신 YOLO("yolo26n.yaml")을 사용하면 처음부터 학습합니다.
model = YOLO("yolo26n.pt")
# 버팔로, 코끼리, 코뿔소, 얼룩말로 구성된 학습 이미지 1,052장으로 파인튜닝합니다.
results = model.train(data="african-wildlife.yaml", epochs=30, imgsz=640)이 30에포크 실행에서는 기본 optimizer="auto"이 AdamW와 lr0=0.00125를 선택합니다. 실행이 10,000회 미만의 반복으로 끝나므로, 이 학습률은 데이터셋의 클래스 4개를 기준으로 계산됩니다.










