[project#2] Gradient Accumulation Step이란?

sujin·2024년 10월 10일
0

nlp_project2

목록 보기
6/8
post-thumbnail
post-custom-banner

메모리 절약과 효과적인 대용량 학습을 가능하게 하는 기술이다. 이 방법은 특히 GPU 메모리가 부족하여 한번에 큰 배치 크기를 처리할 수 없는 상황에서 주로 사용된다.

동작원리

일반적으로, 딥러닝 모델을 훈련할 때, 데이터는 미니 배치로 나누어 모델에 입력되고, 각 배치에 대해 forward pass와 backward pass가 수행된다. 그 후, 기울기가 계산되고 옵티마이저에 의해 가중치가 업데이트된다.

gradient accumulation step을 사용하면 다음과 같은 과정이 추가된다.

  1. 배치 나누기: 주어진 전체 배치를 한번에 처리하지 않고, 더 작은 미니 배치로 나눈다. 이를 위해 미니 배치의 크기를 줄이고 여러번 forward/backward를 수행한다.
  2. 기울기 누적: 각 미니 배치에 대해 backward pass가 이루어진 후, 기울기가 계산된다. 이때 계산된 기울기를 매번 업데이트하는 대신, 일정 횟수(gradient accumulation step)동안 기울기를 누적한다.
  3. 기울기 업데이트: 기울기를 gradient accumulation step번 누적한 후에 옵티마이저가 모델의 가중치를 업데이트한다. 이렇게하면 큰 배치 사이즈에서 얻을 수 있는 효과를 메모리 제한 내에서 모방할 수 있다.

gradient accumulation step가 무조건 크다고 좋을까? NO!

기울기 업데이트 빈도

gradient accumulation step=4일 때 기울기가 더 자주 업데이트된다. 즉 4번의 배치마다 모델이 업데이트되고 이로 인해 학습 과정이 더 세밀하게 진행될 수 있다. 반면 gradient accumulation step=8일 때는 8번의 배치를 쌓아서 업데이트하기 때문에 기울기 업데이트 빈도가 낮아지게 된다.

일관된 학습 방향

기울기 누적이 길어질수록, 즉 gradient accumulation step 값이 커질수록 다양한 미니 배치로부터의 기울기가 평균화되면서 노이즈가 섞일 가능성이 있다. 이는 모델이 정확한 학습 방향을 잡기 힘들게 할 수 있다. gradient accumulation step가 작을수록 업데이트가 더 자주 이루어져 노이즈가 누적되기 전에 기울기 업데이트가 이루어져 학습이 일관되게 진행될 수 있다.

과도한 누적으로 인한 정보 손실

gradient accumulation step=8처럼 기울기를 누적하는 과정이 길어지면, 미니 배치에서 얻어지는 세부적인 정보가 사라지거나 평균화될 수 있따. 이는 세밀한 기울기 정보를 반영하지 못하게 되어 성능 저하를 일으킬 수 있다.

profile
감자 그리고 NLP
post-custom-banner

0개의 댓글