
딥러닝 모델을 처음부터 학습시키는 'From Scratch' 방식은 막대한 컴퓨팅 자원과 거대한 데이터셋을 필요로 합니다. 이러한 한계를 극복하기 위해 현대 AI 개발의 표준이 된 것이 바로 전이 학습(Transfer Learning)입니다. 하지만 단순히 사전 학습된 모델(Pre-trained Model)을 가져오는 것만으로는 충분하지 않습니다. 어떤 레이어를 고정(Freezing)하고, 어느 시점에 미세 조정(Fine-tuning)을 시작할 것인가라는 전략적 선택이 모델의 최종 성능을 좌우합니다. 본 포스팅에서는 데이터셋의 유사도와 크기에 따른 레이어 동결의 4가지 결정 기준을 제시하고, 학습 안정성을 보장하는 Fine-tuning의 최적 해결 방법을 수학적, 실무적 관점에서 심층 분석합니다.
1. 데이터 상황에 따른 4가지 Freezing & Fine-tuning 전략
전이 학습의 핵심은 기존 모델이 학습한 '일반적 특징(Generic Features)'을 유지하면서 새로운 데이터의 '특수한 특징(Specific Features)'을 적응시키는 것입니다. 이를 결정하는 가장 큰 기준은 데이터의 양과 도메인 유사도입니다.
| 구분 | 유사 데이터셋 (Similar Data) | 이질적 데이터셋 (Different Data) |
|---|---|---|
| 적은 데이터 (Small Data) | 전략 1: 최상위 분류기만 재학습 (모든 레이어 Freezing) |
전략 2: 하위 일부 레이어만 사용 (중간층부터 학습) |
| 많은 데이터 (Large Data) | 전략 3: 상위 일부 레이어 Fine-tuning (점진적 해제) |
전략 4: 전체 모델 재학습 (Pre-trained 가중치로 초기화) |
2. 레이어 동결(Freezing)의 수학적 이유와 단계별 접근
딥러닝 모델의 하위 레이어(Input에 가까운 쪽)는 선, 점, 질감과 같은 Low-level Feature를 추출합니다. 이는 대부분의 이미지나 텍스트 데이터에서 공통적으로 나타납니다. 반면, 상위 레이어(Output에 가까운 쪽)로 갈수록 구체적인 사물의 형태나 문맥의 의미와 같은 High-level Feature를 학습합니다.
Fine-tuning의 최적 시점: Warm-up 전략
사전 학습된 가중치는 이미 최적화된 상태이지만, 새로 추가된 최상위 분류기(FC Layer 등)는 랜덤 초기화 상태입니다. 이때 모든 레이어를 동시에 학습시키면 랜덤 가중치에서 발생하는 큰 오차(Gradient)가 사전 학습된 정교한 가중치를 파괴하는 Catastrophic Forgetting 현상이 발생합니다. 따라서 초기에는 하위 레이어를 동결하고 분류기만 학습시킨 후, 오차가 안정화된 시점에 점진적으로 하위 레이어의 동결을 해제하는 것이 최적의 시점입니다.
3. 실무 적용을 위한 Python 샘플 예제 (Example 7선)
PyTorch와 TensorFlow를 활용하여 실무에서 즉시 사용 가능한 전이 학습 제어 코드입니다.
Ex 1. PyTorch: 특정 레이어까지 동결하는 기본 방법
import torch.nn as nn
from torchvision import models
model = models.resnet50(pretrained=True)
# 모든 파라미터 동결
for param in model.parameters():
param.requires_grad = False
# 마지막 분류 레이어만 교체 (교체된 레이어는 자동으로 requires_grad=True)
model.fc = nn.Linear(model.fc.in_features, 10)
Ex 2. TensorFlow/Keras: 레이어 인덱스 기준 동결 해결
from tensorflow.keras.applications import VGG16
base_model = VGG16(weights='imagenet', include_top=False)
# 15번째 레이어까지만 고정하고 이후는 학습 허용
for layer in base_model.layers[:15]:
layer.trainable = False
for layer in base_model.layers[15:]:
layer.trainable = True
Ex 3. Fine-tuning 시 낮은 학습률(Learning Rate) 적용하기
# 사전 학습된 가중치를 보존하기 위해 기존 층에는 매우 낮은 LR 적용
optimizer = torch.optim.Adam([
{'params': model.layer4.parameters(), 'lr': 1e-5},
{'params': model.fc.parameters(), 'lr': 1e-3}
], lr=1e-4)
Ex 4. Keras: 모델을 학습 모드로 전환 후 레이어별 제어
base_model.trainable = True
# 특정 층(예: BatchNormalization)은 Fine-tuning 중에도 동결하는 것이 통계적으로 유리함
for layer in base_model.layers:
if isinstance(layer, tf.keras.layers.BatchNormalization):
layer.trainable = False
Ex 5. 점진적 레이어 해제(Unfreezing) 루틴 구현
def unfreeze_layers(model, num_layers):
# 뒤에서부터 n개의 레이어 학습 가능하도록 변경
layers = list(model.children())
for layer in layers[-num_layers:]:
for param in layer.parameters():
param.requires_grad = True
Ex 6. NLP BERT 모델의 특정 Transformer Block 고정
from transformers import BertForSequenceClassification
model = BertForSequenceClassification.from_pretrained('bert-base-uncased')
# 초기 6개 인코더 블록은 동결하여 언어 모델의 본질 유지
for param in model.bert.encoder.layer[:6].parameters():
param.requires_grad = False
Ex 7. Global Average Pooling을 활용한 특성 추출기 구성
import tensorflow as tf
# 특성 추출기 부분만 활용하여 새로운 데이터셋에 최적화
base_model = tf.keras.applications.MobileNetV2(input_shape=(224, 224, 3), include_top=False)
base_model.trainable = False
model = tf.keras.Sequential([
base_model,
tf.keras.layers.GlobalAveragePooling2D(),
tf.keras.layers.Dense(1, activation='sigmoid')
])
4. 결론: 성공적인 전이 학습을 위한 체크리스트
전이 학습은 단순히 코드를 복사하는 과정이 아니라 데이터 간의 위계적 특징을 이해하는 과정입니다.
- 유사성 검토: 타겟 데이터가 ImageNet과 비슷한가? 아니면 의료 영상처럼 전혀 다른가?
- Warm-up Period: 분류기가 안정화될 때까지 최소 3~5 에포크는 하위 레이어를 동결하십시오.
- LR 전략: Fine-tuning 시에는 Scratch 학습 때보다 최소 10배에서 100배 작은 학습률을 사용하십시오.
이러한 전략적 접근은 모델이 기존 지식을 망각하지 않으면서 새로운 도메인에 완벽히 적응하게 만드는 유일한 해결 방법입니다.
참고 문헌 (Sources)
- Yosinski, J., Clune, J., Bengio, Y., & Lipson, H. (2014). "How transferable are features in deep neural networks?". Advances in Neural Information Processing Systems (NeurIPS).
- Howard, J., & Ruder, S. (2018). "Universal Language Model Fine-tuning for Text Classification (ULMFiT)". ACL.
- Chollet, F. (2021). Deep Learning with Python. Manning Publications.
- PyTorch Tutorials: "Transfer Learning for Computer Vision Tutorial".
'Artificial Intelligence > 60. Python' 카테고리의 다른 글
| [PYTHON] Ensemble 기법의 3가지 핵심 Bagging, Boosting, Stacking 차이와 편향-분산 해결 방법 (0) | 2026.04.28 |
|---|---|
| [PYTHON] XAI 결과와 비즈니스 로직 상충 시 3가지 판단 기준과 해결 방법 (0) | 2026.04.28 |
| [PYTHON] 시계열 데이터 Cross-Validation의 3가지 데이터 누수 해결 방법과 방지 대책 (0) | 2026.04.28 |
| [PYTHON] 모델 경량화 QAT와 PTQ의 3가지 핵심 차이와 정확도 손실 해결 방법 (0) | 2026.04.28 |
| [PYTHON] 모델 Calibration의 3가지 핵심 지표와 서비스 신뢰도 해결 방법 (0) | 2026.04.28 |