티스토리 뷰

728x90
반응형

딥러닝 모델을 구축한 후, 효과적으로 학습시키기 위해서는 손실 함수(Loss Function), 최적화 알고리즘(Optimizer), **평가 지표(Metrics)**를 적절하게 선택해야 합니다. 또한 콜백(Callback) 기능을 활용하면 학습 과정을 더 효율적으로 관리할 수 있습니다.

이번 글에서는 모델의 컴파일, 학습 및 평가 방법을 알아보고, 학습 결과를 시각화하는 방법까지 살펴보겠습니다.


1. 손실 함수, 최적화 알고리즘, 평가 지표 선택 방법

1️⃣ 손실 함수(Loss Function)

손실 함수는 모델의 예측값과 실제값의 차이를 측정하여 모델이 얼마나 잘못 예측했는지를 나타냅니다.
적절한 손실 함수를 선택하는 것이 학습 성능에 큰 영향을 미칩니다.

문제 유형손실 함수

이진 분류(Binary Classification) binary_crossentropy
다중 클래스 분류(Multi-class Classification) categorical_crossentropy (원-핫 인코딩), sparse_categorical_crossentropy (정수 라벨)
회귀(Regression) mean_squared_error(MSE), mean_absolute_error(MAE), huber_loss

예제:

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

2️⃣ 최적화 알고리즘(Optimizer)

최적화 알고리즘은 모델의 가중치를 업데이트하여 손실을 최소화하는 역할을 합니다.

최적화 알고리즘특징

SGD (확률적 경사 하강법) 단순하지만 수렴 속도가 느림
Adam 가장 널리 사용되는 옵티마이저, 가중치 업데이트가 동적 조정됨
RMSprop RNN과 같은 시계열 데이터에서 효과적

예제:

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

3️⃣ 평가 지표(Metrics)

모델의 성능을 평가하는 기준으로, 손실 함수와는 별개로 설정됩니다.

문제 유형평가 지표

이진 분류 accuracy, AUC, precision, recall
다중 클래스 분류 accuracy
회귀 mean_absolute_error(MAE), mean_squared_error(MSE)

예제:

model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mae'])

2. 콜백(Callback) 활용

콜백(Callback)은 학습 도중 특정 조건을 만족하면 자동으로 특정 동작을 수행하는 기능입니다.
모델 학습을 효과적으로 관리할 수 있도록 도와줍니다.

(1) Early Stopping (조기 종료)

  • 학습이 일정 수준 이상 향상되지 않으면 자동으로 중단하여 과적합(Overfitting) 방지
  • monitor: 모니터링할 지표 설정 (val_loss 또는 val_accuracy)
  • patience: 개선되지 않으면 몇 번의 epoch 이후 종료할지 설정
from tensorflow.keras.callbacks import EarlyStopping

early_stopping = EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True)

model.fit(x_train, y_train, epochs=50, batch_size=32, validation_data=(x_val, y_val), callbacks=[early_stopping])

(2) Model Checkpoint (최적 모델 저장)

  • 학습 중 가장 좋은 모델을 저장하여 나중에 불러올 수 있도록 함
  • save_best_only=True: 가장 좋은 성능의 모델만 저장
from tensorflow.keras.callbacks import ModelCheckpoint

checkpoint = ModelCheckpoint('best_model.h5', monitor='val_loss', save_best_only=True)

model.fit(x_train, y_train, epochs=50, batch_size=32, validation_data=(x_val, y_val), callbacks=[checkpoint])

(3) ReduceLROnPlateau (학습률 감소)

  • val_loss가 개선되지 않을 경우, 학습률을 자동으로 줄여서 최적의 성능을 찾음
from tensorflow.keras.callbacks import ReduceLROnPlateau

reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=3)

model.fit(x_train, y_train, epochs=50, batch_size=32, validation_data=(x_val, y_val), callbacks=[reduce_lr])

3. 학습 결과 시각화 및 해석

모델 학습이 끝난 후, 학습 과정의 손실과 정확도를 시각화하여 성능을 분석할 수 있습니다.

import matplotlib.pyplot as plt

history = model.fit(x_train, y_train, epochs=30, batch_size=32, validation_data=(x_val, y_val))

# 학습 결과 시각화
plt.figure(figsize=(12, 5))

# 1) Loss 그래프
plt.subplot(1, 2, 1)
plt.plot(history.history['loss'], label='Train Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.title('Loss Trend')
plt.legend()

# 2) Accuracy 그래프
plt.subplot(1, 2, 2)
plt.plot(history.history['accuracy'], label='Train Accuracy')
plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.title('Accuracy Trend')
plt.legend()

plt.show()
 

그래프 해석 방법

  1. Train Loss와 Validation Loss가 함께 감소하면 정상적인 학습 진행
  2. Train Loss는 감소하는데 Validation Loss가 증가하면 과적합 발생 가능성
  3. Accuracy가 일정 수준에서 정체된다면 하이퍼파라미터 조정 필요

4. 모델 평가 및 예측

(1) 모델 평가

test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"테스트 정확도: {test_acc:.4f}")
 

(2) 모델 예측

predictions = model.predict(x_test[:5])

# 예측된 클래스 출력
import numpy as np
predicted_labels = np.argmax(predictions, axis=1)
print("예측된 라벨:", predicted_labels)

결론

이번 글에서는 모델의 컴파일, 학습 및 평가 방법을 배웠습니다.
핵심 정리 ✅

1️⃣ 손실 함수, 최적화 알고리즘, 평가 지표 선택
2️⃣ 콜백(callback) 활용: Early Stopping, Model Checkpoint, ReduceLROnPlateau
3️⃣ 학습 결과 시각화 및 분석
4️⃣ 모델 평가 및 예측

이제 다음 단계로, 모델 저장 및 재사용 방법을 배워보겠습니다! 🚀

728x90
반응형