작성
·
759
1
안녕하세요! 강의 잘 듣고 있습니다!
제가 알기로는 epoch란 전체 데이터를 모두 관측한 횟수이고
iteration은 한 에포크에서 가중치 갱신이 된 횟수로 알고 있습니다.
전체 데이터가 100개이고, 500번의 epoch을 돌린다고 할 때,
GD : 각 데이터당 500번이 인풋 데이터로 선택. 총 50,000번의 학습. iteration도 500. batch_size는 100
SGD : 각 데이터당 평균적으로 5번의 인풋 데이터로 선택. 총 500번의 학습. iteration은 50000. batch_size는 1
Mini - Batch(batch_size = 10) : 각 데이터당 50번의 인풋데이터로 선택. 총 5,000번의 학습. iteration은 5000, batch_size = 10
위 결과처럼 iteration*batch_size의 값은 모두 동일하지만 각 데이터가 학습되는 비중이 다르게 되는 것이 맞을까요?
또, 결론적으로 GD에서 변환되어 나온 SGD와 배치방법(이하 SGD 통일)은 표면적으로는 GD의 "전체 관측 후 갱신" 에서 SGD의 "부분 관측 후 갱신" 이라는 양적 개념이 달라진 것처럼만 보이지만 사실 그 내부에는 GD의 "동일한 데이터 반복 학습"에서 SGD의 "동일한 데이터 반복 학습 횟수 감소"로 볼 수도 있는건가요?
답변 3
5
안녕하십니까,
음, 이게 늘 헷갈리는 개념들입니다. 질문에 바로 답을 드리는것 보다 아래 주요 용어 설명을 먼저 드리는게 맞는 것 같습니다.
먼저 원론적인(Academic한) 개념이 아닌 Keras와 Tensorflow 에서,
batch_size는 Gradient Descent를 한번 계산하기 위한 학습 데이터의 갯수
steps: GD를 batch_size별로 계산하되 전체 학습 데이터에 대해서 이를 반복해서 적용한 횟수.
1회 epoch는 전체 학습 데이터에 대해서 steps를 진행.
epochs 수는 1회 epoch를 여러번 반복.
보통은 batch size, steps, epochs 개념으로 GD를 통해 학습을 진행합니다. 여기서 Iteration 개념이 좀 헷갈립니다.
Keras의 경우 batch사이즈와 epochs를 인자로 입력해서 얼마나 반복적으로 학습을 수행할지 결정해 줍니다.
예를 들어 전체 학습 데이터가 100개 이고 batch size가 5 개이면,
1 epoch를 위해서 steps는 20번씩 Gradient Descent를 계산합니다. 5개씩 GD를 계산해서, 이걸 20번 하면 전체 학습 데이터에 대해서 GD가 최소 한번은 적용 대상이 되었습니다.
그리고 epochs를 30으로 설정하면, 1 epoch 수행한 것을 30번 반복합니다. 그럼 epochs 30회 수행시 전체 steps는 600번 입니다.
그런데 iteration은 반복의 의미이므로 steps으로 생각할 수도 있고, epochs로 생각할 수도 있습니다. 일반적으로 keras는 epochs가 iteration 개념으로 생각하며, Tensorflow 1.x에서는 이 steps가 iteration 개념입니다(그러니까 batch당 반복)
이 내용은 나중 강의에서 자세히 말씀드립니다.
그러니까, iteration을 어떤 개념으로 생각하느냐에 따라 질문의 답변이 달라 질 수 있습니다.
GD, SGD, Mini-batch 모두 한번 Gradient를 계산하기 위한 학습 데이터를 몇건을 가져 갈것인가가 기준입니다.
먼저 원론적인 기준에서 (처음 이들 개념이 소개된 기준 ), 전체 학습 데이터가 100개, epochs를 500회 한다면,
1. GD의 경우는 전체 학습 데이터를 모두 Gradient 대상으로 간주합니다.
그래서 1번 Gradient를 계산하기 위해서 전체 데이터 100개를 모두 사용합니다. 그리고 Epochs는 500회, 1회 epochs당 steps는 1회, 전체 steps는 500회, 굳이 batch size를 보자면 100개 입니다.
2. SGD는 전체 학습 데이터 100개중 1개만 가지고 Gradient를 계산합니다. 그래서 Epochs는 똑같이 500회, 1회 epochs당 steps는 1회, 전체 steps는 500회, batch size는 1개 입니다.
3. 원래 이론적인 Mini batch는 전체 학습 데이터중 batch size만큼만 이용해서 Gradient 를 계산합니다. batch_size가 5개라면, epochs는 500회, 1회 epochs당 steps는 1회(여기서 이론적인 mini batch 이기 때문에 steps는 1회 입니다). 그런데 Deep learning framework은 Mini batch를 기반으로 하되 steps를 통해 전체 학습 데이터를 적용합니다. 그래서 mini batch의 경우 1회 epochs당 steps는 이제 20회가 되며, 전체 Steps는 10000회가 됩니다. batch_size는 5개 입니다.
만약 iteration을 steps를 고려해서 한다면(iteration = epochs * steps, batch_size = 5)
GD의 경우 Iteration은 500회, SGD의 경우 500회, Mini batch 500회, Deep learning framework에서는 10000회가 됩니다.
감사합니다.
0
0
와, 선생님 질문비용도 받으시나요..ㅠㅠ 상세하게 긴 답변 감사합니다!
그렇다면, Mini batch의 경우는 이론적으로는 500번의 steps를 밞아야 하지만 실제 구현이 50,000번의 steps를 밞도록 구현되었다는 말이고, 다시 말하면 이 경우 1 iteration이 mini_batch를 기준으로 잡은 것이 이론적, 1iteration이 전체 크기를 기준으로(비록 가중치 갱신은 mini_batch 단위로 일어나더라도) 잡은 것이 구현이라는 말씀이신거죠!?
그래도 상당히 모호했는데 선생님 답변 덕분에 잘 알아갑니다! 정말 감사합니다! 자세하고 세심한 답변 덕분에 공부에 열정을 얻고 갑니다!!