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