Batch size 뜻 - Batch size tteus

Learning Algorithm

머신러닝/딥러닝 알고리즘은 데이터 학습을 기반으로 하는 학습 알고리즘이다. 이 학습의 효율을 ‘model 최적화 측면’에서도 높일 수 있지만, ‘data 세분화 측면’에서도 가능하다. 그것이 epoch, batch, iteration이다.

데이터 세분화

데이터 세분화에 대해 이해하기 전, 학습 효율을 어떻게 높일 수 있는지 간단한 예시를 통해서 이해해보자.

철수가 2019 수능 시험을 대비해서 200문제가 기록된 과거 수능 수학 기출 시험지를 힘들게 입수했다. 철수는 이 시험지를 5번 반복해서 풀기로 다짐했다. 그런데 철수는 수학 공부에 신경을 많이 쓰지 않아 이 200문제를 한꺼번에 풀기가 어렵고 시간이 오래걸릴 것으로 생각하여, 10등분으로 나누어 20문제씩 채점하고 복습하는 방식을 선택했다. 그 해 철수는 수능 수학 시험을 100점 받았다!

위 시나리오에 epoch, batch, iteration 개념이 모두 들어가있다.

  • Epoch: 전체 데이터를 반복적으로 학습하는 횟수 (=수학 시험지를 푼 횟수, 5)
  • Batch (size): 한번에 학습할 데이터의 (=한번에 채점+복습하는 문제의 수, 20)
  • Iteration: 한 epoch에서 batch를 학습하는 횟수 (=200문제 / 20문제, 10)

학습 효율에 미치는 영향

  • Epoch: 전체 데이터 학습 한 번만으로 모델이 완성되었다고 보기 어렵기에 반복적인 학습을 통해 높은 정확도 (accuracy)를 가지는 모델을 만들 수 있다. 학습 데이터의 양이 많지 않으면 epoch이 적극적으로 활용된다.
  • Batch: 학습 모델의 weight tuning을 위해 전체 데이터를 메인메모리에 적재하는 것은 기업 규모의 컴퓨터가 아닌 이상 어렵다. 그렇기에 전체 데이터를 잘게 나누어서 메모리에 적재시켜 학습한다.
  • Iteration: 전체 데이터에 대한 오차 (cost) 총합을 가지고 backpropagation을 수행하면 weight가 한 번에 크게 변할 수 있다. 즉, gradient의 이동 폭이 커서 global minimum을 지나칠 수도 있기에 gradient를 반복적으로 조금씩 이동하게 하는 역할을 한다.

주의 사항

  • Epoch 횟수를 너무 크게하면 overfitting이 발생할 수 있다.
  • Batch를 너무 작게하면 iteration이 증가하여 학습 시간(forward + backward propagation)이 오래 걸릴 수 있다.

# 에폭(epoch)이란? 배치 사이즈(batch size)란?

에폭(epoch): 하나의 단위. 1에폭은 학습에서 훈련 데이터를 모두 소진했을 때의 횟수에 해당함.

미니 배치(mini batch): 전체 데이터 셋을 몇 개의 데이터 셋으로 나누었을 때, 그 작은 데이터 셋 뭉치

배치 사이즈(batch size): 하나의 미니 배치에 넘겨주는 데이터 갯수, 즉 한번의 배치마다 주는 샘플의 size

이터레이션(iteration): 하나의 미니 배치를 학습할 때 1iteration이라고 한다. 즉, 미니 배치 갯수 = 이터레이션 수

Batch size 뜻 - Batch size tteus

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 size

batch size란 sample데이터 중 한번에 네트워크에 넘겨주는 데이터의 수를 말한다.
batch는 mini batch라고도 불린다.

이 때 조심해야할 것은, batch_size와 epoch은 다른 개념이라는 것이다.

예를 들어, 1000개의 데이터를 batch_size = 10개로 넘겨준다고 가정하자.
그러면 총 10개씩 batch로서 그룹을 이루어서 들어가게 되며, 총 100개의 step을 통해 1epoch을 도는 것이다.
즉, 1epoch(학습1번) = 10(batch_size)  * 100(step or iteration)

Batch size 뜻 - Batch size tteus

하지만, batch_size가 커지면 한번에 많은 량을 학습하기 때문에, train과정이 빨라질 것이다.
그러나 trade off로서, 컴퓨터의 메모리 문제때문에 우리는 한번에 모두다 학습하는 것이 아니라 나눠서 하는 것이다.

즉, batch_size를 100으로 준 상태에서, 컴퓨터가 학습을 제대로 하지 못한다면, batch_size를 낮춰주면 된다.

실습

keras에서 batch_size의 선택은 fit()함수 호출 시 할 수 있다.

Batch Norm

data를 Neural Network에 train시키기전에, preprocessing을 통해 Normalize 또는 Standardize를 했다.

Regression문제에서는 사이킷런의 MinMaxScaler를 이용하여, 각 feature의 데이터를 0~1사이로 squarsh한 것이 예이다.
머신러닝이나 딥러닝은, 큰 수들을 좋아하지 않기 때문에 = 각 feature의 간격이 동일해야 편견없이 처리할 수 있다
(예를 들어, a feature는 0~13값을 가지고 b feature는 0~4값을 가지는데, 13을 4보다 더 큰 요소로 인식해버리 떄문)

Normalize나 Standardize는 모두, 모든데이터를 같은 scale로 만들어주는 것이 목적이다.
(Regularization은 weight를 줄이도록 loss를 변형(L2 Reg)하여, 모델의 복잡도를 낮추어 overfitting을 방지한다)

  1. Normalization : 구체적으로 10~1000 범위를 가진 feature를 --> 0~1값을 가지도록 Scaling한다.
  2. standardization : 각 데이터에 평균을 빼고 -> 표준편차를 나누어서 ->  평균0 표준편차1인 데이터로 변형한다.
    - standardization 역시 Normalization으로 불리기도 한다.

이러한 작업을 하는 이유는 위에도 설명했지만, 아래 예를 다시보자.

miles Driven feature 와 age feature가 있다.

2 feature는 같은 Scale을 가지고 있지 않은 non-Normalized상태이다.
이러한 data는 Neural Network에서 불안정성을 야기한다.
즉, 너무 큰 범위의 feature값이 들어가게 되면, gradient를 태워 weigt를 업데이트할 때, 큰 문제가 발생하게 된다.
train하기도 힘들어지고, train속도도 느려진다.

하지만 Normalization을 통해 Scale을 0~1로 통일 시키면,
속도도 향상되면서, gradient를 태울 떄 문제가 발생하지 않게된다.

하지만 normalized된 데이터( scale통일 )도 문제가 발생시킨다는 것이 발견되었다.

train시 SGD로 그라디언트를 태워 w를 업데이트 하는 와중에
weight하나가 극단적으로 크게 업데이트되었다고 가정하자.


첫번째 hidden Layer에 도달하는 weight는 (8, 6)개의 matrix이다.
여기서 (4, 4)에 해당하는weight가 극단적으로 크게 업데이트 되었다.
이 weight에 상응하는 neuron (1hidden-4node)역시 커질 것이다.
그리고 다음 N.N.를 통과하면서 이러한 imbalance들이 문제를 야기할 것이다.

이 때 등장한 개념이 Batch Normalization이다.
비록 input data는 Normalization(0~1scaling)되었다 하더라도, weight가 커져버려 output도 커지는 상황이 발생한다.

정규화(loss를 변형하여, weight줄임->복잡도내려가고 variance줄임->overfitting방지)처럼,
Batch norm 역시 전체 모델 중 특정Layer를 선택하여 적용할 수 있다.

구체적으로는
이전Layer의 weight가 커져, 매우커저버린 output인 a(z(x))에다가

  1. activation funcion값을 Starndardization(평균0 표준편차1)을 만들어서,
  2. 임의의 상수를 곱함(trainable)
  3. 임의의 상수를 더함(trainable)

--> 다음Layer의 input이 되게 만드는 것이다.


이러한 과정을 거쳐 최적화 된 g와 b상수도 결정되게 된다.

Batch Norm은 gradient의 process에 포함되기 때문에, 특정weight가 극단적으로 커지거나 작아지는 것을 막아주게 된다.

결과적으로, input dataNormalization을 통해 같은 Scale을 가질 수 있게 하여 --> 속도향상 + gradient problem을 막고
각 Layer의 output(a(z(x))에는 Batch Norm을 통해 같은 Scale을 가질 수 있게항 --> weight의 imbalance를 막는다.
- 이러한 과정은 모델에 input되는 Batch단위로 이루어지기 때문에, Batch norm이라 한다.

실습