지수 붕괴가있는 Adam 최적화 프로그램


53

대부분의 Tensorflow 코드에서 Adam Optimizer가 일정한 학습 속도 1e-4(예 : 0.0001) 와 함께 사용되는 것을 보았습니다 . 코드는 일반적으로 다음과 같습니다.

...build the model...
# Add the optimizer
train_op = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
# Add the ops to initialize variables.  These will include 
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()

# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
  sess.run(train_op)

adam 최적화 프로그램을 사용할 때 지수 붕괴를 사용하는 것이 유용한 지 궁금합니다. 예를 들어 다음 코드를 사용하십시오.

...build the model...
# Add the optimizer
step = tf.Variable(0, trainable=False)
rate = tf.train.exponential_decay(0.15, step, 1, 0.9999)
optimizer = tf.train.AdamOptimizer(rate).minimize(cross_entropy, global_step=step)
# Add the ops to initialize variables.  These will include 
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()

# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
  sess.run(train_op)

일반적으로 사람들은 일종의 학습 속도 감소를 사용합니다. Adam은 드물게 보입니다. 이것에 대한 이론적 인 이유가 있습니까? Adam 옵티 마이저와 쇠퇴를 결합하는 것이 유용 할 수 있습니까?


반복 할 때마다 단계 변수를 어떻게 업데이트합니까?
perrohunter

@perrohunter :의 global_step매개 변수를 사용하십시오 minimize. 편집을 참조하십시오.
Charles Staats

9
참고 : 1e-4= 0.0001, not 0.0004.
Cliff AB

"global_step = step"을 지정하는 것을 보았지만 "step"변수가 어떻게 업데이트되는지 알 수 없습니다.
Diego

@Diego : 답변이 늦었지만 global_step 매개 변수이므로 최소화하기 위해 step 변수를 전달하면 최소화 기능이 호출 될 때마다 최소화 함수가 global_step 매개 변수를 증가시킵니다. 최소화에 대한 설명서를 참조하십시오. 이는 미니 배치를 수행 할 때 각 에포크뿐만 아니라 각 미니 배치에 대해 단계 변수가 업데이트됨을 의미합니다.
dimpol

답변:


37

경험적으로 말하면 : 분명히 시도해보십시오. 매우 유용한 훈련 휴리스틱을 찾을 수 있습니다.이 경우 공유하십시오!

보통 사람들은 어떤 종류의 부패를 사용합니다. 아담은 드문 일입니다. 이것에 대한 이론적 인 이유가 있습니까? Adam 옵티 마이저와 쇠퇴를 결합하는 것이 유용 할 수 있습니까?

ADAM 옵티 마이저를 사용하여 이것이 사실인지 아닌지 말하기에 충분한 사람들의 코드를 보지 못했습니다. 사실이라면 ADAM이 비교적 새롭고 학습률 저하 "모범 사례"가 아직 설정되지 않았기 때문일 수 있습니다.

αt=α/t

간단히 말해서, 이론상 아무것도 ADAM과 학습 속도 감소 규칙을 사용하지 않는 것으로 생각합니다. 나는 사람들이 ADAM을 사용하여 좋은 결과를보고하고 좋은 훈련 휴리스틱을 찾는 것이 매우 귀중하다는 것을 알았습니다.


12

대부분의 사람들이 Adam과 함께 학습 속도 감소를 사용하지 않는 이유는 알고리즘 자체가 다음과 같은 방식으로 학습 속도 감소를 수행하기 때문입니다.

t <- t + 1
lr_t <- learning_rate * sqrt(1 - beta2^t) / (1 - beta1^t)

t0초기 시간 단계는 어디 이며 lr_t새로운 학습률이 사용됩니다.


4
이것이 사실인지 확실하지 않습니다. 요인 sqrt(1 - beta2^t) / (1 - beta1^t)은 부패하지 않습니다. 첫 번째와 두 번째 모멘트 추정의 초기화를 보완하는 것으로 보입니다.
Thijs

25
이 답변은 잘못되었습니다. t가 무한대로 갈 때 그 계수는 1.0에 가까워집니다. 참고 사항 : learning_rate here는 고정되어 있습니다. 시간 t-1의 학습 속도가 아닙니다.
rd11

8

Adam은 원본 논문의 용어에 따라 초기 학습 속도 또는 단계 크기를 사용하면서 업데이트를 적응 적으로 계산합니다. 단계 크기는 또한 대략적인 업데이트 범위를 제공합니다. 이와 관련하여 훈련이 끝날 때까지 스텝 크기를 줄이는 것이 좋습니다. 이것은 또한 NIPS 2017의 최근 연구 : 머신 러닝에서 적응 그라디언트 방법의 한계 가치 에서 지원합니다 .

섹션 4 : 딥 러닝 실험의 마지막 줄에

기존의 지식에 따르면 Adam은 튜닝이 필요하지 않다고 제안하지만 Adam의 초기 학습 속도 및 감쇠 방식을 튜닝하면 모든 경우에 기본 설정보다 크게 개선됩니다.

마지막으로,이 백서는 어쨌든 SGD를 사용하도록 제안합니다.


2

@Indie AI의 의견에 동의합니다. 여기에서 다른 정보를 제공합니다.

에서 CS231n :

...이 방법 중 많은 방법은 여전히 ​​다른 하이퍼 파라미터 설정이 필요할 수 있지만, 원시 학습률보다 넓은 범위의 하이퍼 파라미터 값에 대해 잘 작동한다는 주장이 있습니다. ...

또한 컴퓨터 비전 섹션 8 의 시작 아키텍처를 다시 생각 하는 논문에서

... 최고의 모델은 0.9의 감쇠와 ε = 1.0의 RMSProp [21]을 사용하여 달성되었습니다. 우리는 학습률 0.045를 사용했고, 지수 비율 0.94를 사용하여 두 에포크마다 쇠퇴했습니다. ...


2

나는 사람이 뚱뚱한 것으로 간주된다면 키와 몸무게-bmi를 계산하는 데이터를 만들고 27 세 이상이면 뚱뚱한 사람으로 간주됩니다. 매우 쉬운 기본 데이터. Adam을 옵티 마이저로 사용하고 학습 속도를 0.001로 설정하면 정확도는 5 개의 epoc에 대해 약 85 %, 100 개의 epoc가 테스트 된 경우 최대 90 %로 나옵니다.

그러나 85 %로 다시로드하고 0.0001 학습 속도를 수행하면 정확도는 3 epoc가 95 %가되고 10 이상이 epoc이 약 98-99 %가됩니다. 학습 속도가 4 자리 0.0001 이하로 떨어질 수 있는지 확실하지 않지만 모델을 다시로드하고 0.00001을 사용하는 경우, Accucary는 99.20-100 % 정도를 가리키며 아래로 내려 가지 않습니다. 다시 한 번 학습 속도가 0으로 간주되는지 확실하지 않지만 어쨌든 그것이 내가 얻은 것입니다 ...

categorical_crossentropy를 사용하는이 모든 것이 있지만 mean_square는이 방법을 사용하여 99-100 %까지 얻습니다. AdaDelta, AdaGrad, Nesterov는 참고로 65 % 이상의 정확도를 얻을 수 없었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.