วิธีเลือกอัตราการเรียนรู้ที่ดีที่สุดสำหรับโครงการแมชชีนเลิร์นนิงของคุณ

ปัญหาทั่วไปที่เราทุกคนต้องเผชิญเมื่อทำงานในโครงการการเรียนรู้เชิงลึกคือการเลือกอัตราการเรียนรู้และเครื่องมือเพิ่มประสิทธิภาพ (พารามิเตอร์ไฮเปอร์) ถ้าคุณเหมือนฉันคุณจะพบว่าตัวเองกำลังคาดเดาเครื่องมือเพิ่มประสิทธิภาพและอัตราการเรียนรู้จากนั้นตรวจสอบว่าพวกเขาทำงานได้หรือไม่ (และเราไม่ได้อยู่คนเดียว)

เพื่อให้เข้าใจถึงผลกระทบของเครื่องมือเพิ่มประสิทธิภาพและตัวเลือกอัตราการเรียนรู้ได้ดีขึ้นฉันได้ฝึกโมเดลเดียวกัน 500 ครั้ง ผลการศึกษาแสดงให้เห็นว่าไฮเปอร์พารามิเตอร์ที่เหมาะสมมีความสำคัญต่อความสำเร็จในการฝึกซ้อม แต่ก็หาได้ยาก

ในบทความนี้ฉันจะพูดถึงวิธีแก้ปัญหานี้โดยใช้วิธีการอัตโนมัติเพื่อเลือกไฮเปอร์พารามิเตอร์ที่เหมาะสมที่สุด

การตั้งค่าการทดลอง

ฉันฝึกโครงข่ายประสาทเทียมขั้นพื้นฐานจากชุดการสอนของ TensorFlow ซึ่งเรียนรู้ที่จะจดจำตัวเลข MNIST นี่เป็นเครือข่ายขนาดเล็กพอสมควรโดยมีเลเยอร์ Convolutional สองชั้นและสองชั้นหนาแน่นรวมทั้งหมดประมาณ 3,400 น้ำหนักในการฝึกใช้เมล็ดพันธุ์แบบสุ่มเดียวกันสำหรับการฝึกแต่ละครั้ง

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

(หากคุณต้องการบริจาคเวลาให้ GPU เพื่อเรียกใช้การทดสอบรุ่นใหญ่บน CIFAR-10 โปรดติดต่อกลับ)

อัตราการเรียนรู้ใดดีที่สุด

สิ่งแรกที่เราจะสำรวจคืออัตราการเรียนรู้มีผลต่อการฝึกโมเดลอย่างไร ในการวิ่งแต่ละครั้งโมเดลเดียวกันจะได้รับการฝึกฝนตั้งแต่เริ่มต้นโดยจะแตกต่างกันเพียงเครื่องมือเพิ่มประสิทธิภาพและอัตราการเรียนรู้

โมเดลนี้ได้รับการฝึกฝนด้วยเครื่องมือเพิ่มประสิทธิภาพ 6 แบบ ได้แก่ Gradient Descent, Adam, Adagrad, Adadelta, RMS Prop และ Momentum สำหรับเครื่องมือเพิ่มประสิทธิภาพแต่ละตัวได้รับการฝึกอบรมด้วยอัตราการเรียนรู้ที่แตกต่างกัน 48 อัตราตั้งแต่ 0.000001 ถึง 100 ในช่วงลอการิทึม

ในการวิ่งแต่ละครั้งเครือข่ายจะได้รับการฝึกฝนจนกว่าจะบรรลุความแม่นยำในการฝึกอย่างน้อย 97% เวลาสูงสุดที่อนุญาตคือ 120 วินาที การทดลองดำเนินการบน Nvidia Tesla K80 ซึ่งโฮสต์โดย FloydHub สามารถดาวน์โหลดซอร์สโค้ดได้

นี่คือเวลาฝึกอบรมสำหรับอัตราการเรียนรู้และเครื่องมือเพิ่มประสิทธิภาพแต่ละตัวเลือก:

กราฟข้างบนนี้น่าสนใจ เราจะเห็นว่า:

  • สำหรับเครื่องมือเพิ่มประสิทธิภาพทุกตัวอัตราการเรียนรู้ส่วนใหญ่ไม่สามารถฝึกโมเดลได้
  • มีรูปทรงหุบเขาสำหรับเครื่องมือเพิ่มประสิทธิภาพแต่ละตัว: อัตราการเรียนรู้ที่ต่ำเกินไปจะไม่ดำเนินต่อไปและอัตราการเรียนรู้ที่สูงเกินไปทำให้เกิดความไม่มั่นคงและไม่มีวันบรรจบกัน ในระหว่างนั้นมีอัตราการเรียนรู้ที่“ ถูกต้อง” จำนวนหนึ่งที่ฝึกฝนได้สำเร็จ
  • ไม่มีอัตราการเรียนรู้ใดที่ใช้ได้กับเครื่องมือเพิ่มประสิทธิภาพทั้งหมด
  • อัตราการเรียนรู้อาจส่งผลต่อเวลาในการฝึกอบรมตามลำดับความสำคัญ

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

เพื่อแสดงให้เห็นว่าเครื่องมือเพิ่มประสิทธิภาพแต่ละตัวแตกต่างกันอย่างไรในอัตราการเรียนรู้ที่เหมาะสมนี่คือรูปแบบที่เร็วและช้าที่สุดในการฝึกอบรมสำหรับแต่ละอัตราการเรียนรู้ในเครื่องมือเพิ่มประสิทธิภาพทั้งหมด โปรดสังเกตว่าเวลาสูงสุดคือ 120 วินาที (เช่นเครือข่ายล้มเหลวในการฝึกอบรม) ทั่วทั้งกราฟ - ไม่มีอัตราการเรียนรู้เดียวที่ใช้ได้กับเครื่องมือเพิ่มประสิทธิภาพทุกตัว:

ตรวจสอบอัตราการเรียนรู้ที่หลากหลาย (ตั้งแต่ 0.001 ถึง 30) ที่ประสบความสำเร็จด้วยเครื่องมือเพิ่มประสิทธิภาพอย่างน้อยหนึ่งตัวจากกราฟด้านบน

เครื่องมือเพิ่มประสิทธิภาพใดทำงานได้ดีที่สุด

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

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

ข้อสังเกตบางประการ:

  • เครื่องมือเพิ่มประสิทธิภาพทั้งหมดนอกเหนือจาก RMSProp (ดูจุดสุดท้าย)จัดการให้มาบรรจบกันในเวลาที่เหมาะสม
  • อดัมเรียนรู้ได้เร็วที่สุด
  • อดัมมีความเสถียรมากกว่าเครื่องมือเพิ่มประสิทธิภาพอื่น ๆ และไม่ได้รับความแม่นยำลดลง
  • RMSProp ถูกรันด้วยอาร์กิวเมนต์เริ่มต้นจาก TensorFlow (อัตราการสลายตัว 0.9, epsilon 1e-10, โมเมนตัม 0.0) และอาจเป็นกรณีที่สิ่งเหล่านี้ทำงานได้ไม่ดีสำหรับงานนี้ นี่เป็นกรณีการใช้งานที่ดีสำหรับการค้นหาไฮเปอร์พารามิเตอร์อัตโนมัติ (ดูข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อสุดท้ายในหัวข้อสุดท้าย)

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

ขนาดโมเดลมีผลต่อเวลาในการฝึกอย่างไร?

ตอนนี้มาดูกันว่าขนาดของโมเดลมีผลต่อการฝึกอย่างไร

เราจะเปลี่ยนขนาดโมเดลตามปัจจัยเชิงเส้น ปัจจัยดังกล่าวจะปรับขนาดจำนวนของตัวกรอง Convolutional เชิงเส้นและความกว้างของเลเยอร์ที่มีความหนาแน่นแรกโดยประมาณโดยประมาณในเชิงเส้นของจำนวนน้ำหนักทั้งหมดในแบบจำลอง

มีสองประเด็นที่เราจะตรวจสอบ:

  1. เวลาในการฝึกอบรมเปลี่ยนแปลงไปอย่างไรเมื่อโมเดลเติบโตขึ้นสำหรับเครื่องมือเพิ่มประสิทธิภาพคงที่และอัตราการฝึกอบรม
  2. อัตราการเรียนรู้ใดที่ฝึกได้เร็วที่สุดในแต่ละขนาดของโมเดลสำหรับเครื่องมือเพิ่มประสิทธิภาพคงที่

เวลาในการฝึกอบรมเปลี่ยนแปลงไปอย่างไรเมื่อโมเดลเติบโตขึ้น?

ด้านล่างแสดงเวลาที่ใช้เพื่อให้ได้ความแม่นยำในการฝึก 96% ในโมเดลโดยเพิ่มขนาดจาก 1x เป็น 10x เราได้ใช้หนึ่งในไฮเปอร์พารามิเตอร์ที่ประสบความสำเร็จมากที่สุดจากก่อนหน้านี้:

  • เวลาในการฝึกอบรมจะเติบโตเป็นเชิงเส้นตามขนาดของโมเดล
  • อัตราการเรียนรู้เดียวกันประสบความสำเร็จในการฝึกเครือข่ายในทุกรุ่น

(หมายเหตุ: คุณสามารถใช้ผลลัพธ์ต่อไปนี้สำหรับชุดข้อมูลและแบบจำลองที่ทดสอบที่นี่เท่านั้น แต่อาจคุ้มค่ากับการทดสอบสำหรับการทดลองของคุณ)

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

นอกจากนี้ยังแสดงให้เห็นว่าเมื่อเครือข่ายมีขนาดใหญ่ขึ้นจะไม่ต้องใช้ O (n²) ใด ๆ ในการรวมโมเดล (การเติบโตเชิงเส้นตรงเวลาสามารถอธิบายได้จากการดำเนินการเพิ่มเติมที่เกิดขึ้นสำหรับการฝึกน้ำหนักแต่ละครั้ง)

ผลลัพธ์นี้ช่วยให้มั่นใจยิ่งขึ้นเนื่องจากแสดงกรอบการเรียนรู้เชิงลึกของเรา (ที่นี่ TensorFlow) ปรับขนาดได้อย่างมีประสิทธิภาพ

อัตราการเรียนรู้ใดทำงานได้ดีที่สุดสำหรับโมเดลขนาดต่างๆ

มาทำการทดสอบเดียวกันสำหรับอัตราการเรียนรู้หลาย ๆ อัตราและดูว่าเวลาฝึกตอบสนองต่อขนาดโมเดลอย่างไร:

  • อัตราการเรียนรู้ 0.0005, 0.001, 0.00146 ทำได้ดีที่สุด - สิ่งเหล่านี้ทำได้ดีที่สุดในการทดลองครั้งแรก เราเห็นวง "จุดหวาน" แบบเดียวกับการทดลองครั้งแรกที่นี่
  • เวลาในการฝึกอบรมของอัตราการเรียนรู้แต่ละครั้งจะเพิ่มขึ้นตามขนาดของโมเดล
  • ประสิทธิภาพของอัตราการเรียนรู้ไม่ได้ขึ้นอยู่กับขนาดของโมเดล อัตราเดียวกับที่ทำงานได้ดีที่สุดสำหรับขนาด 1x ทำงานได้ดีที่สุดสำหรับขนาด 10x
  • สูงกว่า 0.001 การเพิ่มอัตราการเรียนรู้ช่วยเพิ่มเวลาในการฝึกอบรมและยังเพิ่มความแปรปรวนของเวลาในการฝึกอบรม (เมื่อเทียบกับฟังก์ชันเชิงเส้นของขนาดโมเดล)
  • ใช้เวลาในการรถไฟสามารถประมาณถูกจำลองเป็นC + knสำหรับรุ่นที่มีnน้ำหนัก, ค่าใช้จ่ายคงคและการเรียนรู้อย่างต่อเนื่องk = f (อัตราการเรียนรู้)

โดยสรุปอัตราการเรียนรู้ที่มีประสิทธิภาพดีที่สุดสำหรับขนาด 1x เป็นอัตราการเรียนรู้ที่ดีที่สุดสำหรับขนาด 10x

การเลือกอัตราการเรียนรู้โดยอัตโนมัติ

ดังที่แสดงผลลัพธ์ก่อนหน้านี้สิ่งสำคัญอย่างยิ่งสำหรับการฝึกโมเดลที่จะต้องมีทางเลือกที่ดีของเครื่องมือเพิ่มประสิทธิภาพและอัตราการเรียนรู้

การเลือกไฮเปอร์พารามิเตอร์เหล่านี้ด้วยตนเองใช้เวลานานและเกิดข้อผิดพลาดได้ง่าย เมื่อโมเดลของคุณเปลี่ยนไปตัวเลือกไฮเปอร์พารามิเตอร์ก่อนหน้านี้อาจไม่เหมาะอีกต่อไป เป็นไปไม่ได้ที่จะทำการค้นหาใหม่ด้วยมืออย่างต่อเนื่อง

มีหลายวิธีในการเลือกไฮเปอร์พารามิเตอร์โดยอัตโนมัติ ฉันจะสรุปแนวทางที่แตกต่างกันสองสามวิธีที่นี่

ค้นหาตาราง

การค้นหาแบบกริดคือสิ่งที่เราดำเนินการในการทดสอบแรก - สำหรับไฮเปอร์พารามิเตอร์แต่ละรายการให้สร้างรายการค่าที่เป็นไปได้ จากนั้นสำหรับการรวมกันของค่าไฮเปอร์พารามิเตอร์ที่เป็นไปได้ให้ฝึกอบรมเครือข่ายและวัดประสิทธิภาพของเครือข่าย ไฮเปอร์พารามิเตอร์ที่ดีที่สุดคือพารามิเตอร์ที่ให้ประสิทธิภาพที่สังเกตได้ดีที่สุด

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

การฝึกอบรมตามประชากร

การฝึกอบรมตามประชากร (DeepMind) เป็นการนำไปใช้อย่างสง่างามโดยใช้อัลกอริธึมทางพันธุกรรมสำหรับการเลือกพารามิเตอร์ที่มีค่ามากเกินไป

ใน PBT จะมีการสร้างประชากรของแบบจำลอง พวกเขาทั้งหมดได้รับการฝึกฝนอย่างต่อเนื่องควบคู่กันไป เมื่อสมาชิกคนใดคนหนึ่งของประชากรมีเวลานานพอที่จะฝึกอบรมเพื่อแสดงการปรับปรุงความถูกต้องของการตรวจสอบความถูกต้องจะถูกเปรียบเทียบกับประชากรที่เหลือ หากประสิทธิภาพอยู่ในระดับต่ำสุด 20% ระบบจะคัดลอกและเปลี่ยนพารามิเตอร์ไฮเปอร์และตัวแปรของหนึ่งในนักแสดง 20% อันดับแรก

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

ขั้นตอนถัดไป

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

หากมีหัวข้อหรือส่วนขยายใดที่คุณสนใจโปรดแจ้งให้เราทราบ นอกจากนี้หากคุณสนใจที่จะบริจาคเวลา GPU เพื่อเรียกใช้การทดสอบเวอร์ชันที่ใหญ่กว่านี้ฉันชอบที่จะพูดคุย

งานเขียนเหล่านี้เป็นส่วนหนึ่งของการสำรวจหัวข้อสถาปัตยกรรม AI ตลอดทั้งปี ติดตามสิ่งพิมพ์นี้ (และปรบมือให้กับบทความนี้!) เพื่อรับข้อมูลอัปเดตเมื่อมีงานชิ้นต่อไปออกมา