프로젝트/2021 한이음(probono)

[프로보노프로젝트/딥러닝] 학습 조기종료 콜백함수, 학습단위 - 에포크(Epoch), 배치(batch)

pxatd 2021. 9. 27. 22:50
728x90

1. 학습 조기종료 콜백함수

학습 조기 종료를 위해서는 ‘EarlyStopping’이라는 함수를 사용하며 학습 도중 더 이상 개선의 여지가 없을 때 학습을 종료시키는 콜백함수이다. 콜백함수는 어떤 함수를 수행 시 그 함수에서 내가 지정한 함수를 호출하는 것을 말하며, 여기서는 fit 함수에서 EarlyStopping이라는 콜백함수가 학습 과정 중에 매번 호출된다.

 

Epoch를 100으로 지정했더라도 학습하는 과정에서 EarlyStopping 콜백함수를 호출하여 해당 조건이 되면 학습을 조기 종료시킨다. EarlyStopping 콜백함수에서 사용할 수 있는 매개변수는 다음과 같다. 

model.compile(optimizer=rmsprop, loss='binary_crossentropy', metrics=['accuracy'])
checkpoint_cb = keras.callbacks.ModelCheckpoint('best-model.h5')
early_stopping_cb = keras.callbacks.EarlyStopping(patience=3, restore_best_weights=True)
history = model.fit(x_train, y_train, epochs=100, batch_size=64, validation_data=(x_val, y_val), callbacks=[checkpoint_cb, early_stopping_cb])

우리 프로젝트에서는 EarlyStoppint(patience=3) patience를 3으로 지정하여 loss값이 3회 이상 향상되지 않으면 조기종료하도록 만들었다. 

 

 

 

2. 학습단위

한 번의 학습에 모든 학습 데이터 셋을 사용한다면 여러 문제가 발생할 수 있다. 첫 번째로 데이터의 크기가 너무 큰 경우, 메모리가 많이 필요하다는 점, 두 번째로 학습 한 번에 계산되어야 할 파라미터(가중치) 수가 지나치게 많아지므로 계산 시간이 오래 걸린다는 점이다.

따라서, 딥러닝에서 최적화(optimization)을 할 때는 일반적으로 여러 번 학습과정을 거친다. 

여기서 등장하는 개념이 Epoch, Batch Size, Iteration 이다.

 

2.1 배치 사이즈 (Batch Size)

-batch의 사전적 의미는 "집단, 무리; 한 회분; (일괄 처리를 위해) 함께 묶다" 라는 뜻이다.

-딥러닝에서 배치는 모델의 가중치를 한번 업데이트시킬 때 사용되는 샘플들의 묶음을 의미한다. 

-즉, 연산 한 번에 들어가는 데이터의 크기를 가리킨다. 

-1 Batch size에 들어가는 데이터 셋을 mini Batch라고 한다. 

-1회 epoch 안에 m개 (m>=1)의 mini Batch가 들어가게 되며, 만약 m=1인 경우, 배치 학습법이라고 한다.

-배치 사이즈가 너무 크면 : 한 번에 처리해야 할 데이터의 양이 많아지므로, 학습 속도가 느려지고, 메모리 부족 문제가 발생할 수 있다.

-배치 사이즈가 너무 작으면 : 적은 데이터를 대상으로 가중치를 업데이트 하고, 이 업데이트가 자주 발생하므로, 훈련이 불안정해진다. 

 

 

2.2 에포크 (Epoch)

-epoch의 사전적 의미는 "(중요한 사건, 변화들이 일어난)시대" 라는 뜻이다.

-훈련 데이터셋에 포함된 모든 데이터들이 한 번씩 모델을 통과한 횟수로, 모든 학습 데이터셋을 학습하는 횟수를 의미한다.

-1 epoch는 전체 학습 데이터 셋이 한 신경망에 적요되어 신경망을 한 번 통과했다는 의미가 된다.

-즉, epoch가 10이라면, train 데이터 셋을 10회 모델에 학습시켰다는 뜻이다.

-epoch를 높일수록, 다양한 무작위 가중치로 학습 하므로, 적합한 파라미터를 찾을 확률이 올라간다.

-그러나, 지나치게 epoch를 높이게 되면, 그 train 데이터 셋에 과적합(overfitting)되어 다른 데이터에 대해서는 제대로 된 예측을 못하게 될 수도 있다.  

 

*신경망에서 사용되는 역전파 알고리즘(backpropagation algorithm)은 파라미터를 사용하여 입력부터 출력까지의 각 계층의 w를 계산하는 과정을 거치는 순방향 패스(forward pass), 반대로 거슬러 올라가며 다시 한 번 계산 과정을 거쳐 기존의 w를 수정하는 역방향 패스(backward pass)로 나뉜다. 이 전체 데이터 셋에 대해 순방향 패스 + 역방향 패스가 완료되면 한 번의 epoch가 진행됐다고 볼 수 있다. 

 

*epoch 값이 너무 작다면 underfitting이, 너무 크다면 overfitting이 발생할 확률이 높다. 

 

 

2.3 이터레이션 (Iteration)

-이터레이션의 사전적 의미는 "(계산, 컴퓨터 처리 절차의) 반복" 이라는 뜻이다. 

-전체 데이터를 모델에 한번 학습시키는데 필요한 배치(Batch)의 수를 말한다.

-즉, 1epoch를 마치는데 필요한 파라미터 업데이트 횟수라고 할 수 있다.

-각 배치마다 파라미터 업데이트가 한 번씩 이루어지므로, 이터레이션은 "파라미터 업데이터 횟수 = 배치의 수"가 된다. 

프로젝트에 쓰일 RNN 모델의 학습 과정

 

 

2.4 정리

그럼에도 epoch, batch, iteration의 관계가 이해가 잘 안돼서 예시를 가져와보았다.

 

전체 2000개의 데이터가 있고, epoch=20, batxh_size=500 이라고 가정하자

그렇다면 1epoch는 각 데이터의 size가 500인 batch가 들어간 네번의 iteration으로 나눠진다.

전체 데이터 셋에 대해서는 20번의 학습(epoch 기준)이 이루어 진 것이며 iteration 기준으로 보면 총 80번의 학습이 이루어 진 것이다. 

728x90