심층 신경망 훈련하기 - 학습 속도를 높이는 방법

2020. 12. 29. 14:50ML&DL

본 글은 핸즈온 머신러닝 Part2-11장(심층 신경망 훈련하기)를 공부한 후 정리한 내용입니다.

✅ 보다 깊은 심층 신경망을 학습시켜 아주 복잡한 문제를 다룰 때 발생할 수 있는 문제들

  • Gradient 소실 or gradient 폭주 문제에 직면.
    • 심층 신경망의 아래쪽으로 갈수록 gradient가 점점 더 작아지거나 커지는 현상
    • 하위층을 학습하기 매우 어렵게 만듦.
  • 대규모 신경망을 위한 학습 데이터가 충분하지 않거나 레이블을 만드는 작업에 비용이 많이 들 수 있음.
  • 학습이 극단적으로 느려질 수 있음.
  • 수백만 개의 파라미터를 가진 모델은 학습 할 때 과대적합 될 위험이 큼.
    • 특히, 학습 샘플이 충분하지 않거나 잡음이 많은 경우

이 중 학습 속도를 높이는 방법을 알아보겠습니다.

학습 속도를 높이는 방법에는 연결 가중치에 좋은 초기화 전략을 사용하거나, 좋은 활성화 함수 사용, 배치 정규화 사용, 사전학습된 네트워크 일부를 재사용하는 방법이 있었습니다. 이번에는 더 빠른 Optimizer(최적화기)를 사용하여 학습 속도를 높이는 방법을 알아보겠습니다.

🔍 더 빠른 옵티마이저 사용하기

image

Momentum 최적화

  • 항상 기울기만큼 이동하는 것보다 공이 빗면을 구르듯 가속하면 더 빨리 최저점에 도달할 수 있다는 개념으로 그래디언트가 가속도처럼 적용됨.
  • 기존의 momentum vector m에 대해 b를 곱한 후 학습률 * gradient를 더하여 파라미터를 이동함.
  • gradient가 일정하다면 원래 gradient의 1/(1-b) 배가 종단속도가 됨.
  • 스케일이 다른 입력값에 대해서도 비교적 빨라지며 local optima를 건너뛰는데에도 도움이 됨.
optimizer = keras.optimizers.SGD(lr=0.001, momentum=0.9)

NAG

  • 모멘텀 최적화의 변종으로 기본 Momentum보다 훈련 속도가 빠름.
optimizer = keras.optimizers.SGD(lr=0.001, momentum=0.9, nesterov=True)

AdaGrad

  • 가파른 차원을 따라 그래디언트 벡터의 스케일을 감소시키는 방법으로 경사가 완만한 차원보다 가파른 차원에 대해 더 빠르게 감소함.

  • 간단한 2차 방정식에서 잘 작동

  • 학습률이 너무 감소되어 전역 최적점에 도착하기 전에 알고리즘이 멈추는 경우 발생

optimizer = keras.optimizers.Adagrad(lr=0.001)

RMSProp

  • AdaGrad 알고리즘에서 s를 관성을 가지고 학습하는 것으로 지수 감소를 사용하여 가장 최근 반복에서 비록된 gradient만 누적함.
optimizer = keras.optimizers.RMSprop(lr=0.001, rho=0.9)

Adam

  • Momentum 최적화와 RMSprop을 합친 방법으로 지수 감소 평균을 따르고 RMSprop처럼 지난 gradient 제곱의 지수 감소된 평균을 따름.
optimizer = keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999)

Adamax

  • 시간에 따라 감소된 gradient의 최대값으로 스케일하는 방법.
optimizer = keras.optimizers.Adamax(lr=0.001, beta_1=0.9, beta_2=0.999)

Nadam

  • Adam 옵티마이저에 네스테로프 기법을 더한 것.
  • 일반적으로 Adam보다 성능이 좋지만 RMSProp가 더 좋은 성능을 나타낼 때도 있음.
optimizer = keras.optimizers.Nadam(lr=0.001, beta_1=0.9, beta_2=0.999)

🔍 학습률 스케줄링

  • 학습률을 너무 크게 정하면 학습이 발산할 수 있고 너무 작게 설정하면 최적점에 수렴하지만 시간이 너무 오래 걸리기 때문에 큰 학습률로 시작하고 학습 속도가 느려질 때 학습률을 감소시키는 전략

image

  • 거듭제곱 기반 스케줄링
    lr = lr0 / (1 + steps / s)**c
  • 지수 기반 스케줄링
  • 지수 기반 스케줄링
  • 구간별 고정 스케줄링
    • 일정 횟수의 에포크 동안 일정한 학습률을 사용하고 그 다음 또 다른 횟수의 에포크 동안 작은 학습률을 사용하는 전략.
  • 성능 기반 스케줄링
    • 매 스텝마다 검증 오차를 측정하고 오차가 줄어들지 않으면 학습률을 감소시키는 전략.
  • 1 사이클 스케줄링
    • 학습의 절반 동안 초기 학습률을 선형적으로 증가시키고 그 다음 나머지 절반 동안 선형적으로 학습률을 처음 학습률로 다시 줄인 후 마지막 몇 번의 에포크는 학습률을 소수점 몇 째 자리까지 선형적으로 줄이는 전략.
728x90