GradientDescentOptimizer와 AdamOptimizer (TensorFlow)의 차이점은 무엇입니까?


45

XOR-Gate 모델링하는 TensorFlow 에서 간단한 MLP 를 작성했습니다 .

그래서 :

input_data = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]

다음을 생성해야합니다.

output_data = [[0.], [1.], [1.], [0.]]

네트워크에는 입력 레이어, 숨겨진 레이어 및 각각 2, 5 및 1 뉴런이있는 출력 레이어가 있습니다.

현재 다음과 같은 교차 엔트로피가 있습니다.

cross_entropy = -(n_output * tf.log(output) + (1 - n_output) * tf.log(1 - output))

또한이 간단한 대안을 시도했습니다.

cross_entropy = tf.square(n_output - output)

다른 시도와 함께.


그러나 내 설정에 관계없이 a의 오류는 a 보다 훨씬 느리게 GradientDescentOptimizer감소 했습니다 .AdamOptimizer

실제로 tf.train.AdamOptimizer(0.01)400-800 개의 학습 단계 ( 0.01최상의 결과를 얻은 학습 속도의 의존성) 후에 실제로 좋은 결과를 tf.train.GradientDescentOptimizer산출하는 한편, 교차 엔트로피 계산이나 학습 속도에 관계없이 항상 2000 개 이상의 학습 단계가 필요했습니다.

왜 그렇습니까? AdamOptimizer항상 더 나은 선택 인 것 같습니다 !


2
Adam 옵티마이 저는 그라디언트 디센트보다 더 정교합니다 ( 이 문서를 기반으로 함 ).
Marc Claesen

답변:


77

tf.train.AdamOptimizer사용 Kingma 및 Ba의 아담 알고리즘은 학습 속도를 제어 할 수 있습니다. Adam은 단순한 것보다 몇 가지 장점을 제공합니다 tf.train.GradientDescentOptimizer. 가장 중요한 것은 매개 변수의 이동 평균 (모멘텀)을 사용한다는 것입니다 . Bengio는 이 문서의 3.1.1 절에서 이것이 유용한 이유에 대해 설명합니다 . 간단히 말해 Adam은 더 큰 유효 단계 크기를 사용할 수 있으며 알고리즘은 미세 조정없이이 단계 크기로 수렴됩니다.

알고리즘의 주요 단점은 Adam이 각 훈련 단계에서 각 매개 변수에 대해 더 많은 계산을 수행해야한다는 것입니다 (이동 평균 및 분산을 유지하고 스케일 된 기울기를 계산하기 위해). 각 매개 변수에 대해 더 많은 상태가 유지됩니다 (각 매개 변수의 평균 및 분산을 저장하기 위해 모델 크기가 대략 3 배가 됨). 간단한 tf.train.GradientDescentOptimizer것은 MLP에서 동일하게 사용될 수 있지만 빠른 수렴을 위해서는 더 많은 하이퍼 파라미터 튜닝이 필요합니다.


5
이 답변에 감사드립니다! " 하이 파라미터 튜닝 " 에 대해 말할 때 정확히 무엇을 의미 할 수 있습니까?
daniel451

12
전문 용어에 대해 죄송합니다! 대략적으로 말하면, " 생성자가 더 빨리 수렴 될 때까지 생성자에 대한 learning_rate인수를 변경하는 것"을 의미 tf.train.GradientDescentOptimizer했습니다. :)
mrry
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.