딥러닝
Deep Learning
다층 신경망을 사용하는 머신러닝 기법. 이미지 인식, 음성 처리, 자연어 처리의 핵심 기술.
Deep Learning
다층 신경망을 사용하는 머신러닝 기법. 이미지 인식, 음성 처리, 자연어 처리의 핵심 기술.
딥러닝(Deep Learning)은 여러 층의 인공 신경망을 사용하여 데이터에서 복잡한 패턴과 표현을 자동으로 학습하는 머신러닝의 한 분야입니다. "깊다(Deep)"는 표현은 신경망의 층(layer)이 여러 개 쌓여 있다는 의미로, 입력 데이터가 여러 단계의 비선형 변환을 거치며 점점 추상적인 특징으로 변환됩니다. 2012년 AlexNet의 ImageNet 경연대회 우승을 기점으로 현대 AI 혁명의 핵심 기술이 되었습니다.
딥러닝의 핵심 아키텍처는 용도에 따라 발전해왔습니다. CNN(합성곱 신경망)은 이미지 인식에, RNN/LSTM은 순차 데이터에, Transformer는 자연어 처리에 특화되어 있습니다. 2024-2025년 현재 Transformer 아키텍처가 거의 모든 분야를 지배하고 있으며, GPT-4, Claude, Gemini 같은 대형 언어 모델(LLM)부터 Vision Transformer(ViT), Audio Spectrogram Transformer까지 확장되었습니다.
딥러닝의 학습은 역전파(Backpropagation) 알고리즘을 통해 이루어집니다. 입력 데이터를 순전파하여 예측값을 얻고, 손실 함수로 오차를 계산한 뒤, 경사하강법으로 가중치를 업데이트합니다. 현대 딥러닝은 Adam, AdamW 같은 적응형 옵티마이저, Learning Rate Scheduler, Gradient Clipping 등의 기법으로 학습 안정성을 확보합니다. 대규모 모델 학습에는 분산 학습(DDP, FSDP)과 혼합 정밀도(Mixed Precision)가 필수입니다.
산업 전반에서 딥러닝은 핵심 기술로 자리잡았습니다. 자율주행(Tesla FSD, Waymo), 의료 영상 분석(암 진단), 신약 개발(AlphaFold 단백질 구조 예측), 음성 인식(Whisper), 추천 시스템(Netflix, YouTube), 생성 AI(ChatGPT, Stable Diffusion) 등 현대 기술의 대부분이 딥러닝에 기반합니다. 2025년에는 에이전트 AI, 멀티모달 모델, 온디바이스 AI가 주요 트렌드로 부상하고 있습니다.
PyTorch 딥러닝 기본 구조 (CNN 이미지 분류)
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader
from torchvision import datasets, transforms
# 1. 모델 정의 (ResNet 스타일 블록 포함)
class DeepCNN(nn.Module):
def __init__(self, num_classes=10):
super().__init__()
self.features = nn.Sequential(
# Conv Block 1
nn.Conv2d(3, 64, 3, padding=1),
nn.BatchNorm2d(64),
nn.ReLU(inplace=True),
nn.MaxPool2d(2),
# Conv Block 2
nn.Conv2d(64, 128, 3, padding=1),
nn.BatchNorm2d(128),
nn.ReLU(inplace=True),
nn.MaxPool2d(2),
# Conv Block 3
nn.Conv2d(128, 256, 3, padding=1),
nn.BatchNorm2d(256),
nn.ReLU(inplace=True),
nn.AdaptiveAvgPool2d((1, 1))
)
self.classifier = nn.Sequential(
nn.Flatten(),
nn.Linear(256, 128),
nn.ReLU(inplace=True),
nn.Dropout(0.5),
nn.Linear(128, num_classes)
)
def forward(self, x):
x = self.features(x)
x = self.classifier(x)
return x
# 2. 데이터 로딩 및 전처리
transform = transforms.Compose([
transforms.RandomHorizontalFlip(),
transforms.RandomCrop(32, padding=4),
transforms.ToTensor(),
transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))
])
train_dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=128, shuffle=True, num_workers=4)
# 3. 학습 루프 (현대적 관행 포함)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = DeepCNN(num_classes=10).to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.AdamW(model.parameters(), lr=1e-3, weight_decay=0.01)
scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=100)
for epoch in range(100):
model.train()
for images, labels in train_loader:
images, labels = images.to(device), labels.to(device)
optimizer.zero_grad()
outputs = model(images)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
scheduler.step()
print(f"Epoch {epoch+1}, Loss: {loss.item():.4f}, LR: {scheduler.get_last_lr()[0]:.6f}")
Transformer 기반 모델 (Hugging Face 활용)
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from transformers import TrainingArguments, Trainer
import torch
# 1. 사전학습 모델 로드 (BERT, RoBERTa 등)
model_name = "klue/bert-base"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(
model_name,
num_labels=2, # 이진 분류
problem_type="single_label_classification"
)
# 2. 데이터 토큰화
def tokenize_function(examples):
return tokenizer(
examples["text"],
padding="max_length",
truncation=True,
max_length=512
)
# 3. Fine-tuning 설정
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=16,
per_device_eval_batch_size=32,
learning_rate=2e-5,
warmup_ratio=0.1,
weight_decay=0.01,
logging_steps=100,
evaluation_strategy="epoch",
save_strategy="epoch",
load_best_model_at_end=True,
fp16=True, # Mixed Precision 학습
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
)
# 4. 학습 및 추론
trainer.train()
# 추론 예시
inputs = tokenizer("딥러닝은 정말 강력한 기술입니다", return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
prediction = torch.argmax(outputs.logits, dim=1)
print(f"예측: {'긍정' if prediction == 1 else '부정'}")
| 모델 규모 | 파라미터 수 | 학습 GPU | 학습 비용 (추정) |
|---|---|---|---|
| 소형 CNN (ResNet-18) | 11M | RTX 3090 1장 | 수 시간, 전기료 수천원 |
| BERT-base | 110M | V100 8장 | 4일, 수십만원 |
| LLaMA-7B | 7B | A100 80GB 8장 | 2-4주, 수천만원 |
| GPT-4 급 | ~1.8T (추정) | A100 25,000장+ | 수천억원 (추정) |
| Fine-tuning (LoRA) | 원본 1% 미만 | RTX 4090 1장 | 수 시간, 수만원 |
실무 가이드: 대부분의 비즈니스 문제는 사전학습 모델 Fine-tuning으로 해결 가능합니다. Hugging Face의 PEFT(LoRA, QLoRA)를 사용하면 소비자용 GPU에서도 7B 모델을 Fine-tuning할 수 있습니다. 직접 학습보다 API 사용이 비용 효율적인 경우가 많습니다.
"기존 규칙 기반 시스템 대비 딥러닝 모델이 정확도를 15% 향상시켰습니다. 초기 개발 비용은 높지만, 새로운 케이스에 대한 유지보수가 줄어들어 장기적으로 운영 비용이 40% 절감될 것으로 예상됩니다."
"현재 데이터 규모로는 처음부터 학습(from scratch)하기 어렵습니다. 사전학습 모델을 Fine-tuning하는 게 훨씬 효율적입니다. BERT나 ResNet을 베이스라인으로 시작하고, LoRA로 효율적으로 적응시키죠."
"딥러닝의 핵심은 표현 학습(Representation Learning)입니다. 전통적인 머신러닝은 사람이 특징을 설계해야 했지만, 딥러닝은 데이터에서 자동으로 계층적 특징을 학습합니다. 낮은 층에서는 엣지, 텍스처 같은 저수준 특징을, 높은 층에서는 객체, 개념 같은 고수준 특징을 추출합니다."
"Garbage In, Garbage Out" - 아무리 정교한 모델도 나쁜 데이터를 보완할 수 없습니다. 모델 아키텍처를 개선하기 전에 데이터 품질 검증, 레이블 정확성, 클래스 불균형 문제를 먼저 해결하세요.
Learning rate, batch size, layer 수 등을 무작정 튜닝하기보다 검증된 레시피를 먼저 적용하세요. 대부분의 문제에서 Adam/AdamW + Cosine Annealing + 적절한 정규화가 좋은 출발점입니다.
1) 데이터 품질 검증에 전체 시간의 40% 투자하세요. 2) 먼저 간단한 베이스라인(Linear, 작은 MLP)으로 문제 난이도를 파악하세요. 3) 검증된 사전학습 모델로 시작하고 점진적으로 개선하세요. 4) 실험을 체계적으로 기록하고(MLflow, Weights & Biases) 재현 가능하게 유지하세요.