Tối ưu hóa Adam với phân rã theo cấp số nhân


53

Trong hầu hết các mã Tensorflow tôi đã thấy Adam Tối ưu hóa được sử dụng với Tỷ lệ học tập không đổi là 1e-4(tức là 0,0001). Mã thường trông như sau:

...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)

Tôi tự hỏi, liệu có hữu ích khi sử dụng phân rã theo cấp số nhân khi sử dụng trình tối ưu hóa adam hay không, tức là sử dụng Mã sau:

...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)

Thông thường, mọi người sử dụng một số loại phân rã tỷ lệ học tập, đối với Adam có vẻ không phổ biến. Có bất kỳ lý do lý thuyết cho việc này? Nó có thể hữu ích để kết hợp tối ưu hóa Adam với sâu răng?


Làm thế nào để bạn có được bước Biến để cập nhật với mỗi lần lặp?
perrohunter

@perrohunter: Sử dụng global_steptham số của minimize. Xem chỉnh sửa.
Charles Staats

9
Lưu ý: 1e-4= 0.0001, không 0.0004.
Vách đá AB

Tôi thấy bạn gán "global_step = step" nhưng tôi không thấy biến "bước" đang được cập nhật như thế nào ... bạn có thể làm rõ không?
Diego

@Diego: trả lời muộn nhưng: chuyển biến bước để thu nhỏ vì tham số global_step làm cho hàm thu nhỏ tăng tham số global_step mỗi lần gọi thu nhỏ. Xem tài liệu để giảm thiểu. Xin lưu ý rằng điều này có nghĩa là khi thực hiện các lô nhỏ, biến số bước được cập nhật cho từng lô nhỏ, không chỉ cho mỗi kỷ nguyên.
dimpol

Câu trả lời:


37

Nói theo kinh nghiệm: chắc chắn hãy thử nó, bạn có thể tìm thấy một số heuristic đào tạo rất hữu ích, trong trường hợp này, xin vui lòng chia sẻ!

Thông thường mọi người sử dụng một số loại sâu răng, đối với Adam có vẻ không phổ biến. Có bất kỳ lý do lý thuyết cho việc này? Nó có thể hữu ích để kết hợp tối ưu hóa Adam với sâu răng?

Tôi chưa thấy đủ mã người sử dụng trình tối ưu hóa ADAM để nói liệu điều này có đúng hay không. Nếu đó là sự thật, có lẽ đó là vì ADAM còn khá mới và tỷ lệ học tập "thực tiễn tốt nhất" chưa được thiết lập.

αt=α/t

Nói một cách đơn giản: Tôi không nghĩ bất cứ điều gì trong lý thuyết không khuyến khích sử dụng các quy tắc phân rã tỷ lệ học tập với ADAM. Tôi đã thấy mọi người báo cáo một số kết quả tốt khi sử dụng ADAM và tìm thấy một số heuristic đào tạo tốt sẽ vô cùng quý giá.


12

Lý do tại sao hầu hết mọi người không sử dụng phân rã tỷ lệ học tập với Adam là vì chính thuật toán thực hiện phân rã tỷ lệ học tập theo cách sau:

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

đâu t0là dấu thời gian ban đầu và lr_tlà tốc độ học tập mới được sử dụng.


4
Tôi không chắc đây là trường hợp. Yếu tố sqrt(1 - beta2^t) / (1 - beta1^t)không phân rã. Nó dường như bù đắp cho việc khởi tạo các ước tính khoảnh khắc thứ nhất và thứ hai.
Thijs

25
Câu trả lời này không chính xác. Yếu tố đó tiến đến 1.0 khi t đi đến vô cùng. Lưu ý bên: learning_rate ở đây là cố định . Đó không phải là tỷ lệ học tập tại thời điểm t-1.
lần thứ 11

8

Adam sử dụng tốc độ học tập ban đầu, hoặc kích thước bước theo thuật ngữ của bài báo gốc, trong khi tính toán cập nhật thích ứng. Kích thước bước cũng cung cấp một giới hạn gần đúng cho các bản cập nhật. Về vấn đề này, tôi nghĩ rằng nên giảm kích thước bước cho đến khi kết thúc đào tạo. Điều này cũng được hỗ trợ bởi một công việc gần đây từ NIPS 2017: Giá trị cận biên của các phương pháp Gradient thích ứng trong Machine Learning .

Dòng cuối cùng trong Phần 4: Các thí nghiệm học tập sâu nói

Mặc dù sự khôn ngoan thông thường cho thấy Adam không yêu cầu điều chỉnh, chúng tôi thấy rằng việc điều chỉnh tỷ lệ học tập ban đầu và sơ đồ phân rã cho Adam mang lại những cải tiến đáng kể so với các cài đặt mặc định của nó trong mọi trường hợp.

Cuối cùng nhưng không kém phần quan trọng, bài báo gợi ý rằng chúng ta nên sử dụng SGD.


2

Tôi đồng ý với ý kiến ​​của @Indie AI, ở đây tôi cung cấp một số thông tin khác:

Từ CS231n :

... Nhiều phương pháp trong số này vẫn có thể yêu cầu các cài đặt siêu tham số khác, nhưng đối số là chúng được xử lý tốt cho phạm vi giá trị siêu tham số rộng hơn so với tốc độ học thô. ...

Và cũng từ bài viết Xem xét lại kiến ​​trúc khởi động cho tầm nhìn máy tính Phần 8:

... trong khi các mô hình tốt nhất của chúng tôi đã đạt được bằng RMSProp [21] với độ chính xác là 0,9 và ε = 1,0. Chúng tôi đã sử dụng tỷ lệ học tập là 0,045, cứ sau hai epoch lại phân rã bằng tỷ lệ mũ là 0,94. ...


2

Tôi đã đào tạo một bộ dữ liệu với dữ liệu thực sự dễ dàng, nếu một người được coi là béo hay không, chiều cao và cân nặng - tạo ra dữ liệu tính toán bmi, và nếu trên 27 tuổi, người đó béo. Vì vậy, dữ liệu cơ bản rất dễ dàng. Khi sử dụng Adam làm trình tối ưu hóa và tỷ lệ học tập ở mức 0,001, độ chính xác sẽ chỉ giúp tôi đạt khoảng 85% cho 5 epocs, đứng đầu tối đa 90% với hơn 100 epocs được thử nghiệm.

Nhưng khi tải lại ở mức có thể 85% và đạt 0,0001 tỷ lệ học, độ chính xác sẽ vượt quá 3 epocs goto 95% và 10 epocs nữa là khoảng 98-99%. Không chắc chắn nếu tỷ lệ học tập có thể xuống dưới 4 chữ số 0,0001, nhưng khi tải lại mô hình và sử dụng 0,00001, điểm nhấn sẽ di chuột quanh 99,20 - 100% và sẽ không đi bên dưới. Một lần nữa, không chắc liệu tỷ lệ học tập có được coi là 0 hay không, nhưng dù sao, đó là những gì tôi đã có ...

Tất cả điều này bằng cách sử dụng c sortical_crossentropy, nhưng mean_sapes giúp nó đạt 99 đến 100% khi thực hiện phương pháp này. AdaDelta, AdaGrad, Nesterov không thể có độ chính xác trên 65%, chỉ để ghi chú.


0

Phân rã tốc độ học tập trong Adam cũng giống như trong RSMProp (như bạn có thể thấy từ câu trả lời này ), và đó là loại chủ yếu dựa trên cường độ của các gradient trước để loại bỏ các dao động . Vì vậy, sự phân rã theo cấp số nhân (đối với tốc độ học tập giảm dần trong quá trình đào tạo) có thể được chấp nhận cùng một lúc. Tất cả đều phân rã tỷ lệ học tập nhưng cho các mục đích khác nhau .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.