데이터과학 삼학년

Batch normalization 적용으로 train set 데이터의 정규화 대체! 본문

Machine Learning

Batch normalization 적용으로 train set 데이터의 정규화 대체!

Dan-k 2021. 1. 8. 13:22
반응형

딥러닝 학습 과정 중 gradient vanishing 과 gradient exploding 문제는 매우 크리티컬한 문제이다.

gradient 소실, 폭주와 관련한 문제의 원인은 크게

  • 초기화

  • 활성화 함수

문제로 확인되었다.

글로럿벤지오에 의해서 세이비어 초기화, 글로럿 초기화, 그리고 Relu (변형된 relu -> 일부 뉴런이 0이외의 값을 출력하지 않는 dying Relu 문제로 인해 파생) 로 인해 gradient와 관련한 문제를 해결하였다.

 

여기에, 위 문제를 추가적으로 해소할 수 있는 방법이 Batch normalization 이다.

(이외 gradient clipping 을 쓸 수도 있다)

 

Batch normalization의 일반적 특징

  • 과적합을 피하기 위한 기능 : dropout 과 유사

  • 빠른 학습 : layer 마다 출력값들을 다시 정규화하기 때문

    • 입력 평균과 표준편차의 이동평균을 이용하여 훈련하는 동안 최종 통계 추정

  • 그래디언트 소실, 폭주 문제 해소

  • 학습 데이터 표준화를 대체 가능

모델의 첫번째 layer로 활용시 훈련세트를(standardScaler, minmaxScaler 등) 표준화할 필요가 없다!!! 라는 것이다.

 

tf.keras.layers.BatchNormalization(
    axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True,
    beta_initializer='zeros', gamma_initializer='ones',
    moving_mean_initializer='zeros',
    moving_variance_initializer='ones', beta_regularizer=None,
    gamma_regularizer=None, beta_constraint=None, gamma_constraint=None,
    renorm=False, renorm_clipping=None, renorm_momentum=0.99, fused=None,
    trainable=True, virtual_batch_size=None, adjustment=None, name=None, **kwargs
)

 

Batch normalization을 이용한 학습 데이터 표준화 불필요 코드 예시

from keras.models import Sequential
from keras.layers import Dense, Activation, Flattten, BatchNormalization

model = Sequential([
	Flattten(input_shape=[28,28],
    	BatchNormalization(),
    	Dense(256, activation='elu',kernel_initializaer='he_normal',input_shape=(784,)),
    	BatchNormalization(),
    	Dense(128, activation='elu',kernel_initializaer='he_normal',input_shape=(784,)),
    	BatchNormalization(),
    	Dense(10,activation='softmax')
])

 

728x90
반응형
LIST
Comments