아무것도 모르는 공대생의 지식 탐험기

모두의 딥러닝 8일차 (ch.10) 본문

카테고리 없음

모두의 딥러닝 8일차 (ch.10)

luvm._. 2025. 3. 5. 22:48

딥러닝 모델 설계 하기

신경망을 활용한 모델을 설계하는 것은 머신러닝과 딥러닝의 핵심 과정 중 하나이다. 이번 장에서는 폐암 수술 환자의 생존율 예측을 예제로 삼아 딥러닝 모델을 설계하는 과정을 살펴보겠다.

1. 모델의 정의

우리가 설계할 모델은 폐암 수술 환자의 다양한 특성을 입력으로 받아 수술 후 생존 가능성을 예측하는 이진 분류(Binary Classification) 모델이다. 이 모델을 구현하기 위해 다음과 같은 주요 개념들을 다룰 것이다.

  • 입력층, 은닉층, 출력층
  • 활성화 함수(ReLU, Sigmoid)
  • 손실 함수(Binary Crossentropy)
  • 경사 하강법(Adam Optimizer)
  • 학습 과정(Epochs, Batch Size)

2. 환경 및 데이터 준비

먼저, 모델을 구현하기 위해 필요한 라이브러리를 불러오고, 데이터를 준비한다.

# TensorFlow 및 필요한 라이브러리 불러오기
from tensorflow.keras.models import Sequential  # Sequential 모델을 사용하기 위한 클래스
from tensorflow.keras.layers import Dense  # Dense 층을 사용하기 위한 클래스
import numpy as np  # 데이터 처리를 위한 NumPy 라이브러리

# 수술 환자 데이터를 불러오기 (CSV 파일)
Data_set = np.loadtxt("./data/ThoraricSurgery3.csv", delimiter=",")

# 입력 데이터(X)와 타겟 데이터(y) 분리
X = Data_set[:,0:16]  # 환자의 특성 데이터 (16개 특성)
y = Data_set[:,16]  # 생존 여부 (0 또는 1)

이 데이터는 폐암 수술을 받은 환자들의 임상 기록을 포함하고 있으며, 각 환자별로 16개의 특성(연령, 건강 상태 등) 이 주어지고, 목표값은 수술 후 1년 생존 여부(0: 사망, 1: 생존) 이다.


3. 모델 설계 (Sequential 모델 구성)

딥러닝 모델을 구성하는 과정은 크게 세 단계로 나뉜다.

  1. 신경망의 구조를 정의 (Sequential 모델 사용)
  2. 각 층을 추가하며 뉴런 개수 및 활성화 함수 설정
  3. 모델을 컴파일하여 학습이 가능하도록 준비

3.1 입력층과 은닉층 정의

# Sequential 모델 생성
model = Sequential()

# 입력층 및 첫 번째 은닉층 추가
model.add(Dense(30, input_dim=16, activation='relu'))

💡 설명

  • Sequential(): 신경망을 순차적으로 쌓는 딥러닝 모델
  • Dense(30, input_dim=16, activation='relu')
    • 30개의 뉴런(노드) 을 가진 첫 번째 은닉층
    • 입력 데이터의 특성 개수는 16개 (input_dim=16)
    • 활성화 함수는 ReLU(Rectified Linear Unit) 사용

3.2 출력층 추가

# 출력층 추가
model.add(Dense(1, activation='sigmoid'))

💡 설명

  • Dense(1, activation='sigmoid')
    • 출력 뉴런 개수: 1개 (이진 분류 문제이므로 하나의 값을 출력)
    • 활성화 함수: Sigmoid (0과 1 사이의 확률로 변환)
    ![시그모이드 함수 그래프]
    • 0에 가까울수록 사망 가능성이 높고, 1에 가까울수록 생존 가능성이 높다.

4. 모델 컴파일 (손실 함수 및 옵티마이저 설정)

# 모델 컴파일
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

💡 설명

  • loss='binary_crossentropy': 이진 분류 문제에서 사용되는 손실 함수
  • optimizer='adam': Adam Optimizer 사용 (효율적인 경사 하강법)
  • metrics=['accuracy']: 모델 성능 평가 기준으로 정확도(Accuracy) 설정

5. 모델 학습 (Training)

# 모델 학습 실행
model.fit(X, y, epochs=100, batch_size=10)

💡 설명

  • epochs=100: 전체 데이터를 100번 반복 학습
  • batch_size=10: 10개의 샘플씩 나누어 가중치 업데이트 (소규모 배치 학습)

🔹 Epoch란? 모델이 전체 데이터를 한 번 학습하는 과정

🔹 Batch Size란? 학습할 때 한 번에 처리할 데이터 샘플 개수

🔹 Early Stopping을 활용하면 학습을 조기에 멈춰서 최적의 결과를 얻을 수 있음


6. 교차 엔트로피 손실 함수

이 모델에서 사용한 손실 함수(loss function)binary_crossentropy(이진 교차 엔트로피) 에 대해 알아보자.

📌 교차 엔트로피란?

교차 엔트로피(Cross Entropy)는 모델의 예측 확률과 실제 정답 간의 차이를 측정하는 방법이다.

  • 정답에 가까운 확률을 출력할수록 손실 값이 작아짐
  • 틀린 확률을 출력할수록 손실 값이 커짐

수식:

 

여기서:

  • : 실제 정답 (0 또는 1)
  • : 모델의 예측값 (0~1 사이의 확률)

예시:

  • 실제 정답이 1인데 예측이 0.9라면, 손실 값이 작다 → 좋은 예측
  • 실제 정답이 1인데 예측이 0.1이라면, 손실 값이 크다 → 나쁜 예측

7. 결론 및 정리

 모델 설계 과정 요약

  1. 데이터 준비: 환자의 생존 여부 데이터 불러오기
  2. 모델 구성: Sequential 모델 생성 및 신경망 층 추가
  3. 손실 함수 및 최적화 알고리즘 설정: binary_crossentropy, adam
  4. 모델 학습: model.fit()을 통해 가중치 조정 및 최적화 진행

 딥러닝 모델을 설계할 때 고려해야 할 사항

  • 은닉층의 개수와 뉴런 수: 문제에 따라 최적의 개수를 설정해야 함
  • 활성화 함수 선택: ReLU, Sigmoid, Softmax 등 적절한 함수 사용
  • 손실 함수 설정: 이진 분류(binary_crossentropy), 다중 분류(categorical_crossentropy) 등 문제에 맞는 함수 사용
  • 하이퍼파라미터 튜닝: 학습률, 배치 크기, 에포크 조정 등

이제 이 모델을 실제로 실행하고 성능을 평가하여 활용해볼 수 있다!