เครื่องมือเพิ่มประสิทธิภาพของอดัมพร้อมการสลายตัวแบบทวีคูณ


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 optimizer หรือไม่เช่นใช้รหัสต่อไปนี้:

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

โดยปกติแล้วผู้คนมักใช้อัตราการเรียนรู้ที่ลดลงเพราะอดัมดูเหมือนผิดปกติ มีเหตุผลทางทฤษฎีสำหรับสิ่งนี้หรือไม่? การรวมเครื่องมือเพิ่มประสิทธิภาพของอดัมกับการสลายตัวเป็นประโยชน์หรือไม่


คุณจะได้รับขั้นตอนตัวแปรที่จะอัปเดตในทุกการวนซ้ำได้อย่างไร
perrohunter

@perrohunter: ใช้พารามิเตอร์ของglobal_step minimizeดูการแก้ไข
Charles Staats

9
หมายเหตุ: 1e-4= ไม่0.0001 0.0004
หน้าผา AB

ฉันเห็นคุณกำหนด "global_step = ขั้นตอน" แต่ฉันไม่เห็นว่ามีการปรับปรุงตัวแปร "ขั้นตอน" ... คุณช่วยอธิบายได้มั้ย
Diego

@Diego: ตอบล่าช้า แต่: ผ่านตัวแปรขั้นตอนเพื่อลดขนาดเนื่องจากพารามิเตอร์ global_step ทำให้ฟังก์ชั่นย่อเล็กสุดเพิ่มพารามิเตอร์ global_step ทุกครั้งที่ย่อเล็กสุดถูกเรียก ดูเอกสารประกอบการย่อขนาด โปรดทราบว่านี่หมายความว่าเมื่อทำมินิแบทช์ตัวแปรขั้นตอนจะได้รับการอัปเดตสำหรับมินิแต่ละแบทช์ไม่ใช่เฉพาะสำหรับแต่ละยุค
dimpol

คำตอบ:


37

สังเกตุการพูด: ลองแน่นอนคุณอาจพบบางอย่างฮิวริสติกการฝึกอบรมที่มีประโยชน์มากซึ่งในกรณีนี้โปรดแชร์!

โดยปกติแล้วคนมักใช้การสลายตัวบางอย่างสำหรับอาดัมมันดูไม่ธรรมดา มีเหตุผลทางทฤษฎีสำหรับสิ่งนี้หรือไม่? การรวมเครื่องมือเพิ่มประสิทธิภาพของอดัมกับการสลายตัวเป็นประโยชน์หรือไม่

ฉันไม่เห็นรหัสของผู้คนเพียงพอที่ใช้เครื่องมือเพิ่มประสิทธิภาพ ADAM เพื่อบอกว่านี่เป็นเรื่องจริงหรือไม่ หากเป็นจริงอาจเป็นเพราะ ADAM นั้นค่อนข้างใหม่และอัตราการเรียนรู้ยังไม่ได้รับการยอมรับ

ฉันต้องการทราบว่าการสลายตัวของอัตราการเรียนรู้เป็นส่วนหนึ่งของการรับประกันทางทฤษฎีสำหรับ ADAM โดยเฉพาะในทฤษฎีบท 4.1 ของบทความ ICLRหนึ่งในสมมติฐานของพวกเขาคือการที่อัตราการเรียนรู้มีการสลายตัวของราก{t} นอกจากนี้สำหรับการทดลองการถดถอยโลจิสติกของพวกเขาพวกเขาใช้การสลายตัวของรากที่สองเช่นกันαt=α/t

พูดง่าย ๆ : ฉันไม่คิดว่าอะไรในทางทฤษฎีที่จะลดทอนอัตราการเรียนรู้ด้วยกฎของ ADAM ฉันเคยเห็นผู้คนรายงานผลลัพธ์ที่ดีโดยใช้ ADAM และการค้นหาวิธีการฝึกอบรมที่ดีจะมีค่าอย่างไม่น่าเชื่อ


12

เหตุผลที่คนส่วนใหญ่ไม่ใช้การสลายตัวของอัตราการเรียนรู้กับอดัมคืออัลกอริธึมเองนั้นสลายอัตราการเรียนรู้ด้วยวิธีต่อไปนี้:

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

โดยที่t0timestep เริ่มต้นอยู่ที่ไหนและlr_tใช้อัตราการเรียนรู้ใหม่


4
ฉันไม่แน่ใจว่าเป็นกรณีนี้หรือไม่ ปัจจัยsqrt(1 - beta2^t) / (1 - beta1^t)ไม่ได้สลายตัว ดูเหมือนว่าจะชดเชยการเริ่มต้นของการประมาณการช่วงเวลาแรกและครั้งที่สอง
Thijs

25
คำตอบนี้ไม่ถูกต้อง ปัจจัยนั้นเข้าใกล้ 1.0 เมื่อ t ไปที่อนันต์ หมายเหตุด้านข้าง: learning_rate ที่นี่ได้รับการแก้ไขแล้ว ไม่ใช่อัตราการเรียนรู้ในเวลา t-1
rd11

8

อดัมใช้อัตราการเรียนรู้เริ่มต้นหรือขนาดขั้นตอนตามคำศัพท์ของกระดาษต้นฉบับในขณะที่คำนวณการปรับปรุงแบบปรับตัว ขนาดขั้นตอนยังให้ขอบเขตโดยประมาณสำหรับการอัพเดต ในเรื่องนี้ฉันคิดว่ามันเป็นความคิดที่ดีที่จะลดขนาดขั้นตอนในตอนท้ายของการฝึกอบรม นี้ได้รับการสนับสนุนโดยผลงานล่าสุดจาก NIPS 2017: มูลค่าส่วนเพิ่มของการปรับเปลี่ยนวิธีการไล่โทนสีในการเรียนรู้ของเครื่อง

บรรทัดสุดท้ายในส่วนที่ 4: การทดสอบการเรียนรู้ขั้นสูงพูดว่า

แม้ว่าภูมิปัญญาดั้งเดิมแสดงให้เห็นว่าอดัมไม่ต้องการการปรับแต่ง แต่เราพบว่าการปรับอัตราการเรียนรู้เริ่มต้นและรูปแบบการสลายตัวสำหรับอดัมให้ผลดีขึ้นอย่างมากจากการตั้งค่าเริ่มต้นในทุกกรณี

ท้ายสุด แต่ไม่ท้ายสุดบทความแนะนำว่าเราใช้เงินสกุล SGD ต่อไป


2

ฉันเห็นด้วยกับความเห็นของ @Indie AI ที่นี่ฉันให้ข้อมูลอื่น ๆ :

จากCS231n :

... วิธีการเหล่านี้จำนวนมากอาจยังต้องการการตั้งค่าพารามิเตอร์ไฮเปอร์พารามิเตอร์อื่น ๆ แต่ข้อโต้แย้งก็คือพวกเขามีความประพฤติดีสำหรับค่าพารามิเตอร์พารามิเตอร์ในช่วงกว้างกว่าอัตราการเรียนรู้แบบดิบ ...

และจากกระดาษทบทวนสถาปัตยกรรมการลงทะเบียนเรียนสำหรับคอมพิวเตอร์วิสัยทัศน์มาตรา 8:

... ในขณะที่แบบจำลองที่ดีที่สุดของเราสามารถทำได้โดยใช้ RMSProp [21] โดยมีค่า 0.9 และε = 1.0 เราใช้อัตราการเรียนรู้ 0.045 สลายตัวทุก ๆ สองยุคโดยใช้อัตราเอ็กซ์โปเนนเชียล 0.94 ...


2

ฉันฝึกฝนชุดข้อมูลที่มีข้อมูลง่าย ๆ จริง ๆ ถ้าคนนั้นถือว่าอ้วนหรือไม่ความสูงและน้ำหนัก - การสร้างข้อมูลที่คำนวณ bmi และถ้าอายุมากกว่า 27 คนจะอ้วน ข้อมูลพื้นฐานง่ายมาก เมื่อใช้อดัมเป็นเครื่องมือเพิ่มประสิทธิภาพและอัตราการเรียนรู้ที่ 0.001 ความแม่นยำจะทำให้ฉันได้ประมาณ 85% สำหรับ 5 epocs เพิ่มสูงสุด 90% พร้อมการทดสอบมากกว่า 100 epocs

แต่เมื่อโหลดอีกครั้งที่ 85% และทำอัตราการเรียนรู้ 0.0001 ความแม่นยำจะมากกว่า 3 epocs goto 95% และอีก 10 epocs มันอยู่ที่ประมาณ 98-99% ไม่แน่ใจว่าอัตราการเรียนรู้สามารถต่ำกว่า 4 หลัก 0.0001 ได้หรือไม่ แต่เมื่อโหลดแบบจำลองอีกครั้งและใช้ 0.00001 อุปกรณ์เสริมจะเลื่อนไปรอบ ๆ 99.20 - 100% และจะไม่ลงไปด้านล่าง อีกครั้งไม่แน่ใจว่าอัตราการเรียนรู้จะถูกพิจารณาเป็น 0 แต่อย่างไรก็ตามนั่นคือสิ่งที่ฉันได้รับ ...

ทั้งหมดนี้ใช้ categorical_crossentropy แต่ mean_square ทำให้มันเป็น 99-100% ด้วยวิธีนี้ AdaDelta, AdaGrad, Nesterov ไม่สามารถรับความแม่นยำสูงกว่า 65% เพียงเพื่อทราบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.