Batch Normalization
포스트 난이도: HOO_Senior
# Batch Nomalization
Batch normalization 또는 배치 정규화라고 불리는 기능은 머신러닝(Machine learning)을 통해 학습을 시킬 때 잘못된 결과 산출을 줄이기 위해서 사용된다.
우선 Normalization 또는 정규화에 대해서 짧게 알아보자면, ML(Machine learning)을 돌리는 과정에서 Local optimum 문제에 빠져 잘못된 결과 산출이 발생할 수 있다.
이러한 문제를 줄이고자 우리는 Normalization, 즉 정규화를 통해 Global optimum 지점을 찾고 원하는 결과를 산출해낼 수 있도록 컴퓨터에게 도움을 주는 것이다.
Batch normalization도 이러한 optimum 문제를 고려하여 사용되는 기능이다.
Batch 또는 배치는 ML을 하는 데 있어 메모리 대비 많은 양의 데이터를 학습할 때 나눠서 학습을 할 수 있도록 하는 기능이다.
한마디로 Batch normalization도 전체 데이터를 정규화를 하는데 Batch 형태로 나눠진 데이터를 고려해서 정규화를 하여 Global optimum을 찾도록 도와주는 기능인 셈이다.
조금 더 구체적으로 들어가자면 Batch normalization은 Mini batch의 평균과 분산을 통해 정규화가 이루어진다.
결과적으로 Backpropagation을 통해서 최종 학습이 이루어진다.
이렇게 이루어진 Batch normalization은 출력값으로 레이어에서 사용된다.
# Batch normalization 예제 / Batch normalization 과 dropout
Keras에서 Batch normalization을 어떻게 사용하는지에 대해서 아래의 간단한 예제를 통해 살펴보도록 하자.
from tensorflow import keras
from tensorflow.keras import layers
model = keras.Sequential([
layers.BatchNormalization(input_shape=input_shape),
layers.Dense(256, activation='relu'),
layers.BatchNormalization(),
layers.Dropout(0.3),
layers.Dense(256, activation='relu'),
layers.BatchNormalization(),
layers.Dropout(0.3),
layers.Dense(1, activation = 'sigmoid')
])
위의 예제를 살펴보면, 각 layers들마다 Batch Normalization이 되고 있는 걸 알 수 있다.
Batch Normalization이 하는 역할과 Dropout이 하는 역할이 비슷하다고 하지만, 사실상 동일하지는 않다.
Keras를 통해 Batch Normaliation을 하게 될 경우 각각이 다른 network weights들을 common scale로 만들어 주어, 다른 사이즈에 대한 activation 과정에서 발생할 수 있는 불안정한 training 과정을 예방할 수 있다.
training 과정이 불안정(unstable) 해진다는 것은 결과적으로 training 속도가 느려진다는 것이며, 원하는 결과 산출이 이루어지지 않는다는 문제가 발생한다.
최악의 경우에는 ML 과정이 끝이 나지 않거나 멈추는 경우가 발생할 수도 있다.
Batch normalization은 이러한 멈춤 또는 Stuck 문제를 예방할 수 있는 기능으로 사용된다.
Dropout에 대해서 짧게 살펴보면, droput은 overfitting을 해결하는데 도움을 준다.
overfitting 문제도 결과적으로 보면 optimum 문제와 연결이 되기 때문에 Batch normalization을 사용하지 않는 개발자도 있다.
하지만 최종적으로 완벽한 결과를 문제없이 산출하기 위해서는 정석대로 2가지 모두 사용하는 것을 권장한다.
2가지 사용에 있어서 효율적으로 사용하는 방법에 대한 팁(Tip)을 얘기하자면,
필자의 경우에는 Batch normalization을 먼저하고나서 Dropout을 사용하는 편이다.
그러면 보다 더 ML 과정에 있어 효율적이고 상대적으로 시간도 단축시킬 수 있다.
'Python' 카테고리의 다른 글
[Keras] model.compile(), 모델 컴파일 (0) | 2022.07.28 |
---|---|
[Keras] Dense layer, Dense class (0) | 2022.07.21 |
[Keras] Sequential Model (0) | 2022.07.19 |
[Pandas] head() function (0) | 2022.07.19 |
[Python] Numpy Shape() (0) | 2022.07.12 |
댓글