bskyvision RSS 태그 관리 글쓰기 방명록
2020-06-11 09:36:18
728x90

CNN과 같은 딥러닝 모델을 훈련시키다보면 꼭 만나게 되는 것이 배치(batch), 에포크(epoch)라는 단어입니다. 이 두 단어가 무엇을 지칭하는 것인지를 알아야 모델을 제대로 훈련시킬 수 있습니다. 

 

먼저 배치가 무엇인지에 대해서 알아보겠습니다. batch의 사전적 의미에는 "집단, 무리; 한 회분; (일괄 처리를 위해) 함께 묶다" 등이 있습니다. 딥러닝에서 배치는 모델의 가중치를 한번 업데이트시킬 때 사용되는 샘플들의 묶음을 의미합니다. 만약에 총 1000개의 훈련 샘플이 있는데, 배치 사이즈가 20이라면 20개의 샘플 단위마다 모델의 가중치를 한번씩 업데이트시킵니다. 그러니까 총 50번(=1000/20) 가중치가 업데이트되겠죠. 하나의 데이터셋을 총 50개의 배치로 나눠서 훈련을 진행했다고 보면 됩니다. 

 

epoch의 사전적 의미는 "(중요한 사건, 변화들이 일어난) 시대"입니다. 딥러닝에서 에포크는 학습의 횟수를 의미합니다. 만약 에포크가 10이고 배치 사이즈가 20이면, 가중치를 50번 업데이트하는 것을 총 10번 반복합니다. 각 데이터 샘플이 총 10번씩 사용되는 것입니다. 결과적으로 가중치가 총 500번 업데이트되죠. 

 

 

만약 배치 사이즈가 너무 크면 한번에 처리해야할 양이 그만큼 많기 때문에 학습 속도가 느려지고, 어떤 경우에는 메모리 부족 문제를 겪을 수도 있습니다. 이런 경우에는 배치 사이즈를 조금 줄여서 훈련셋을 더 많은 배치로 나눠서 모델을 훈련시키는 것이 좋습니다. 또한 배치 사이즈가 너무 작아도 문제가 될 수 있습니다. 너무 적은 샘플을 참조해서 가중치가 자주 업데이트되기 때문에 비교적 불안정하게 훈련되는 것이죠. 따라서 배치 사이즈를 바꿔가면서 언제 모델이 가장 효율적으로 훈련되는지를 살펴볼 필요가 있습니다. 

 

 

bskyvision의 추천글 ☞

[python] 메모리 에러 해결법(MemoryError: Unable to allocate ## for an array with shape ## and data type ##) 

램(RAM)이란 무엇인가? 

 

 

<참고자료>

[1] https://nittaku.tistory.com/293, 동신한의 조재성, "15. Batch size & Batch Norm"

댓글

방문해주신 모든 분들을 환영합니다.

* 글을 읽던 중에 궁금했던 부분은 질문해주세요.

* 칭찬, 지적, 의문, 격려, 감사표현 등을 남겨주세요.

* 최대한 답변 드리도록 노력하겠습니다.

* 욕설과 광고를 담은 댓글은 가차없이 삭제합니다.


  1. 유니론@2021.01.19 16:42 ~$ 안녕하세요.
    bskyvision님의 자료가 많은 도움이 되고 있습니다. 허락없이 질문드려 죄송한데, 배치와 에포크에 대한 기본적인 이해가 부족하여 한가지 문의드리고 싶습니다.

    올려주신 글의 내용처럼, 총 훈련 샘플의 크기가 "1000"이고, 배치사이즈가 "20"이라면 가중치가 50번 업데이트가 되는 것은 알겠습니다. 그리고 에포크가 "10"이면, 전체적으로 가중치가 "500"업데이트 되는것도 이해했습니다.
    제가 궁금한 것은, 전체 데이터를 배치로 나누지 않고 1000개로 학습한다면... 개별 데이터 하나를 넣을 때 마다 순전파와 역전파를 개별적으로 하여 총 1000번의 가중치를 업데이트하는 것인지, 아니면 1000개의 데이터를 모두 한번씩 순전파시켜서 전체 오차제곱평균을 구한 후, 한번의 역전파를 하는것인지 하는 것입니다.

    bskyvision님의 자료가 아닌 다른분의 자료에 보니, 다음과 같은 설명이 있었습니다.
    ######### Gradient Descent는 모든 데이터에 대한 평균제곱 오차를 이용하여 학습하기에 예측의 정확성은 높일 수 있으나, 학습완료까지 매우 오랜 시간이 걸리게 됩니다.
    Stochastic Gradient Descent는 랜덤으로 단 한 개의 데이터를 추출하여(배치 크기가 1) 구한 오차를 기준으로 기울기를 얻어 냅니다. 이러한 과정을 반복해서 학습하여 최적점을 찾아내는 방법입니다. SGD는 빠르게 다음 스텝으로 넘어갈 수 있지만, 노이즈가 너무 심하며, 최적해에 도달하지 못할 위험도 있습니다.
    Mini-batch SGD는 SGD의 단점을 보완하는 방법론으로서 랜덤으로 10 ~ 1000개 크기의 배치를 추출하여 가중치를 업데이트 한 후, 다음에는 또 다른 10 ~ 1000개 크기의 배치로 학습해 나가는 방법입니다.#######

    이 글에서는 Gradient Descent는 모든 데이터를 한번 순전파 시킨 후 평균제곱오차를 한번 구하고, 역전파도 한번만 하는것 같습니다. 이경우 epoch가 1 이면, 한번 학습하고 끝나는 것인데 이런 방식이라면 학습이 올바로 될 것 같지가 않습니다.

    거칠고 긴글 읽어주셔서 감사드립니다.
    답변을 고대하겠습니다.
    [댓글주소]  [수정/삭제]  [답글작성]
  2. BlogIcon bskyvision@2021.01.19 17:39 신고 ~$ 질문 감사드립니다 ㅎㅎ 제가 알기로는 "1000개의 데이터를 모두 한번씩 순전파시켜서 전체 오차제곱평균을 구한 후, 한번의 역전파를 하는것인지 하는 것입니다"가 맞습니다^^ 말씀하신대로 이렇게 하면 학습이 제대로 안되는 경우가 있어서 미니배치 SGD와 같은 방식이 후에 나온 걸로 알고 있습니다 ㅎㅎ [댓글주소]  [수정/삭제]  [답글작성]
  3. BlogIcon bskyvision@2021.01.21 17:52 신고 ~$ 좋은 질문 남겨주셔서 제가 더 감사합니다 ㅎㅎ [댓글주소]  [수정/삭제]  [답글작성]
  4. Woogie@2021.06.10 18:27 ~$ 좋은 글 감사드립니다. 덕분에 이해가 잘 안되던 개념이 이해되었습니다.
    글을 읽으며 생긴 궁금증이 있어 질문드립니다.
    그렇다면 검증 데이터를 통해 테스트를 하는 것은 훈련데이터셋을 한번 돌렸을 때, 즉 1에폭을 수행했을 때 진행하며
    검증 결과를 통해 다음 에폭에서 하이퍼 파라미터와 같은 세팅을 바꿔서 학습을 진행하는 것인가요?? [댓글주소]  [수정/삭제]  [답글작성]
guest@이름 ~$
guest@패스워드 ~$
guest@홈페이지주소작성 ~$

guest@댓글작성 ~$




bskyvision. Designed by bskyvision.