Theory/DL & Medical AI

[딥러닝을 활용한 의료 영상 처리 & 모델 개발] Part1-2. Deep Learning

YeonJuJeon 2024. 12. 27. 18:45

1. 딥러닝(Deep Learning)의 기초

딥러닝은 인간의 신경망을 모방하여 설계된 알고리즘으로, 주로 신경망(Neural Network)을 통해 데이터를 처리하고 학습한다.
 
퍼셉트론(Perceptron):

  • 신경망의 가장 기본 단위.
  • 선형 데이터를 처리할 수 있지만, 비선형 문제(XOR 등)는 해결하지 못한다.

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

  • 여러 은닉층(Hidden Layer)을 쌓아 비선형 데이터를 처리 가능.
  • 활성화 함수(Activation Function)를 통해 비선형성을 부여한다.

은닉층(Hidden Layer):

  • 새로운 특징을 추출하는 함수.

활성화 함수(Activation Function):

  • 출력 범위와 기울기 소멸 문제를 해결하기 위해 설계됨.
  • Sigmoid는 출력값을 0에서 1 사이로 제한하지만, 입력값이 큰 경우 기울기가 0에 가까워지는 문제가 있다.
  • Tanh는 출력값을 −1에서 1 사이로 제한하며, Sigmoid보다 학습이 빠르지만 여전히 기울기 소멸 문제가 있다.
  • ReLU는 음수 입력을 0으로, 양수 입력을 그대로 출력하여 계산 효율성이 높다. 다만, Dying ReLU 문제가 발생할 수 있다.
  • Leaky ReLU는 음수 입력에서도 작은 기울기를 유지하여 Dying ReLU 문제를 완화한다.

UAT (Universal Approximation Theorem): 하나의 은닉층을 가진 MLP도 적절한 뉴런 수와 활성화 함수가 있다면 임의의 연속 함수에 근사할 수 있다.

 


2. 역전파(Backpropagation)와 최적화(Optimization)

역전파(Backpropagation)

역전파는 신경망 학습 과정에서 손실 함수의 값을 줄이기 위해 기울기를 계산하고 가중치를 업데이트하는 알고리즘이다.

  • 개념: 출력층에서 계산된 손실 값을 입력층 방향으로 거슬러 올라가며 각 층의 기울기를 계산한다.
  • 기울기 계산: 각 뉴런의 가중치에 대해 손실 함수의 편미분 값을 계산한다.

수식

  1. 손실 함수 \(L\)의 출력값 \(\hat{y}\)에 대한 편미분:
    $$\frac{\partial L}{\partial \hat{y}}$$
  2. 출력값 \(\hat{y}\)와 가중치 \(W\) 사이의 관계를 통해 편미분을 전파:
    $$\frac{\partial L}{\partial W} = \frac{\partial L}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial W}$$
  3. 반복적으로 각 층의 가중치와 편미분 계산:
    $$W_{new} = W - \eta \cdot \frac{\partial L}{\partial W}$$
    여기서 \(\eta\)는 학습률(Learning Rate)이다.

손실 함수(Loss Function)

손실 함수는 모델의 예측 값 \(\hat{y}\)와 실제 값 \(y\) 간의 차이를 수치화하는 함수이다.

  • Cross-Entropy: 분류 문제에서 사용되며, 두 확률 분포 \(P\)\(Q\)간의 차이를 계산한다.
    $$L = - \sum_{i=1}^N y_i \log(\hat{y}_i)$$
  • Mean Squared Error (MSE): 회귀 문제에서 사용되며, 실제 값과 예측 값의 차이를 제곱한 평균을 계산한다.
    $$L = \frac{1}{N} \sum_{i=1}^N (y_i - \hat{y}_i)^2$$

경사 하강법(Gradient Descent)

경사 하강법은 손실 함수의 기울기를 따라 가중치를 업데이트하며 손실을 최소화하는 최적화 알고리즘이다.
 

  • SGD (Stochastic Gradient Descent)는 작은 배치 데이터에 대해 경사를 계산하여 빠른 학습을 지원한다.
  • Adam Optimizer는 학습률을 동적으로 조정하여 SGD보다 안정적으로 수렴한다.
    $$W_{t+1} = W_t - \eta \cdot \nabla L(W_t)$$
    여기서 \(W_t\)는 현재 가중치, \(\eta\)는 학습률, \(\nabla L\)은 손실 함수의 기울기이다.

 


3. 딥러닝 프레임워크

  • TensorFlow: Google에서 개발한 프레임워크로, 모델 배포(TensorFlow Lite, Serving)와 정적 그래프 활용에 강점이 있다.
  • PyTorch: Meta에서 개발한 프레임워크로, Pythonic한 코드와 동적 그래프를 제공하여 연구에 적합하다.
  • JAX: Google이 개발한 프레임워크로, 속도와 최적화가 뛰어나지만 생태계가 아직 작다.

4. 실습: Multi-Layer Perceptron(MLP)를 이용한 Image Classification

더보기
간단한 실습 과정이므로 코드는 생략함.

1. Iris 데이터셋 

  1. 모델 구조
    • 입력층: Iris 데이터의 4개 특징.
    • 은닉층: ReLU 활성화 함수와 5개 뉴런.
    • 출력층: 3개 클래스 분류.
  2. 학습 프로세스
    • 손실 함수: Cross-Entropy Loss.
    • 최적화: SGD (학습률 0.1).
    • 학습: 샘플 데이터를 입력받아 100번 반복 학습.
  3. 결과
    • 손실 감소 확인.
    • 은닉층의 뉴런 수를 증가시킬수록 더 낮은 손실 달성 가능.
    • 오버피팅 발생 가능성 확인.

2. MNIST 데이터셋

  1. 데이터 전처리
    • 28x28 이미지 데이터를 784 차원의 1D 벡터로 변환 후 Binary 형태로 시각화.
    • Cross-Entropy Loss 사용.
  2. 모델 구조
    • 입력층: 784개의 뉴런.
    • 은닉층: 1000개의 뉴런과 ReLU 활성화 함수.
    • 출력층: 10개의 클래스.
  3. 학습 프로세스
    • SGD를 이용해 100번 학습 반복.
    • 첫 5개 샘플에 대해 예측 결과 확인.

결론

딥러닝은 데이터를 통해 복잡한 패턴을 학습하고, 다양한 문제를 해결하는 데 정말 강력한 도구라는 점을 확인할 수 있었다. 이번 실습을 통해 MLP의 기본 구조와 PyTorch를 활용하는 방법을 배우며, 활성화 함수와 최적화 방법이 얼마나 중요한지 느낄 수 있었다. 특히, 은닉층의 뉴런 수와 모델의 복잡도가 성능에 큰 영향을 미친다는 점을 알게 되었고, 앞으로 딥러닝을 활용한 실험에서 과적합을 방지하고 모델의 일반화 성능을 높이는 방법에 대해 더 깊이 고민해봐야겠다는 생각이 들었다.