컴퓨터과학 챕터 3 약 9분

Ch3. 머신러닝 기초 — 딥러닝과 신경망

O
OIYO 편집부 기여자
3/6

딥러닝이란 무엇인가

딥러닝(Deep Learning)은 인간 뇌의 신경망 구조에서 영감을 받은 다층 인공신경망을 기반으로 데이터에서 계층적 표현을 자동으로 학습하는 머신러닝의 한 분야입니다.

전통적 머신러닝:
  원시 데이터 → [특성 공학(사람이 설계)] → 모델 학습 → 예측

딥러닝:
  원시 데이터 → [자동 특성 추출(신경망이 스스로)] → 예측

딥러닝이 특히 강력한 이유는 특성 공학(Feature Engineering)을 자동화하기 때문입니다. 이미지, 음성, 텍스트처럼 사람이 규칙을 명시하기 어려운 데이터에서 큰 강점을 발휘합니다.

딥러닝이 빛나는 영역:

  • 이미지 인식·객체 탐지 (CNN 기반)
  • 음성 인식·자연어 처리 (RNN, Transformer 기반)
  • 게임 플레이·로봇 제어 (강화학습 + 딥러닝)
  • 의료 영상 분석·신약 개발

퍼셉트론 — 신경망의 출발점

단일 퍼셉트론 (Single Perceptron)

1957년 Frank Rosenblatt이 제안한 퍼셉트론은 인공 신경망의 가장 기본 단위입니다.

단일 퍼셉트론 구조:

입력:  x₁, x₂, ..., xₙ
가중치: w₁, w₂, ..., wₙ
편향:  b

선형 결합:  z = w₁x₁ + w₂x₂ + ... + wₙxₙ + b
           z = wᵀx + b

활성화:    y = f(z)  ← 활성화 함수 적용

퍼셉트론 하나는 **논리 게이트(AND, OR)**를 표현할 수 있지만, XOR 문제처럼 선형으로 분리되지 않는 패턴은 해결하지 못합니다. 이 한계를 극복하기 위해 퍼셉트론을 여러 층으로 쌓은 **다층 퍼셉트론(MLP)**이 등장했습니다.

생물학적 뉴런과의 비교

생물학적 뉴런          인공 퍼셉트론
────────────         ─────────────
수상돌기 (dendrite)  →  입력값 xᵢ
시냅스 강도           →  가중치 wᵢ
세포체 합산           →  선형 결합 z = wᵀx + b
활동 전위 발화 여부   →  활성화 함수 f(z)
축삭 돌기 출력        →  출력값 y

다층 퍼셉트론 (MLP, Multi-Layer Perceptron)

MLP는 **입력층(Input Layer), 하나 이상의 은닉층(Hidden Layer), 출력층(Output Layer)**으로 구성됩니다.

MLP 구조 예시 (2개 은닉층):

입력층        은닉층 1      은닉층 2      출력층
[x₁]    →   [h₁¹]   →   [h₁²]   →   [y₁]
[x₂]    →   [h₂¹]   →   [h₂²]   →   [y₂]
[x₃]    →   [h₃¹]   →   [h₃²]
            [h₄¹]

각 화살표: 가중치 w (학습 대상 파라미터)

“딥(Deep)“의 의미: 은닉층이 2개 이상이면 딥러닝이라고 부릅니다. 층이 깊을수록 더 복잡한 표현을 학습할 수 있습니다.

층별 학습 내용 예시 (이미지 분류 CNN 기준):
1층: 엣지, 선 탐지
2층: 곡선, 패턴 조합
3층: 눈·코·귀 같은 부분 형태
4층: 얼굴, 자동차 등 고수준 개념

순전파 (Forward Propagation)

입력이 각 층을 통과하며 최종 출력이 계산되는 과정입니다.

# 순전파 수식 (층 l → l+1)
z[l] = W[l] @ a[l-1] + b[l]  # 선형 변환
a[l] = f(z[l])                # 활성화 함수 적용

# 예시: 2층 MLP
z1 = W1 @ x + b1              # 은닉층 선형 결합
a1 = relu(z1)                  # 은닉층 활성화
z2 = W2 @ a1 + b2             # 출력층 선형 결합
y_hat = softmax(z2)            # 출력층 활성화 (다중 분류)

활성화 함수 (Activation Functions)

활성화 함수는 **비선형성(Non-linearity)**을 도입하여 신경망이 단순한 선형 모델을 넘어 복잡한 패턴을 학습할 수 있게 합니다. 활성화 함수 없이는 아무리 층을 쌓아도 결국 하나의 선형 변환과 동일합니다.

Sigmoid

σ(z) = 1 / (1 + e^(-z))

출력 범위: (0, 1)
용도: 이진 분류 출력층
단점: 기울기 소실(Vanishing Gradient) — z가 매우 크거나 작으면
      미분값 ≈ 0 → 학습 정체
      출력이 0.5 중심으로 편향 → 학습 속도 저하

Tanh (Hyperbolic Tangent)

tanh(z) = (e^z - e^(-z)) / (e^z + e^(-z))

출력 범위: (-1, 1)
장점: 0 중심(zero-centered) → Sigmoid보다 학습 빠름
단점: Sigmoid와 동일한 기울기 소실 문제
용도: RNN 계열, 은닉층 (Sigmoid보다 선호)

ReLU (Rectified Linear Unit)

ReLU(z) = max(0, z)

z < 0: 출력 0 (뉴런 비활성화)
z ≥ 0: 출력 z (선형 통과)

장점:
  - 계산 단순 → 훈련 빠름
  - 기울기 소실 문제 크게 완화
  - 대부분의 은닉층에서 기본값으로 사용
단점:
  - Dying ReLU: 음수 입력 시 기울기 영구 0 (뉴런 사망)
  - 해결책: Leaky ReLU, ELU, GELU

Leaky ReLU

Leaky ReLU(z) = max(0.01z, z)

음수 영역에서도 작은 기울기(0.01) 유지
→ Dying ReLU 문제 완화

Softmax

softmax(zᵢ) = e^zᵢ / Σⱼ e^zʲ

출력 범위: (0, 1), 합계 = 1 (확률 분포)
용도: 다중 클래스 분류 출력층

예시 (3클래스):
z = [2.0, 1.0, 0.5]
softmax(z) ≈ [0.659, 0.242, 0.099]
→ 클래스 0이 65.9% 확률로 최고 예측

활성화 함수 선택 가이드

위치권장 활성화 함수
은닉층 (일반)ReLU (기본값)
은닉층 (깊은 네트워크)Leaky ReLU, GELU
출력층 — 이진 분류Sigmoid
출력층 — 다중 분류Softmax
출력층 — 회귀없음 (Linear)

역전파 알고리즘 (Backpropagation)

역전파는 손실함수의 기울기를 출력층에서 입력층 방향으로 연쇄법칙(Chain Rule)을 통해 계산하는 알고리즘입니다. 딥러닝 학습의 핵심입니다.

직관적 이해

순전파(Forward Pass):
  입력 → ... → 출력 → 손실(Loss) 계산

역전파(Backward Pass):
  손실 → 출력층 기울기 계산
       → 은닉층 2 기울기 계산 (연쇄법칙)
       → 은닉층 1 기울기 계산 (연쇄법칙)
       → 가중치 업데이트

"잘못된 예측의 책임을 각 가중치에게 역으로 분배하는 과정"

연쇄법칙 (Chain Rule)

합성함수 미분:
y = f(g(x)) → dy/dx = (dy/dg) × (dg/dx)

신경망에서:
L = Loss(y_hat, y)
y_hat = f(z) = f(Wx + b)

∂L/∂W = (∂L/∂y_hat) × (∂y_hat/∂z) × (∂z/∂W)
         ─────────────  ──────────────  ──────────
         손실의 기울기    활성화 함수 미분  입력값 x

가중치 업데이트 (Gradient Descent + Backprop)

# 1 에폭의 학습 과정 (의사코드)
for X_batch, y_batch in data_loader:
    # 순전파
    y_hat = model.forward(X_batch)
    loss = criterion(y_hat, y_batch)

    # 역전파
    optimizer.zero_grad()   # 이전 기울기 초기화
    loss.backward()         # 역전파 (기울기 계산)
    optimizer.step()        # 가중치 업데이트

과적합 방지 기법

딥러닝 모델은 파라미터 수가 매우 많아 과적합(Overfitting)에 취약합니다.

드롭아웃 (Dropout)

훈련 중 각 에폭마다 랜덤으로 일부 뉴런을 비활성화

드롭아웃 비율 p = 0.5 → 50%의 뉴런을 랜덤으로 제거

효과:
  - 특정 뉴런에 의존하지 않도록 강제 → 일반화 향상
  - 여러 개의 서로 다른 네트워크를 동시에 훈련하는 효과
  - 추론(Inference) 시에는 비활성화 (모든 뉴런 사용)
import tensorflow as tf

model = tf.keras.Sequential([
    tf.keras.layers.Dense(256, activation='relu'),
    tf.keras.layers.Dropout(0.5),   # 50% 드롭아웃
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dropout(0.3),   # 30% 드롭아웃
    tf.keras.layers.Dense(10, activation='softmax')
])

배치 정규화 (Batch Normalization)

각 미니배치마다 층의 입력값을 정규화
→ 평균 0, 분산 1로 표준화 후 스케일·이동 파라미터 적용

효과:
  - 내부 공변량 이동(Internal Covariate Shift) 감소
  - 더 높은 학습률 사용 가능 → 빠른 학습
  - 약한 정규화 효과 → 드롭아웃을 줄여도 됨
  - 가중치 초기화에 덜 민감

수식:
  x_norm = (x - μ_batch) / √(σ²_batch + ε)
  output = γ × x_norm + β   (γ, β: 학습 파라미터)

L1 · L2 정규화 (Weight Decay)

L2 정규화 (Ridge):
손실함수 = 원래손실 + λ × Σwᵢ²
→ 가중치를 0에 가깝게 (작게) 유지
→ 가장 많이 사용됨

L1 정규화 (Lasso):
손실함수 = 원래손실 + λ × Σ|wᵢ|
→ 일부 가중치를 정확히 0으로 만듦 (희소성, Sparsity)
→ 특성 선택 효과

조기 종료 (Early Stopping)

검증 손실이 더 이상 감소하지 않으면 훈련 중단

  훈련 손실   ↓↓↓↓↓↓↓↓↓↓↓↓↓
  검증 손실   ↓↓↓↓→→↑↑↑  ← 여기서 중단!

과적합 시작점 이전에 최적 파라미터 저장

CNN 기초 (Convolutional Neural Network)

CNN은 이미지 처리에 특화된 신경망으로, 지역적 패턴을 효과적으로 탐지합니다.

핵심 연산: 합성곱 (Convolution)

이미지 위에 작은 필터(커널)를 슬라이딩하며 특성 추출

3×3 필터 예시 (엣지 탐지):
┌─────────────┐
│ -1  -1  -1  │
│  0   0   0  │
│  1   1   1  │
└─────────────┘

→ 수평 엣지 강조
→ 다양한 필터로 다양한 특성 자동 학습

CNN 주요 구성 요소

Convolutional Layer:
  - 학습 가능한 필터(커널) 적용
  - 특성 맵(Feature Map) 생성
  - 파라미터 공유 → 전통 MLP보다 파라미터 대폭 감소

Pooling Layer (Max Pooling):
  - 특성 맵의 공간 해상도 감소
  - 위치 불변성(Translation Invariance) 부여
  - 2×2 Max Pooling: 4개 값 중 최대값만 유지

Flatten + Dense Layer:
  - 추출된 특성을 1D 벡터로 변환
  - 분류를 위한 완전연결층 연결
# TensorFlow/Keras CNN 기본 구조
model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dropout(0.5),
    tf.keras.layers.Dense(10, activation='softmax')  # 10개 클래스 분류
])

핵심 개념 카드

퍼셉트론 → MLP 진화 ★★★★★ : 단일 퍼셉트론은 선형 분리만 가능. 은닉층을 추가한 MLP는 비선형 패턴 학습 가능. “딥”=은닉층 2개 이상. 암기 포인트: XOR 문제가 MLP 탄생의 계기

활성화 함수의 역할 ★★★★★ : 비선형성 도입. 없으면 아무리 깊어도 선형 변환. 은닉층은 ReLU, 출력층은 목적에 따라(Sigmoid/Softmax/Linear). 암기 포인트: ReLU = max(0,z) — 계산 단순, 기울기 소실 완화

역전파 = 연쇄법칙 기울기 전파 ★★★★★ : 손실에서 역방향으로 연쇄법칙 적용 → 각 가중치의 기울기 계산 → 경사하강법으로 업데이트. 암기 포인트: 순전파로 예측, 역전파로 학습

드롭아웃 정규화 ★★★★☆ : 훈련 중 랜덤으로 뉴런 비활성화 → 특정 뉴런 의존 방지 → 일반화 향상. 추론 시에는 전체 뉴런 사용. 암기 포인트: p=0.5면 절반을 랜덤으로 끄는 것

배치 정규화 효과 ★★★★☆ : 미니배치 단위로 입력 정규화 → 학습 안정화·가속화. 드롭아웃과 함께 사용하거나 대체 가능. 암기 포인트: γ, β는 학습 파라미터 — 스케일과 이동을 모델이 결정


실전 퀴즈

Q1. 활성화 함수가 없다면 10개의 층을 쌓아도 의미가 없는 이유를 설명하라.

활성화 함수 없이는 각 층이 선형 변환 y = Wx + b만 수행합니다. 여러 선형 변환의 합성은 결국 하나의 선형 변환과 동일하므로 (W₂(W₁x + b₁) + b₂ = W’x + b’), 아무리 층을 쌓아도 단순 선형회귀와 동일한 표현력을 가집니다. 활성화 함수를 통해 비선형성을 도입해야 복잡한 패턴 학습이 가능합니다.

Q2. Sigmoid 대신 ReLU를 은닉층에 주로 사용하는 이유는?

Sigmoid는 z값이 매우 크거나 작을 때 기울기가 0에 가까워지는 기울기 소실(Vanishing Gradient) 문제가 발생하여 깊은 네트워크에서 학습이 정체됩니다. 반면 ReLU(max(0,z))는 양수 구간에서 기울기가 항상 1로 일정하여 기울기 소실 문제가 크게 완화되고, 계산도 단순하여 훈련 속도가 훨씬 빠릅니다.

Q3. 드롭아웃을 훈련 시에만 적용하고 추론 시에는 사용하지 않는 이유는?

드롭아웃은 훈련 중 일반화를 위한 정규화 기법으로, 매번 다른 서브네트워크를 훈련하는 효과를 냅니다. 추론(예측) 시에는 불확실성 없이 최선의 단일 예측을 내야 하므로 모든 뉴런을 사용합니다. 대신 드롭아웃 비율만큼 가중치를 스케일링하여 훈련·추론 시 출력 기댓값을 일치시킵니다.

Q4. 역전파에서 연쇄법칙이 필요한 이유는?

손실함수 L은 출력층 → 여러 은닉층 → 입력층을 거쳐 만들어진 합성함수입니다. 특정 가중치 W에 대한 손실의 기울기 ∂L/∂W를 구하려면, L이 그 가중치에 간접적으로 영향을 받기 때문에 중간 층들의 기울기를 곱해가는 연쇄법칙이 반드시 필요합니다.

Q5. CNN이 일반 MLP보다 이미지 처리에 유리한 두 가지 이유는?

첫째, 파라미터 공유(Parameter Sharing): 하나의 필터가 이미지 전체에 걸쳐 슬라이딩하므로 파라미터 수가 대폭 줄어 학습이 효율적입니다. 둘째, 지역적 연결(Local Connectivity): 가까운 픽셀끼리만 연결하여 공간적 지역성을 반영하고, 풀링을 통해 **위치 불변성(Translation Invariance)**을 가집니다. 이미지에서 고양이가 왼쪽에 있든 오른쪽에 있든 같은 고양이로 인식하는 것이 이 덕분입니다.

O

OIYO 편집부

Content Editor

지식 인큐베이터이자 전문 콘텐츠 크리에이터. 경영, 경제, 법률 및 실생활에 유용한 실무/자격증 중심의 깊이 있는 정보를 연구하고 공유합니다.