วิธีปรับโมเดลอัตโนมัติด้วย HyperOpt
คุณชอบการปรับแต่งโมเดลหรือไม่? ถ้าคำตอบของคุณคือ “ใช่” โพสต์นี้คือ ไม่ สำหรับคุณ
ในบล็อกนี้ เราจะพูดถึงอัลกอริธึมการปรับไฮเปอร์พารามิเตอร์อัตโนมัติที่ได้รับความนิยมอย่างมากที่เรียกว่า ตัวประมาณ Parzen แบบต้นไม้ (ม.ป.ป). TPE รองรับโดยแพ็คเกจโอเพ่นซอร์ส HyperOpt ด้วยการใช้ประโยชน์จาก HyperOpt และ TPE วิศวกรแมชชีนเลิร์นนิงสามารถทำได้ พัฒนาโมเดลที่เพิ่มประสิทธิภาพสูงสุดอย่างรวดเร็วโดยไม่ต้องทำการปรับแต่งด้วยตนเอง.
มาดำน้ำกันเถอะ!
HyperOpt เป็นแพ็คเกจ python แบบโอเพ่นซอร์สที่ใช้อัลกอริทึมที่เรียกว่า Tree-based Parzen Esimtors (TPE) เพื่อเลือกไฮเปอร์พารามิเตอร์ของโมเดลซึ่งปรับฟังก์ชันวัตถุประสงค์ที่ผู้ใช้กำหนดให้เหมาะสมที่สุด เพียงแค่กำหนดรูปแบบการทำงานและขอบเขตของไฮเปอร์พารามิเตอร์แต่ละตัว TPE จะค้นหาอย่างถี่ถ้วนแต่มีประสิทธิภาพผ่านไฮเปอร์สเปซที่ซับซ้อนเพื่อเข้าถึงค่าที่เหมาะสมที่สุด
TPE เป็นอัลกอริทึมแบบลำดับที่ใช้ประโยชน์จากการอัปเดตแบบเบย์และทำตามลำดับด้านล่าง
- ฝึกโมเดลด้วยไฮเปอร์พารามิเตอร์หลายชุดที่สุ่มเลือก ส่งคืนค่าฟังก์ชันวัตถุประสงค์
- แบ่งค่าฟังก์ชันวัตถุประสงค์ที่สังเกตได้ของเราออกเป็นกลุ่ม "ดี" และ "ไม่ดี" ตามเกณฑ์แกมมา (γ)
- คำนวณคะแนน "แนวโน้ม" ซึ่งเป็นเพียง P(x|ดี) / P(x|ไม่ดี).
- กำหนดไฮเปอร์พารามิเตอร์ที่เพิ่มศักยภาพสูงสุดผ่านโมเดลผสม
- พอดีกับโมเดลของเราโดยใช้ไฮเปอร์พารามิเตอร์จากขั้นตอนที่ 4
- ทำซ้ำขั้นตอนที่ 2-5 จนกว่าจะถึงเกณฑ์การหยุด
ที่นี่ว่า ตัวอย่างโค้ดด่วน.
ตกลงนั่นเป็นคำพูดที่ยิ่งใหญ่มาก มาช้าลงและเข้าใจสิ่งที่เกิดขึ้นอย่างแท้จริง
1.1 — เป้าหมายของเรา
นักวิทยาศาสตร์ข้อมูลไม่ว่าง เราต้องการผลิตโมเดลที่ดีจริง ๆ แต่ทำในลักษณะที่มีประสิทธิภาพและเหมาะสมที่สุด
อย่างไรก็ตาม ขั้นตอนบางอย่างในวงจรการสร้างแบบจำลอง ML นั้นยากที่จะทำให้เป็นอัตโนมัติ ตัวอย่างเช่น การวิเคราะห์ข้อมูลเชิงสำรวจ (EDA) และวิศวกรรมเชิงคุณลักษณะ มักเป็นเรื่องเฉพาะและต้องใช้สัญชาตญาณของมนุษย์ ในทางกลับกัน การปรับโมเดลเป็นกระบวนการวนซ้ำที่คอมพิวเตอร์สามารถเก่งได้
เป้าหมายของเราในโพสต์นี้คือการทำความเข้าใจวิธีใช้ประโยชน์จากอัลกอริทึมเพื่อทำให้กระบวนการปรับแต่งโมเดลเป็นไปโดยอัตโนมัติ
เพื่อช่วยให้เรานึกถึงเป้าหมายนั้น ลองใช้การเปรียบเทียบ: เราเป็นโจรสลัดที่กำลังมองหาสมบัติที่ถูกฝังไว้ โปรดทราบว่าเราเป็นโจรสลัดที่มีประสิทธิภาพมากซึ่งต้องการลดเวลาในการค้นหาสมบัติที่ถูกฝังไว้ แล้วเราจะลดเวลาในการค้นหาได้อย่างไร? คำตอบคือ ใช้แผนที่!
รูปที่ 1 เรามีแผนที่สมมติที่แสดงตำแหน่งของสมบัติของเรา หลังจากปีนป่ายและขุดมากมาย คงไม่ยากเกินไปที่จะไปถึงขุมทรัพย์นั้น เพราะเรารู้ว่ามันอยู่ที่ไหน
แต่จะเกิดอะไรขึ้นเมื่อเราไม่มีแผนที่?
เมื่อได้รับมอบหมายให้ปรับแต่งโมเดล น่าเสียดายที่เราไม่ได้รับแผนที่ ไม่ทราบภูมิประเทศของเรา ซึ่งสอดคล้องกับพื้นที่การค้นหาไฮเปอร์พาร์มิเตอร์ นอกจากนี้ยังไม่ทราบตำแหน่งของสมบัติของเราซึ่งสอดคล้องกับชุดพารามิเตอร์ที่เหมาะสมที่สุด
ด้วยการตั้งค่านั้น เรามาพูดถึงวิธีที่เป็นไปได้ในการสำรวจพื้นที่นี้อย่างมีประสิทธิภาพและค้นหาขุมทรัพย์!
1.2 — โซลูชันที่เป็นไปได้
วิธีการดั้งเดิมสำหรับการปรับโมเดลคือ "แบบแมนนวล" — วิศวกรจะทดสอบการกำหนดค่าต่างๆ ด้วยตนเองจริง ๆ และดูว่าไฮเปอร์พารามิเตอร์ชุดใดที่รวมกันสร้างโมเดลที่ดีที่สุด แม้ว่าจะให้ข้อมูล แต่กระบวนการนี้ไม่มีประสิทธิภาพ จะต้องมีวิธีที่ดีกว่า…
1.2.1 — การค้นหาแบบกริด (แย่ที่สุด)
อัลกอริทึมการปรับให้เหมาะสมอันดับแรกของเราคือการค้นหากริด การค้นหากริดซ้ำจะทดสอบชุดค่าผสมที่เป็นไปได้ทั้งหมดของไฮเปอร์พารามิเตอร์ภายในกริดที่ผู้ใช้ระบุ
ตัวอย่างเช่น ในรูปที่ 2 ทุกที่ที่คุณเห็นจุดสีแดงคือจุดที่เราจะฝึกใหม่และประเมินแบบจำลองของเรา กรอบนี้ไม่มีประสิทธิภาพเพราะมัน ใช้ไฮเปอร์พารามิเตอร์ที่ไม่ดีซ้ำ. ตัวอย่างเช่น หากไฮเปอร์พารามิเตอร์ 2 มีผลกระทบเพียงเล็กน้อยต่อฟังก์ชันวัตถุประสงค์ของเรา เราจะยังคงทดสอบการรวมค่าทั้งหมดเข้าด้วยกัน ซึ่งจะเป็นการเพิ่มจำนวนการวนซ้ำที่ต้องการอีก 10 เท่า (ในตัวอย่างนี้)
แต่ก่อนที่จะดำเนินการต่อ สิ่งสำคัญคือต้องทราบว่าการค้นหาแบบกริดยังคงเป็นที่นิยมอยู่พอสมควร เนื่องจากรับประกันได้ว่าจะพบจุดที่เหมาะสมที่สุดเมื่อพิจารณาจากกริดที่ระบุอย่างถูกต้อง หากคุณตัดสินใจที่จะใช้วิธีนี้ ตรวจสอบให้แน่ใจว่าคุณแปลงกริดของคุณเพื่อสะท้อนถึงรูปแบบการทำงานของไฮเปอร์พารามิเตอร์ของคุณ ตัวอย่างเช่น max_ความลึกสำหรับ ลักษณนามป่าสุ่ม เป็นจำนวนเต็ม อย่าปล่อยให้ค้นหาในช่องว่างต่อเนื่อง นอกจากนี้ยังไม่น่าเป็นไปได้ที่จะมีการแจกแจงแบบสม่ำเสมอ หากคุณทราบรูปแบบการทำงานของไฮเปอร์พารามิเตอร์ของคุณ ให้แปลงกริดให้สะท้อนกลับ
สรุป, การค้นหากริดอยู่ภายใต้คำสาปของมิติข้อมูลและคำนวณข้อมูลใหม่ระหว่างการประเมิน แต่ยังคงใช้กันอย่างแพร่หลาย
1.2.2 — การค้นหาแบบสุ่ม (ดี)
อัลกอริทึมที่สองของเราคือการค้นหาแบบสุ่ม การค้นหาแบบสุ่มจะพยายามสุ่มค่าภายในกริดที่ผู้ใช้ระบุ ไม่เหมือนกับการค้นหากริด เราไม่ได้บังคับให้ทดสอบชุดค่าผสมไฮเปอร์พารามิเตอร์ที่เป็นไปได้ทั้งหมด ซึ่งจะช่วยเพิ่มประสิทธิภาพ
ข้อเท็จจริงที่น่าสนใจ: การค้นหาแบบสุ่มจะพบ (โดยเฉลี่ย) การกำหนดค่าไฮเปอร์พารามิเตอร์ 5% สูงสุดภายใน 60 ซ้ำ. ที่กล่าวว่า เช่นเดียวกับการค้นหากริด คุณต้องแปลงพื้นที่การค้นหาของคุณให้สะท้อนถึงรูปแบบการทำงานของไฮเปอร์พารามแต่ละตัว
การค้นหาแบบสุ่มเป็นพื้นฐานที่ดีสำหรับการเพิ่มประสิทธิภาพไฮเปอร์พารามิเตอร์
1.2.3 — การเพิ่มประสิทธิภาพแบบเบย์ (ดีกว่า)
ตัวเลือกที่สามของเราคืออัลกอริทึม Sequential Model-Based Optimization (SMBO) แรกของเรา ความแตกต่างทางแนวคิดที่สำคัญจากเทคนิคก่อนหน้านี้คือเรา ใช้การวิ่งก่อนหน้าซ้ำๆ เพื่อกำหนดจุดสำรวจในอนาคต
การปรับไฮเปอร์พารามิเตอร์แบบเบส์ให้เหมาะสมนั้นมีลักษณะเพื่อพัฒนาการกระจายความน่าจะเป็นของพื้นที่การค้นหาไฮเปอร์พารามิเตอร์ของเรา จากนั้นจะใช้ฟังก์ชันการได้มา เช่น การปรับปรุงที่คาดไว้ เพื่อแปลงไฮเปอร์สเปซของเราให้ "ค้นหาได้" มากขึ้น สุดท้าย จะใช้อัลกอริทึมการปรับให้เหมาะสม เช่น การไล่ระดับสีแบบสุ่ม เพื่อค้นหาไฮเปอร์พารามิเตอร์ที่เพิ่มฟังก์ชันการรับข้อมูลของเราให้สูงสุด ไฮเปอร์พารามิเตอร์เหล่านั้นถูกใช้เพื่อให้พอดีกับโมเดลของเรา และกระบวนการนี้จะถูกทำซ้ำจนกว่าจะบรรจบกัน
การปรับให้เหมาะสมแบบ Bayesian มักจะมีประสิทธิภาพดีกว่าการค้นหาแบบสุ่ม อย่างไรก็ตาม มันมีข้อจำกัดหลักบางประการ เช่น ต้องใช้ไฮเปอร์พารามิเตอร์ที่เป็นตัวเลข
1.2.4 — ตัวประมาณ Parzen แบบต้นไม้ (ดีที่สุด)
สุดท้าย เรามาพูดถึงดาวเด่นของรายการกัน: Tree-Based Parzen Estimators (TPE) TPE เป็นอีกหนึ่งอัลกอริธึม SMBO ที่โดยทั่วไปแล้วมีประสิทธิภาพดีกว่าการเพิ่มประสิทธิภาพแบบ Bayesian พื้นฐาน แต่จุดขายหลักคือการจัดการความสัมพันธ์ของไฮเปอร์พารามิเตอร์ที่ซับซ้อนผ่านโครงสร้างแบบต้นไม้
ลองใช้รูปที่ 5 เพื่อทำความเข้าใจสิ่งนี้ โครงสร้างต้นไม้. ที่นี่ เรากำลังฝึกตัวแยกประเภท Support Vector Machine (SVM) เราจะทดสอบสองเมล็ด: linear
และ RBF
. linear
เคอร์เนลไม่ได้ใช้พารามิเตอร์ความกว้าง แต่ RBF
ดังนั้นโดยใช้พจนานุกรมที่ซ้อนกัน เราจึงสามารถเข้ารหัสโครงสร้างนี้และด้วยเหตุนี้จึงจำกัดพื้นที่การค้นหา
TPE ยังรองรับตัวแปรหมวดหมู่ซึ่งการปรับให้เหมาะสมแบบ Bayesian แบบเดิมไม่รองรับ
ข้อจำกัดความรับผิดชอบด่วนก่อนที่จะดำเนินการต่อมี แพ็คเกจการปรับแต่งไฮเปอร์พารามิเตอร์อื่น ๆ อีกมากมาย. แต่ละตัวรองรับอัลกอริทึมที่หลากหลาย ซึ่งบางอัลกอริทึมประกอบด้วยฟอเรสต์แบบสุ่ม กระบวนการแบบเกาส์เซียน และอัลกอริทึมเชิงพันธุกรรม TPE เป็นอัลกอริทึมที่ได้รับความนิยมและมีวัตถุประสงค์ทั่วไป แต่ไม่จำเป็นต้องดีที่สุด
โดยทั่วไปแล้ว TPE เป็นโซลูชันการปรับแต่งพารามิเตอร์ไฮเปอร์พารามิเตอร์ที่แข็งแกร่งและมีประสิทธิภาพ
ตอนนี้เรามีความเข้าใจโดยทั่วไปเกี่ยวกับอัลกอริธึมการปรับให้เหมาะสมของไฮเปอร์พารามิเตอร์ที่ได้รับความนิยมแล้ว เรามาเจาะลึกถึงวิธีการทำงานของ TPE กัน
กลับมาที่การเปรียบเทียบของเรา เราเป็นโจรสลัดที่กำลังมองหาสมบัติที่ถูกฝังไว้ แต่ไม่มีแผนที่. กัปตันของเราต้องการสมบัติโดยด่วน ดังนั้นเราจึงจำเป็นต้องขุดในจุดยุทธศาสตร์ที่มีความเป็นไปได้สูงที่จะมีสมบัติ โดยใช้การขุดก่อนหน้านี้เพื่อกำหนดตำแหน่งของการขุดในอนาคต
2.1 — การเริ่มต้น
ในการเริ่มต้นเรา กำหนดข้อจำกัดในพื้นที่ของเรา. ตามที่ระบุไว้ข้างต้น ไฮเปอร์พารามิเตอร์ของเรามักมีรูปแบบการทำงาน ค่าสูงสุด/ต่ำสุด และความสัมพันธ์แบบลำดับชั้นกับไฮเปอร์พารามิเตอร์อื่นๆ การใช้ความรู้ของเราเกี่ยวกับอัลกอริทึม ML และข้อมูลของเรา เราสามารถกำหนดพื้นที่การค้นหาของเราได้
ต่อไปเราจะต้อง กำหนดหน้าที่วัตถุประสงค์ของเราซึ่งใช้เพื่อประเมินว่าชุดค่าผสมไฮเปอร์พารามิเตอร์ของเรา "ดี" เพียงใด ตัวอย่างบางส่วนรวมถึงฟังก์ชันการสูญเสีย ML แบบคลาสสิก เช่น RMSE หรือ AUC
ยอดเยี่ยม! ตอนนี้เรามีพื้นที่การค้นหาที่จำกัดและมีวิธีวัดความสำเร็จแล้ว เราก็พร้อมที่จะเริ่มค้นหา...
2.2 — การเพิ่มประสิทธิภาพแบบเบย์ซ้ำๆ
การปรับให้เหมาะสมแบบเบย์เป็นอัลกอริทึมตามลำดับที่ค้นหาจุดในไฮเปอร์สเปซที่มีความเป็นไปได้สูงที่จะ "สำเร็จ" ตามฟังก์ชันวัตถุประสงค์ TPE ใช้ประโยชน์จากการเพิ่มประสิทธิภาพแบบ Bayesian แต่ใช้กลอุบายอันชาญฉลาดเพื่อปรับปรุงประสิทธิภาพและจัดการกับความซับซ้อนของพื้นที่การค้นหา...
2.2.0 — การตั้งค่าแนวคิด
เคล็ดลับแรกคือการสร้างแบบจำลอง พี(x|y) แทน พี(ย|x)…
โดยทั่วไปแล้วการปรับให้เหมาะสมแบบ Bayes จะมีลักษณะเป็นแบบจำลอง พี(y|x), ซึ่งเป็นความน่าจะเป็นของค่าฟังก์ชันวัตถุประสงค์ (y) กำหนดไฮเปอร์พารามิเตอร์ (x). TPE ทำในสิ่งที่ตรงกันข้าม - ดูเหมือนจะเป็นแบบจำลอง พี(x|y), ซึ่งเป็นความน่าจะเป็นของไฮเปอร์พารามิเตอร์ (x), กำหนดค่าฟังก์ชันวัตถุประสงค์ (y).
กล่าวโดยสรุปคือ TPE พยายามค้นหาค่าฟังก์ชันวัตถุประสงค์ที่ดีที่สุด จากนั้นกำหนดไฮเปอร์พารามิเตอร์ที่เกี่ยวข้อง
ด้วยการตั้งค่าที่สำคัญมาก เรามาเข้าสู่อัลกอริทึมที่แท้จริงกัน
2.2.1 — แยกข้อมูลของเราออกเป็นกลุ่ม "ดี" และ "ไม่ดี"
โปรดจำไว้ว่า เป้าหมายของเราคือการค้นหาค่าไฮเปอร์พารามิเตอร์ที่ดีที่สุดตามฟังก์ชันวัตถุประสงค์บางอย่าง แล้วเราจะใช้ประโยชน์ได้อย่างไร พี(x|y) ที่จะทำอย่างนั้น?
ประการแรก TPE แบ่งจุดข้อมูลที่สังเกตออกเป็นสองกลุ่ม: ดี, หมายถึง กรัม(x), และ ไม่ดี, หมายถึง ล.(x). จุดตัดระหว่างความดีและไม่ดีถูกกำหนดโดยแกมมาพารามิเตอร์ที่ผู้ใช้กำหนด (γ) ซึ่งสอดคล้องกับเปอร์เซ็นต์ไทล์ของฟังก์ชันวัตถุประสงค์ที่แยกการสังเกตของเรา (y*).
ดังนั้น ด้วย γ = 0.5 ค่าฟังก์ชันวัตถุประสงค์ของเราที่แบ่งการสังเกตของเรา (y*) จะเป็นค่ามัธยฐานของจุดสังเกตของเรา
ดังแสดงในรูปที่ 7 เราสามารถทำให้เป็นทางการได้ พี(x|y) โดยใช้กรอบข้างต้น และเพื่อเปรียบเทียบกับการเปรียบเทียบโจรสลัด ...
มุมมองของโจรสลัด: เมื่อพิจารณาจากสถานที่ที่เราสำรวจมาแล้ว l(x) จะแสดงสถานที่ที่มีสมบัติน้อยมาก และ g(x) จะแสดงสถานที่ที่มีสมบัติมากมาย
2.2.32— คำนวณคะแนน “ความมุ่งหวัง”
ประการที่สอง TPE กำหนดวิธีที่เราควรประเมินชุดค่าผสมไฮเปอร์พารามิเตอร์ที่ไม่ถูกสังเกตผ่านทาง คะแนน "ความน่าอยู่".
รูปที่ 8 กำหนดคะแนนแนวโน้มของเรา (P) ซึ่งเป็นอัตราส่วนที่มีส่วนประกอบดังนี้…
- เศษ: ความน่าจะเป็นของการสังเกตชุดของไฮเปอร์พารามิเตอร์ (x) ให้ค่าฟังก์ชันวัตถุประสงค์ที่สอดคล้องกันคือ “ดี".
- ตัวส่วน: ความน่าจะเป็นของการสังเกตชุดของไฮเปอร์พารามิเตอร์ (x) ให้ค่าฟังก์ชันวัตถุประสงค์ที่สอดคล้องกันคือ “ไม่ดี".
ยิ่งค่า "แนวโน้ม" สูงเท่าใด ไฮเปอร์พารามิเตอร์ของเราก็จะมีโอกาสมากขึ้นเท่านั้น x จะสร้างหน้าที่วัตถุประสงค์ที่ "ดี"
มุมมองของโจรสลัด: ความหวังแสดงให้เห็นว่าสถานที่ที่กำหนดในภูมิประเทศของเรามีโอกาสมากน้อยเพียงใดที่จะมีสมบัติมากมาย
กันไว้ก่อนดีกว่า ถ้าคุณคุ้นเคยกับการเพิ่มประสิทธิภาพแบบเบย์ สมการนี้ทำหน้าที่เป็นฟังก์ชันการได้มาและเป็นสัดส่วนกับ การปรับปรุงที่คาดหวัง (EI).
2.2.3— สร้างค่าประมาณความหนาแน่นของความน่าจะเป็น
ประการที่สาม TPE ประเมินคะแนน "ความมีแนวโน้ม" ผ่านทาง รุ่นผสม. แนวคิดของโมเดลผสมคือการแจกแจงความน่าจะเป็นหลายๆ แบบและนำมารวมกันโดยใช้ชุดค่าผสมเชิงเส้น — สิ่งอำนวยความสะดวก. การแจกแจงความน่าจะเป็นแบบรวมเหล่านี้จะใช้ในการพัฒนาค่าประมาณความหนาแน่นของความน่าจะเป็น
โดยทั่วไป กระบวนการสร้างแบบจำลองส่วนผสมคือ...
- กำหนดประเภทการกระจายคะแนนของเรา ในกรณีของเรา ถ้าตัวแปรของเราเป็นแบบหมวดหมู่ เราจะใช้การแจกแจงแบบแบ่งหมวดหมู่แบบถ่วงน้ำหนักใหม่ และถ้าเป็นตัวเลข เราจะใช้การแจกแจงแบบเกาส์เซียน (เช่น แบบปกติ) หรือการแจกแจงแบบสม่ำเสมอ
- ทำซ้ำในแต่ละจุดและแทรกการแจกแจงที่จุดนั้น
- รวมมวลของการแจกแจงทั้งหมดเพื่อรับค่าประมาณความหนาแน่นของความน่าจะเป็น
โปรดทราบว่ากระบวนการนี้ดำเนินการแยกกันสำหรับทั้งสองชุด ล.(x) และ กรัม(x).
มาดูตัวอย่างในรูปที่ 9…
สำหรับการสังเกตแต่ละครั้ง (จุดสีน้ำเงินบนแกน x) เราสร้างการแจกแจงแบบปกติ ~N(μ, σ) โดยที่...
- μ (มิว) คือค่าเฉลี่ยของการแจกแจงแบบปกติของเรา ค่าของมันคือตำแหน่งของจุดตามแกน x
- σ (ซิกมา) คือค่าเบี่ยงเบนมาตรฐานของการแจกแจงแบบปกติ ค่าของมันคือระยะทางไปยังจุดที่ใกล้เคียงที่สุด.
ถ้าจุดอยู่ใกล้กัน ค่าเบี่ยงเบนมาตรฐานจะน้อย ดังนั้นการกระจายจะสูงมาก ในทางกลับกัน ถ้าจุดห่างกัน การกระจายจะแบน (รูปที่ 10)...
Pirate Perspective: NA — โจรสลัดไม่เหมาะกับโมเดลผสม
อีกข้อหนึ่งก่อนที่จะไปต่อ: หากคุณกำลังอ่านหนังสือ คุณจะสังเกตเห็นว่า TPE ใช้เกาส์เซียนแบบ "ตัดทอน" ซึ่งหมายความว่าเกาส์เซียนนั้นถูกล้อมรอบด้วยช่วงที่เราระบุในการกำหนดค่าไฮเปอร์พารามิเตอร์แทนที่จะขยายเป็น +/- อินฟินิตี้ .
2.2.4 — กำหนดจุดต่อไปเพื่อสำรวจ!
ลองนำชิ้นส่วนเหล่านี้มารวมกัน จนถึงตอนนี้ เราได้ 1) ได้รับข้อสังเกตเกี่ยวกับฟังก์ชันวัตถุประสงค์ 2) กำหนดสูตร "ความน่าจะเป็น" ของเรา และ 3) สร้างค่าประมาณความหนาแน่นของความน่าจะเป็นผ่านแบบจำลองส่วนผสมตามค่าก่อนหน้า เรามีชิ้นส่วนทั้งหมดเพื่อประเมินจุดที่กำหนด!
ขั้นตอนแรกของเราคือสร้างฟังก์ชันความหนาแน่นของความน่าจะเป็นเฉลี่ย (PDF) สำหรับทั้งสองอย่าง กรัม(x) และ ล.(x).
กระบวนการตัวอย่างแสดงในรูปที่ 11 — เส้นสีแดงคือ PDF เฉลี่ยของเรา และเป็นเพียงผลรวมของ PDF ทั้งหมดหารด้วยจำนวน PDF
เมื่อใช้ PDF เฉลี่ย เราจะได้ค่าความน่าจะเป็นของค่าไฮเปอร์พารามิเตอร์ใดๆ (x) อยู่ใน กรัม(x) or ล.(x).
ตัวอย่างเช่น สมมติว่าค่าที่สังเกตได้ในรูปที่ 11 อยู่ในชุด "ดี" กรัม(x). เมื่อพิจารณาจาก PDF เฉลี่ยของเรา ไม่น่าเป็นไปได้ที่ค่าไฮเปอร์พารามิเตอร์ 3.9 หรือ 0.05 จะอยู่ในชุด "ดี" ในทางกลับกัน ค่าไฮเปอร์พารามิเตอร์ที่ ~1.2 น่าจะเป็นของชุด "ดี"
ตอนนี้เป็นเพียงครึ่งหนึ่งของภาพ เราใช้วิธีการเดียวกันสำหรับชุด "ไม่ดี" ล.(x). เนื่องจากเรากำลังมองหาเพื่อเพิ่ม ก(x) / ล(x), จุดที่มีแนวโน้มควรอยู่ที่ใด กรัม(x) สูงและ ล.(x) อยู่ในระดับต่ำ.
ค่อนข้างเท่ห์ใช่มั้ย
ด้วยการแจกแจงความน่าจะเป็นเหล่านี้ เราสามารถสุ่มตัวอย่างจากไฮเปอร์พารามิเตอร์ที่มีโครงสร้างแบบต้นไม้ของเรา และค้นหาชุดของไฮเปอร์พารามิเตอร์ที่เพิ่ม "โอกาส" สูงสุด และด้วยเหตุนี้จึงควรค่าแก่การสำรวจ
มุมมองของโจรสลัด: ตำแหน่งต่อไปที่เราขุดคือตำแหน่งที่เพิ่ม (ความน่าจะเป็นที่จะมีสมบัติจำนวนมาก) / (ความน่าจะเป็นที่จะมีสมบัติน้อย)
ตอนนี้คุณรู้วิธีการทำงานแล้ว ต่อไปนี้เป็นเคล็ดลับที่เป็นประโยชน์สำหรับการนำ TPE ไปใช้ผ่านแพ็คเกจโอเพ่นซอร์ส HyperOpt
3.1 — โครงสร้างของแอป HyperOpt
โดยทั่วไป มีสามขั้นตอนหลักในการใช้ประโยชน์จาก HyperOpt...
- กำหนดพื้นที่ค้นหา ซึ่งเป็นเพียงช่วงและรูปแบบการทำงานของไฮเปอร์พารามิเตอร์ที่คุณต้องการเพิ่มประสิทธิภาพ
- กำหนดฟังก์ชั่นที่เหมาะสม ซึ่งโทรหาคุณ
model.fit()
ฟังก์ชั่นแยกรถไฟ / การทดสอบที่กำหนด - กำหนดฟังก์ชั่นวัตถุประสงค์ ซึ่งเป็นเมตริกความแม่นยำแบบคลาสสิก เช่น RMSE หรือ AUC
น่าเสียดายที่วิธีการปรับแต่งอัตโนมัติเหล่านี้ยังคงต้องการข้อมูลการออกแบบจากนักวิทยาศาสตร์ข้อมูล — มันไม่ใช่อาหารกลางวันฟรีทั้งหมด อย่างไรก็ตาม โดยทั่วไปแล้ว TPE นั้นค่อนข้างแข็งแกร่งต่อการระบุพารามิเตอร์ที่ไม่ถูกต้องมากเกินไป (ด้วยเหตุผลบางประการ)
3.2— เคล็ดลับและคำแนะนำ
- HyperOpt สามารถใช้งานร่วมกันได้ผ่านทั้งสองอย่าง Apache Spark และ MongoDB. หากคุณกำลังทำงานกับหลายคอร์ ไม่ว่าจะเป็นในระบบคลาวด์หรือบนเครื่องท้องถิ่นของคุณ สิ่งนี้สามารถลดรันไทม์ได้อย่างมาก
- หากคุณกำลังขนานกระบวนการปรับแต่งผ่าน Apache Spark ให้ใช้
SparkTrials
วัตถุสำหรับรุ่น ML โหนดเดียว (sklearn) และTrails
วัตถุสำหรับโมเดล ML แบบขนาน (MLlib) รหัสอยู่ด้านล่าง - ม.ล.โฟลว์ เป็นวิธีโอเพ่นซอร์สสำหรับการติดตามการทำงานของโมเดลของคุณ ทำงานร่วมกับ HyperOpt ได้อย่างง่ายดาย
- อย่าจำกัดพื้นที่การค้นหาให้แคบลงเร็วเกินไป การผสมผสานของพารามิเตอร์หลายมิติอาจมีประสิทธิภาพอย่างน่าประหลาดใจ
- การกำหนดพื้นที่ค้นหาอาจเป็นเรื่องยุ่งยาก โดยเฉพาะอย่างยิ่งหากคุณไม่ทราบ รูปแบบการทำงานของไฮเปอร์พารามิเตอร์ของคุณ. อย่างไรก็ตาม จากประสบการณ์ส่วนตัว TPE ค่อนข้างแข็งแกร่งต่อการระบุรูปแบบการทำงานเหล่านั้นที่ไม่ถูกต้อง
- การเลือกฟังก์ชั่นวัตถุประสงค์ที่ดีนั้นมีประโยชน์อย่างมาก ในกรณีส่วนใหญ่ ข้อผิดพลาดจะไม่เท่ากัน หากข้อผิดพลาดบางประเภทเป็นปัญหามากกว่า ตรวจสอบให้แน่ใจว่าได้สร้างตรรกะนั้นในฟังก์ชันของคุณ
3.3— ตัวอย่างโค้ด
นี่คือรหัสบางส่วนสำหรับการเรียกใช้ HyperOpt ในลักษณะกระจาย มันถูกดัดแปลงมาจากรหัสในหนังสือ วิศวกรรมการเรียนรู้ของเครื่องในการดำเนินการ - นี่คือ repo คอมไพล์.
คุณสมบัติที่ดีของตัวอย่างนี้รวมถึงการขนานกันผ่าน Apache Spark และบันทึกโมเดลผ่าน ม.ล.โฟลว์. โปรดทราบด้วยว่าส่วนย่อยนี้ปรับ sklearn RandomForestRegressor ให้เหมาะสม - คุณจะต้องเปลี่ยนโมเดลและฟังก์ชันที่เหมาะสมเพื่อให้เหมาะกับความต้องการของคุณ
และคุณก็จะได้มันแล้ว — HyperOpt สุดยอดไปเลย!
เพื่อตอกย้ำประเด็นสำคัญให้สรุปอย่างรวดเร็ว
การปรับไฮเปอร์พารามิเตอร์เป็นส่วนที่จำเป็นของวงจรชีวิตของโมเดล ML แต่ใช้เวลานาน อัลกอริธึม Sequential Model-Based Optimization (SMBO) นั้นเก่งในการค้นหาไฮเปอร์สเปซที่ซับซ้อนเพื่อหาค่าที่เหมาะสม และสามารถนำไปใช้กับการปรับไฮเปอร์พารามิเตอร์ได้ Tree-based Parzen Estimators (TPE) เป็น SMBO ที่มีประสิทธิภาพมาก และมีประสิทธิภาพดีกว่าทั้ง Bayesian Optimization และ Random Search
TPE ทำซ้ำขั้นตอนด้านล่างจนกว่าจะถึงเกณฑ์การหยุด:
- แบ่งจุดที่สังเกตออกเป็นชุด "ดี" และ "ไม่ดี" ตามพารามิเตอร์หลายมิติ เช่น แกมมา
- ปรับโมเดลผสมให้เหมาะกับทั้งชุด "ดี" และ "ไม่ดี" เพื่อพัฒนาค่าประมาณความหนาแน่นของความน่าจะเป็นโดยเฉลี่ย
- เลือกจุดที่ปรับคะแนน "แนวโน้ม" ให้เหมาะสม ซึ่งใช้ประโยชน์จากขั้นตอนที่ 2 เพื่อประเมินความน่าจะเป็นที่จะอยู่ในชุด "ดี" และ "ไม่ดี"
สุดท้าย เรามีข้อมูลโค้ดเจ๋งๆ ที่แสดงวิธีการขนาน HyperOpt ผ่าน SparkTrials นอกจากนี้ยังบันทึกการวนซ้ำทั้งหมดของเราไปยัง MLflow
HyperOpt Demystified เผยแพร่ซ้ำจากแหล่งที่มา https://towardsdatascience.com/hyperopt-demystified-3e14006eb6fa?source=rss—-7f60cf5620c9—4 ผ่าน https://towardsdatascience.com/feed
<!–
->
- Bitcoin
- bizbuildermike
- blockchain
- การปฏิบัติตามบล็อคเชน
- การประชุม blockchain
- ที่ปรึกษาบล็อคเชน
- coinbase
- เหรียญอัจฉริยะ
- เอกฉันท์
- การประชุม crypto
- การทำเหมือง crypto
- cryptocurrency
- ซึ่งกระจายอำนาจ
- Defi
- สินทรัพย์ดิจิทัล
- ethereum
- เรียนรู้เครื่อง
- โทเค็นที่ไม่สามารถทำซ้ำได้
- เพลโต
- เพลโตไอ
- เพลโตดาต้าอินเทลลิเจนซ์
- Platoblockchain
- เพลโตดาต้า
- เพลโตเกม
- รูปหลายเหลี่ยม
- หลักฐานการเดิมพัน
- W3
- ลมทะเล