Skip to main content

ML에서 DL로

학습 목표

  • 머신러닝(ML)과 딥러닝(DL)의 핵심 차이를 설명할 수 있다
  • sklearn의 MLPClassifier와 PyTorch의 신경망 구현을 비교할 수 있다
  • 딥러닝이 필요한 상황과 그렇지 않은 상황을 판단할 수 있다
  • 특성 공학(Feature Engineering)에서 표현 학습(Representation Learning)으로의 패러다임 전환을 이해한다

왜 중요한가

머신러닝에서 딥러닝으로의 전환은 단순한 모델 교체가 아닙니다. 사람이 특성을 설계하는 방식에서 모델이 스스로 특성을 학습하는 방식으로의 근본적인 패러다임 전환입니다. 전통적 ML에서는 도메인 전문가가 원시 데이터에서 유의미한 특성을 직접 추출해야 했습니다. 반면 딥러닝은 원시 데이터를 입력받아 계층적으로 추상화된 표현을 자동으로 학습합니다.

ML vs DL: 핵심 비교

관점전통적 ML딥러닝
특성 추출사람이 설계 (Feature Engineering)모델이 학습 (Representation Learning)
데이터 요구량수백~수천 샘플수천~수백만 샘플
해석 가능성높음 (계수, 중요도)낮음 (블랙박스)
연산 자원CPU로 충분GPU 필요 (대규모)
비정형 데이터전처리 필수직접 처리 가능 (이미지, 텍스트, 음성)
모델 크기수백~수천 파라미터수만~수십억 파라미터
프레임워크scikit-learnPyTorch, TensorFlow

sklearn MLP vs PyTorch 구현 비교

같은 데이터셋(Iris)에 대해 sklearn의 MLPClassifier와 PyTorch의 신경망 구현을 비교합니다.

sklearn MLPClassifier

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score

# 데이터 준비
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 모델 정의 + 학습 (한 줄)
model = MLPClassifier(
    hidden_layer_sizes=(64, 32),  # 은닉층 구조
    activation='relu',            # 활성화 함수
    max_iter=200,                 # 최대 반복 횟수
    random_state=42
)
model.fit(X_train, y_train)

# 평가
y_pred = model.predict(X_test)
print(f"정확도: {accuracy_score(y_test, y_pred):.4f}")
sklearn은 데이터 전처리, 모델 정의, 학습, 평가가 모두 고수준 API 몇 줄로 완성됩니다. 내부의 역전파, 가중치 업데이트, 배치 처리는 모두 추상화되어 있습니다.

PyTorch 신경망

import torch
import torch.nn as nn
from torch.utils.data import DataLoader, TensorDataset
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# 데이터 준비
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 스케일링 + 텐서 변환
scaler = StandardScaler()
X_train = torch.FloatTensor(scaler.fit_transform(X_train))
X_test = torch.FloatTensor(scaler.transform(X_test))
y_train = torch.LongTensor(y_train)
y_test = torch.LongTensor(y_test)

# DataLoader 구성
train_loader = DataLoader(TensorDataset(X_train, y_train), batch_size=16, shuffle=True)

# 모델 정의
class IrisNet(nn.Module):
    def __init__(self):
        super().__init__()
        self.layers = nn.Sequential(
            nn.Linear(4, 64),    # 입력 4 → 은닉 64
            nn.ReLU(),
            nn.Linear(64, 32),   # 은닉 64 → 은닉 32
            nn.ReLU(),
            nn.Linear(32, 3),    # 은닉 32 → 출력 3 (클래스 수)
        )

    def forward(self, x):
        return self.layers(x)

# 학습 구성요소
model = IrisNet()
criterion = nn.CrossEntropyLoss()           # 손실 함수
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)  # 옵티마이저

# 학습 루프
for epoch in range(100):
    model.train()
    for batch_X, batch_y in train_loader:
        optimizer.zero_grad()               # 기울기 초기화
        outputs = model(batch_X)            # 순전파
        loss = criterion(outputs, batch_y)  # 손실 계산
        loss.backward()                     # 역전파
        optimizer.step()                    # 가중치 업데이트

# 평가
model.eval()
with torch.no_grad():
    outputs = model(X_test)
    _, predicted = torch.max(outputs, 1)
    accuracy = (predicted == y_test).float().mean()
    print(f"정확도: {accuracy:.4f}")
PyTorch에서는 모델 구조, 손실 함수, 옵티마이저, 학습 루프를 직접 정의합니다. 코드는 길어지지만, 모든 과정을 세밀하게 제어할 수 있습니다.

핵심 차이 요약

구성 요소sklearnPyTorch
모델 정의hidden_layer_sizes=(64, 32)nn.Module 클래스 상속
학습model.fit(X, y)에포크 루프 직접 작성
역전파내부 자동 처리loss.backward() 명시 호출
배치 처리내부 자동 처리DataLoader 직접 구성
GPU 활용불가.to(device) 한 줄로 전환
커스텀 레이어제한적자유로운 설계

딥러닝이 빛나는 영역

딥러닝은 모든 문제에 적합한 것은 아닙니다. 다음과 같은 특성을 가진 문제에서 전통적 ML보다 뚜렷한 이점을 보입니다.

비정형 데이터 처리

데이터 유형전통적 ML딥러닝
이미지수동 특성 추출 (HOG, SIFT)CNN이 자동 특성 학습
텍스트BoW, TF-IDF → 차원 축소임베딩 → RNN/Transformer
음성MFCC 추출 → 분류기원시 파형/스펙트로그램 직접 처리
동영상프레임별 특성 → 집계3D CNN, Video Transformer

대규모 데이터에서의 스케일링

데이터가 충분히 많고(수만 건 이상), 특성 공학이 어려운 복잡한 패턴이 존재하며, GPU 자원이 확보된 상황에서 딥러닝은 전통적 ML을 크게 능가합니다.

그래도 ML이 나은 경우

  • 정형 데이터(테이블)에서 XGBoost, LightGBM이 여전히 강력합니다
  • 데이터가 적은 경우(수백 건) 딥러닝은 과적합(Overfitting) 위험이 높습니다
  • 해석 가능성이 중요한 경우 선형 모델이나 결정 트리가 적합합니다
  • 학습 시간과 비용이 제한된 환경에서는 전통적 ML이 효율적입니다

패러다임 전환: 특성 공학 → 표현 학습

딥러닝의 가장 중요한 개념적 전환은 **표현 학습(Representation Learning)**입니다. 전통적 ML에서는 이미지 분류를 위해 에지 검출, 색상 히스토그램, 텍스처 패턴 등을 사람이 직접 추출해야 했습니다. 반면 CNN은 학습 과정에서 저수준 특성(에지, 코너)부터 고수준 특성(눈, 코, 얼굴)까지 계층적으로 자동 학습합니다. 이러한 계층적 표현 학습이 가능해진 것은 다음 세 가지 요소의 결합 덕분입니다.
  1. 대규모 데이터: ImageNet (1400만 이미지), Wikipedia (수십억 단어)
  2. GPU 연산 능력: 병렬 행렬 연산으로 학습 시간 단축
  3. 알고리즘 발전: 역전파, 드롭아웃, 배치 정규화 등 학습 안정화 기법
신경망 연구는 1950년대 퍼셉트론에서 시작되었지만, 데이터 부족과 연산 한계로 두 차례의 “AI 겨울”을 겪었습니다. 2012년 AlexNet이 ImageNet 대회에서 기존 방법을 크게 앞지르면서 딥러닝 시대가 열렸습니다. 핵심은 GPU, 빅데이터, 알고리즘이 동시에 성숙한 것입니다.
일반적으로 정형(tabular) 데이터에서는 XGBoost, LightGBM 등 그래디언트 부스팅 계열 모델이 딥러닝과 동등하거나 더 좋은 성능을 보입니다. TabNet, FT-Transformer 등 정형 데이터 특화 딥러닝 모델이 연구되고 있지만, 실무에서는 여전히 부스팅 모델이 더 많이 사용됩니다.
이 교육 과정에서는 PyTorch를 사용합니다. 2024년 기준 연구 커뮤니티와 산업 현장 모두에서 PyTorch가 지배적이며, Hugging Face, Meta AI, OpenAI 등 주요 연구 기관이 PyTorch를 기본 프레임워크로 채택하고 있습니다.

체크리스트

  • ML과 DL의 핵심 차이(특성 공학 vs 표현 학습)를 설명할 수 있다
  • sklearn MLPClassifier 코드를 읽고 각 파라미터의 역할을 이해한다
  • PyTorch 학습 루프의 5단계(zero_grad → forward → loss → backward → step)를 이해한다
  • 주어진 문제에 ML과 DL 중 적합한 접근을 판단할 수 있다

다음 문서