Overfitting and Underfitting

이상해씨·2024년 1월 19일
0

DL

목록 보기
5/7

Interpreting the Learning Curves

  • 모델 훈련 데이터 종류

    • signal (신호) : 일반화되는 부분, 새로운 데이터로 부터 모델이 예측을 하는데 돕는 부분
    • noise (노이즈) : 훈련데이터에만 해당되는 부분, 데이터에서 나오는 무작위한 변동이나 모델 예측에 도움이 되지 않는 우연한 패턴. 실제로 학습에 도움이 되지 않는 부분
  • 모델 훈련시 손실을 최소화하는 가중치나 매개변수 선택

  • 학습곡선(learning curves) : 에포크(evpochs) 별 손실(loss) 그래프에 검증 데이터에 대한 손실도 추가

    • 모델을 효과적으로 훈련시키기 위하여 학습곡선을 해석하고 적용할 수 있어야 함
      (The validation loss gives an estimate of the expected error on unseen data.)
  • 모델 훈련에서 손실은 모델이 신호나 노이즈 학습을 할 때 모두 감소

  • 검증 손실의 경우, 모델이 신호를 학습할 때만 감소 (모델이 훈련 세트에서 학습한 노이즈는 새로운 데이터에 일반화되지 않음)

  • 모델이 신호를 학습하면 두 곡선은 내려가지만, 오델이 노이즈를 학습할 경우, 곡선 사이에 간격이 생기며, 이 간격은 모델이 얼마나 많은 노이즈를 학습했는가에 대한 것을 나타낸다 .

overfitting and underfitting

  • 모든 신호를 학습하고 노이즈를 학습하지 않는 것이 바람직하나, 현실에서 거의 일어나지 않음
  • 따라서 trade off 를 통해 모델이 노이즈를 학습하더라도 더 많은 신호를 학습할 수 있도록 한다.
  • 이 trade off 시점이 적합할 경우, loss는 감소하나 적합하지 않은 시점일 경우 loss가 증가할 수 있음

  • underfitting (과소적합): 신호 부족 또는 노이즈 과다, 훈련세트에 대한 손실이 낮아지지 않는 경우, 모델이 학습을 충분히 하기 못하여 훈련데이터에 대하여 과소적합이 된다.

  • overfitting (과대적합): 훈련 데이터에 대하여 손실은 낮아지지만 테스트 데이터에 대하여 성능이 나쁘다면, 모델이 훈련 데이터에 대하여 과적합이 된 것

  • 효과적인 모델 학습은 위 두 사이의 균형을 맞추는 것

    효과적인 trade off를 위한 방법

    1. Capacity

  • 해당 모델이 학습할 수 있는 패턴과의 크기와 복잡성을 의미

  • 신경망의 경우, 뉴런의 수와 뉴런 간의 연결성에 따라 결정됨.

  • 모델이 과소적합 되는것으로 보일 경우, 모델 용량을 늘리는 것이 좋다

    • 네트워크에서 용량을 늘리기 위해서는 Unit를 기존 레이어에 추가하여 넓게 만들거나 더 많은 레이어 추가하는 방법이 있다

    • 깊은 네트워크(deeper network)에서는 비선형 모양을 선호

   model = keras.Sequential([
    layers.Dense(16, activation='relu'),
    layers.Dense(1),
])

   wider = keras.Sequential([
    layers.Dense(32, activation='relu'),
    layers.Dense(1),
])

  deeper = keras.Sequential([
    layers.Dense(16, activation='relu'),
    layers.Dense(16, activation='relu'),
    layers.Dense(1),
])

2. Early stopping

  • early stopping (조기종료) : 모델이 과하게 노이즈 학습시 검증 손실이 증가할 수 있는데, 이를 방지하기 위해 더 이상 감소하지 않을 때 훈련을 중지하는 것을 의미

  • 검증 손실이 다시 증가할 경우, 최솟값이 발생한 가중치로 재설정하여, 모델이 계속 노이즈를 학습하고 과적합되는 것을 방지

  • 에포크를 큰 값으로 설정하고, early stopping가 나머지를 처리하도록 하면 네트워크가 너무 일찍 중지되는 것과 과소적합되는 것을 방지할 수 있음

  • Keras에서는 early stopping을 callback 훈련에 포함시킴
  • callback은 네트워크가 훈련될 때 주기적으로 실행되는 함수
  • 조기 종료 콜백은 각 에포크가 종료된 후 실행됨
from tensorflow.keras.callbacks import EarlyStopping

early_stopping = EarlyStopping(
    min_delta=0.001, # minimium amount of change to count as an improvement
    patience=20, # how many epochs to wait before stopping
    restore_best_weights=True,
)

참고

profile
공부에는 끝이 없다

0개의 댓글