아무것도 모르는 공대생의 지식 탐험기
모두의 딥러닝 8일차 (ch.10) 본문
딥러닝 모델 설계 하기
신경망을 활용한 모델을 설계하는 것은 머신러닝과 딥러닝의 핵심 과정 중 하나이다. 이번 장에서는 폐암 수술 환자의 생존율 예측을 예제로 삼아 딥러닝 모델을 설계하는 과정을 살펴보겠다.
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 모델 구성)
딥러닝 모델을 구성하는 과정은 크게 세 단계로 나뉜다.
- 신경망의 구조를 정의 (Sequential 모델 사용)
- 각 층을 추가하며 뉴런 개수 및 활성화 함수 설정
- 모델을 컴파일하여 학습이 가능하도록 준비
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. 결론 및 정리
모델 설계 과정 요약
- 데이터 준비: 환자의 생존 여부 데이터 불러오기
- 모델 구성: Sequential 모델 생성 및 신경망 층 추가
- 손실 함수 및 최적화 알고리즘 설정: binary_crossentropy, adam
- 모델 학습: model.fit()을 통해 가중치 조정 및 최적화 진행
딥러닝 모델을 설계할 때 고려해야 할 사항
- 은닉층의 개수와 뉴런 수: 문제에 따라 최적의 개수를 설정해야 함
- 활성화 함수 선택: ReLU, Sigmoid, Softmax 등 적절한 함수 사용
- 손실 함수 설정: 이진 분류(binary_crossentropy), 다중 분류(categorical_crossentropy) 등 문제에 맞는 함수 사용
- 하이퍼파라미터 튜닝: 학습률, 배치 크기, 에포크 조정 등
이제 이 모델을 실제로 실행하고 성능을 평가하여 활용해볼 수 있다!