🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

Gradient Descent와 Mini-Batch Gradient Descent의 차이에 대해 질문이 있습니다.

21.10.03 01:54 작성 조회수 270

0

안녕하세요! 이제 막 강의를 시작한 학생입니다. 

강의를 아주 상세하게 설명해주셔서 정말 감사합니다!!

덕분에 아주 재미있고 쉽게 잘 듣고 있습니다ㅎㅎ

제가 하고 싶은 질문은 다음과 같습니다.

Gradient Descent의 한계가 모든 학습데이터에 대해 GD를 적용하기 때문에 computing작업이 많이 들어가서 컴퓨터가 제대로 동작을 안 할 수도 있다고 하셨는데요(ex. 메모리 부족 등의 문제로)

이에 대한 솔루션이 SGD와 Mini-Batch인데 그 중 Mini-Batch에 대해 약간의 의문이 있습니다. 

100개의 학습 데이터가 있다고 가정했을 때 batch_size를 10으로 설정하면 기본적인 Mini-Batch는 첫번째 iteration에서 100개의 학습 데이터 중 임의로 10개를 뽑아 GD를 수행하고 두번째 iteration으로 넘어간다는 것은 이해했습니다.

근데 기본적인 방법으로 사용하게 되면 100개의 학습 데이터 중 학습에 참여하지 못하게되는 데이터가 생기기 때문에 이 방법보다 일반적인 방법을 사용한다고 하셨는데요. 일반적인 방법은 첫번째 iteration의 첫번째 step에서 10개의 데이터를 뽑아서 GD를 계산하고 두번째 step에서 다시 10개의 데이터를 뽑아 GD를 계산하는 식으로 총 10번의 step을 완료하면 첫번째 iteration이 끝나고 두번째 iteration으로 넘어간다는 것은 이해했습니다. 

다만, 여기서 의문인게 그렇게 하면 100개의 데이터를  매 iteration마다 모두 계산하게 되는 것인데 이러면 gradient descent처럼 메모리 문제가 생기지 않을까입니다. mini-batch gradient descent는 gradient descent의 한계를 극복하기 위한 솔루션이라고 하였는데 이러면 gradient descent와 똑같아 지는 것은 아닌가하는 생각이 듭니다.

제가 모르는 뭔가가 있는 것인지 아니면 제가 잘못이해하고 있는 것인지 몰라서 질문드립니다!!

 

답변 1

답변을 작성해보세요.

0

안녕하십니까, 

Iteration, epochs 이게 늘 헷갈리는 개념입니다. iteration은 반복을 수행하는 일반적인 횟수로 생각해 주시면 편할것 같습니다. epochs는 전체 학습 데이터를 batch gradient descent를 이용해 여러 steps에 걸쳐 계산했을 때 1 epochs가 됩니다. 

일반적인 Mini Batch GD에서는 전체 학습 데이터에서 Random하게 Batch size만큼만 취해서 GD를 계산합니다. 이걸 100회 또는 1000회 정해진 iteration 만큼 반복해서 GD를 계속 Update하게 됩니다. 

그런데 보통은 Keras에서는 이 방식 보다는 전체 학습 데이터를 순차적으로 Batch size만큼 취해서 GD를 계산하게 됩니다.  그러니까 100개의 학습 데이터가 있고, Batch size가 10이라면 10번 순차적으로 반복하면 전체 학습 데이터에 대해서 적어도 한번은 GD 계산에 참여 할 수 있게 합니다.  이렇게 전체 학습 데이터를 한번이라도 적용했으면 1 epoch가 됩니다.  그리고 10번 순차 반복은 10번 steps를 반복한것입니다. 만약에 epochs를 5번 했으면 50번 반복 iteration을 수행하게 됩니다만 어쩧든 steps는 10회를 1 epochs에 반복합니다.  

일반적인 mini batch와 비슷한 개념이지만 학습 데이터에서 빠지는 데이터가 없이 GD를 계산하게 해줍니다.  이때 steps는 iteration과 비슷한 개념입니다. 다만 전체 반복 횟수(iteration)과 steps(epoch내에서 반복횟수)의 문맥적 차이가 있습니다. 

따라서 위에서 말씀하신 100개의 데이터를 1 step(또는 1 iteration) 할 때마다 10개씩 GD를 계산하기 때문에 메모리 문제가 없습니다. 

Iteration, steps, epoch에 대한 개념에 대한 비슷한 질문 내용이 있어서 아래 내용 참고하시면 좋을 것 같습니다.

https://www.inflearn.com/questions/297099

https://www.inflearn.com/questions/216570

채널톡 아이콘