머신러닝/딥러닝 알고리즘은 데이터 학습을 기반으로 하는 학습 알고리즘이다. 이 학습의 효율을 ‘model 최적화 측면’에서도 높일 수 있지만, ‘data 세분화 측면’에서도 가능하다. 그것이 epoch, batch, iteration이다. 데이터 세분화에 대해 이해하기 전, 학습 효율을 어떻게 높일 수 있는지 간단한 예시를 통해서 이해해보자. 철수가 2019 수능 시험을 대비해서 200문제가 기록된 과거 수능 수학 기출 시험지를 힘들게 입수했다. 철수는 이 시험지를 5번 반복해서 풀기로 다짐했다. 그런데 철수는 수학 공부에 신경을 많이 쓰지 않아 이 200문제를 한꺼번에
풀기가 어렵고 시간이 오래걸릴 것으로 생각하여, 10등분으로 나누어 20문제씩 채점하고 복습하는 방식을 선택했다. 그 해 철수는 수능 수학 시험을 100점 받았다! 위 시나리오에 epoch, batch, iteration 개념이 모두 들어가있다. # 에폭(epoch)이란? 배치 사이즈(batch size)란? 에폭(epoch): 하나의 단위. 1에폭은 학습에서 훈련 데이터를 모두 소진했을 때의 횟수에 해당함. 미니 배치(mini batch): 전체 데이터 셋을 몇 개의 데이터 셋으로 나누었을 때, 그 작은 데이터 셋 뭉치 배치 사이즈(batch size): 하나의 미니 배치에 넘겨주는 데이터 갯수, 즉 한번의 배치마다 주는 샘플의 size 이터레이션(iteration): 하나의 미니 배치를 학습할 때 1iteration이라고 한다. 즉, 미니 배치 갯수 = 이터레이션 수 ex1) 훈련 데이터 1000개를 10개의 미니 배치로 나누어 학습하는 경우, 배치 사이즈는 100이 되고, 확률적 경사 하강법(SGD)을 10회 반복, 즉 10회 iteration 하면 모든 훈련 데이터를 '소진'하게 된다. 이때 SGD 10회, 즉 iteration 10회가 1에폭이 된다. 그러면 10에폭을 돌린다고 했을때 가중치 갱신은 10x10 = 100회가 일어난다. ex2) 전체 2000 개의 데이터가 있고, epochs = 20, batch_size = 500이라고 가정하자. 그렇다면 1 epoch는 각 데이터의 size가 500인 batch가 들어간 네 번의 iteration으로 나누어진다. 즉, 이때는 미니배치가 4개, 배치사이즈는 500이다. 그리고 전체 데이터셋에 대해서는 20 번의 학습이 이루어졌으며, iteration 기준으로 보자면 총 80 번의 학습, 즉 80번의 가중치 갱신이 이루어진 것이다. → 따라서 배치 사이즈가 데이터의 갯수면? 그건 SGD가 아니라 GD이다. (전체 데이터의 그래디언트를 한꺼번에 모두 계산하고 한 epoch 당 딱 한 번의 iteration 으로 딱 한 번 가중치 갱신 일어나므로) Batch sizebatch size란 sample데이터 중 한번에 네트워크에 넘겨주는 데이터의 수를 말한다. 이 때 조심해야할 것은, batch_size와 epoch은 다른 개념이라는 것이다. 예를 들어, 1000개의 데이터를 batch_size = 10개로 넘겨준다고 가정하자. 하지만, batch_size가 커지면 한번에 많은 량을 학습하기 때문에, train과정이 빨라질 것이다. 즉, batch_size를 100으로 준 상태에서, 컴퓨터가 학습을 제대로 하지 못한다면, batch_size를 낮춰주면 된다. 실습keras에서 batch_size의 선택은 fit()함수 호출 시 할 수 있다. Batch Normdata를 Neural Network에 train시키기전에, preprocessing을 통해 Normalize 또는 Standardize를 했다. Regression문제에서는 사이킷런의 MinMaxScaler를 이용하여, 각 feature의 데이터를 0~1사이로 squarsh한 것이 예이다. Normalize나 Standardize는 모두, 모든데이터를 같은 scale로 만들어주는 것이 목적이다.
이러한 작업을 하는 이유는 위에도 설명했지만, 아래 예를 다시보자. miles Driven feature 와 age feature가 있다. 2 feature는 같은 Scale을 가지고 있지 않은 non-Normalized상태이다. 하지만 Normalization을 통해 Scale을 0~1로 통일 시키면, 하지만 normalized된 데이터( scale통일 )도 문제가 발생시킨다는 것이 발견되었다. train시 SGD로 그라디언트를 태워 w를 업데이트 하는 와중에
이 때 등장한 개념이 Batch
Normalization이다. 정규화(loss를 변형하여, weight줄임->복잡도내려가고 variance줄임->overfitting방지)처럼, 구체적으로는
--> 다음Layer의 input이 되게 만드는 것이다. 이러한 과정을 거쳐 최적화 된 g와 b상수도 결정되게 된다. Batch Norm은 gradient의 process에 포함되기 때문에, 특정weight가 극단적으로 커지거나 작아지는 것을 막아주게 된다. 결과적으로, input data는 Normalization을 통해 같은 Scale을 가질 수 있게 하여 --> 속도향상 + gradient problem을 막고 실습 |