심층 신경망 훈련 속도 높이기
: 연결 가중치 초기화, 활성화 함수, 배치 정규화, 사전 훈련된 층 재사용 (전이학습, 비지도 사전훈련, 보조 작업에서 사전훈련), 고속옵티마이저
표준 경사하강법 : 경사면을 따라 일정한 크기의 스텝으로 조금씩 내려와 맨 아래에 도착하는데 시간이 더 오래 걸림
모멘텀 최적화 : 처음에 느리게 출발해 아래 도달할 때 가속화
optimizer = keras.optimizers.SGD(lr, momentum = 0.9)
optimizer = keras.optimizers.SGD(lr, momentum, nesterov = True)
optimizer = keras.optimizers.RMSprop(lr, rho = 0.9)
optimizer = keras.optimizers.Adam(lr, beta_1 = 0.9, beta_2 = 0.999)
일정한 학습률이 아닌 큰 학습률로 시작하여 학습 속도가 느려질 때, 학습률 낮추어 좋은 솔루션 빨리 찾음
지수 기반 스케줄링
#현재 에포크를 받아 학습률 반환
def exponential_decay(lr, s):
def exponential_decay_fn(epoch):
return lr*0.1**(epoch/s)
return exponential_decay_fn
#스케줄링 함수 전달하여 LearningRateScheduler 콜백 만들어 fit()에 전달
lr_sched = keras.callbacks.LearningRateScheduler(exponential_decay(lr, s))
history = model.fit(x,y, .. , callbacks = [lr_sched])
성능 기반 스케줄링
1사이클링 스케줄링
거듭제곱 기반 스케줄링
optimizer = keras.optimizers.SGD(lr, decay = 0.0001)
# decay = s의 역수