15. Batch size & Batch Norm

2018. 8. 19. 16:04

Batch size

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

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

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


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


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


실습

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

image



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보다 더 큰 요소로 인식해버리 떄문)
image

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

  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속도도 느려진다.
image


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



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

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


첫번째 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이 되게 만드는 것이다.

image
image


이러한 과정을 거쳐 최적화 된 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이라 한다.


실습

image

+ Recent posts