Open givitallugot opened 1 year ago
AdaGrad 알고리즘은 가장 가파른 차원을 따라 그레이디언트 벡터의 스케일을 감소시켜 이 문제를 해결함
알고리즘 첫 단계에서 지수 감소를 사용
optimizer = keras.optimizers.RMSprop(lr=0.001, rho=0.9)
rho
매개변수는 β에 해당볼링공이 매끈한 표면의 완만한 경사를 따라 굴러간다고 가정
경사 하강법의 가중치 갱신 공식: θ = θ - η∇θJ(θ)
모멘텀 최적화는 매 반복에서 현재 그레이디언트를 학습률 η를 곱한 후 모멘텀 벡터 m에 더하고 이 값을 빼는 방식으로 가중치 갱신
모멘텀이 너무 커지는 것을 막기 위해 모멘텀 이라는 새로운 하이퍼파라미터 β를 설정
? 그레이디언트가 일정하다면 가속도가 0이므로 종단속도 m = βm이 되어 m = 1/(1-β) 가 됨
모멘텀 최적화 구현: optimizer = keras.optimizers.SGD(learning_rate=0.001, momentum=0.9
모멘텀 최적화의 단점은 튜닝할 파라미터(모멘텀)이 하나 더 늘어난다는 것이지만, 보통 0.9에서 잘 동작하고 경사 하강법보다 거의 항상 더 빠름
모멘텀 최적화의 한 변종으로 기본 모멘텀 최적화보다 거의 항상 더 빠름
현재 위치가 θ가 아니라 모멘텀의 방향으로 조금 앞선 θ + βm에서 비용 함수의 그래디언트를 계산
일반적으로 모멘텀 벡터가 최적점을 향하는 방향을 가리킬 것이므로 이런 변경이 가능
▽1은 시작점 θ에서 측정한 비용함수의 그레이디언트를 나타내고, ▽2은 θ + βm에서 측정한 그레이디언트를 나타냄
네스테로프 업데이트가 최적값에 조금 더 가까움
모멘텀이 골짜기를 가로지르도록 가중치에 힘을 가할 때 ▽1은 골짜기를 더 가로지르도록 독려하는 반면 ▽2는 계곡의 아래쪽으로 잡아당기게 됨 => 진동을 감소시키고 수렴을 빠르게 함
기본 모멘텀 최적화보다 훈련 속도가 빠름, SGD 옵티마이저를 만들 때 use_nesterov=True라고 설정
optimizer = keras.optimizer.SGD(lr=0.001, momentum=0.9, nesterov=True)
1/25 (수) 10시