Linux, ML/DL, DevOps, 클라우드

EarlyStopping() 함수 본문

AI(ML, DL)

EarlyStopping() 함수

draidev 2023. 2. 6. 22:00

출처 : https://paperswithcode.com/method/early-stopping

NLP모델을 학습시키면서 fit함수를 보다가
callbacks란 파라미터에 EarlyStopping함수의 반환값을 주는 걸 보고 찾아보게 됐다.

EarlyStopping 함수

  • 과적합을 방지하기 위한 콜백함수
  • 적절한 시점에 학습을 조기 종료시킨다.

  EarlyStopping 함수는 위 그림과 같이 validation_loss 의 값이 작아지다가 어느 순간 커질때가 있기 때문에 남은 epochs가 있어도 validation_loss가 가장 작은 순간에 학습을 일찍 종료시켜(Early Stopping) 최적의 모델을 저장하기 위한 함수이다.

 

  위의 그래프를 보면 training_loss는 계속 줄어들지만 validation_loss는 줄어들다가 어느 순간 증가하게 된다.

이 뜻은 모델이 데이터를  지속적으로 학습하다가 과적합(overfitting)이 발생했음을 뜻한다.

즉, 계속 같은 문제만 푸니까 풀던 문제만 잘풀고 새로운 문제를 만났을때는 오답률이 증가했다는 것이다.

 

  이렇듯 학습중에 validation_loss가 증가한다는 것은 과적합이 발생한다는 것이며, 이를 막기 위해 과적합이 발생하기 전에(너무 학습 데이터에만 특화된 모델이 완성되기 전에) 모델 학습을 멈추게 하는 함수가 EarlyStopping() 함수인 것이다.

(혹은 데이터를 학습하는 중에 검증 정확도(validation accuracy)가 떨어질때가 있으면 accuracy가 떨어지기 전에 종료시킬 수도 있다.)

 

 

코드를 보면 다음과 같다.

 

# import

from tensorflow.keras.callbacks import EarlyStopping

# EarlyStopping() 함수 사용

es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=3)

model.fit(train_x, train_y, epochs=15, callbacks=[es, mc],batch_size=32, validation_split=0.2)

함수의 파라미터를 보면

  • monitor : 어떤 값을 보고 멈출지 정한다. val_loss면 검증 손실이 최솟값일때 멈추고 val_acc면 정확도가 최대일 때 멈추게 한다.
  • mode : 초기화된 monitor의 값에 따라 min 혹은 max를 주어서 최솟값 혹은 최댓값에서 멈추게한다.                                           monitor가 val_loss면 min, val_acc면 max를 전달인자로 준다.
  • patience : 몇 번의 epochs를 지켜보고 종료할지를 설정하는 파라미터이다.

 

 

 

Comments