HyperOpt ไม่ชัดเจน

วิธีปรับโมเดลอัตโนมัติด้วย HyperOpt

คุณชอบการปรับแต่งโมเดลหรือไม่? ถ้าคำตอบของคุณคือ “ใช่” โพสต์นี้คือ ไม่ สำหรับคุณ

ไฮเปอร์พารามิเตอร์ ไฮเปอร์พารามิเตอร์ การปรับโมเดล การปรับแต่งแมชชีนเลิร์นนิง วิทยาศาสตร์ข้อมูล sklearn โมเดล mllib spark hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
การ์ตูนจากคุณปู่ของฉัน — เว็บไซต์.

ในบล็อกนี้ เราจะพูดถึงอัลกอริธึมการปรับไฮเปอร์พารามิเตอร์อัตโนมัติที่ได้รับความนิยมอย่างมากที่เรียกว่า ตัวประมาณ Parzen แบบต้นไม้ (ม.ป.ป). TPE รองรับโดยแพ็คเกจโอเพ่นซอร์ส HyperOpt ด้วยการใช้ประโยชน์จาก HyperOpt และ TPE วิศวกรแมชชีนเลิร์นนิงสามารถทำได้ พัฒนาโมเดลที่เพิ่มประสิทธิภาพสูงสุดอย่างรวดเร็วโดยไม่ต้องทำการปรับแต่งด้วยตนเอง.

มาดำน้ำกันเถอะ!

HyperOpt เป็นแพ็คเกจ python แบบโอเพ่นซอร์สที่ใช้อัลกอริทึมที่เรียกว่า Tree-based Parzen Esimtors (TPE) เพื่อเลือกไฮเปอร์พารามิเตอร์ของโมเดลซึ่งปรับฟังก์ชันวัตถุประสงค์ที่ผู้ใช้กำหนดให้เหมาะสมที่สุด เพียงแค่กำหนดรูปแบบการทำงานและขอบเขตของไฮเปอร์พารามิเตอร์แต่ละตัว TPE จะค้นหาอย่างถี่ถ้วนแต่มีประสิทธิภาพผ่านไฮเปอร์สเปซที่ซับซ้อนเพื่อเข้าถึงค่าที่เหมาะสมที่สุด

TPE เป็นอัลกอริทึมแบบลำดับที่ใช้ประโยชน์จากการอัปเดตแบบเบย์และทำตามลำดับด้านล่าง

  1. ฝึกโมเดลด้วยไฮเปอร์พารามิเตอร์หลายชุดที่สุ่มเลือก ส่งคืนค่าฟังก์ชันวัตถุประสงค์
  2. แบ่งค่าฟังก์ชันวัตถุประสงค์ที่สังเกตได้ของเราออกเป็นกลุ่ม "ดี" และ "ไม่ดี" ตามเกณฑ์แกมมา (γ)
  3. คำนวณคะแนน "แนวโน้ม" ซึ่งเป็นเพียง P(x|ดี) / P(x|ไม่ดี).
  4. กำหนดไฮเปอร์พารามิเตอร์ที่เพิ่มศักยภาพสูงสุดผ่านโมเดลผสม
  5. พอดีกับโมเดลของเราโดยใช้ไฮเปอร์พารามิเตอร์จากขั้นตอนที่ 4
  6. ทำซ้ำขั้นตอนที่ 2-5 จนกว่าจะถึงเกณฑ์การหยุด

ที่นี่ว่า ตัวอย่างโค้ดด่วน.

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

1.1 — เป้าหมายของเรา

นักวิทยาศาสตร์ข้อมูลไม่ว่าง เราต้องการผลิตโมเดลที่ดีจริง ๆ แต่ทำในลักษณะที่มีประสิทธิภาพและเหมาะสมที่สุด

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

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

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

ไฮเปอร์พารามิเตอร์ ไฮเปอร์พารามิเตอร์ การปรับโมเดล การปรับแต่งแมชชีนเลิร์นนิง วิทยาศาสตร์ข้อมูล sklearn โมเดล mllib spark hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
รูป 1: ตัวอย่างพื้นที่ค้นหาไฮเปอร์พารามิเตอร์ 3 มิติ ตำแหน่งของหีบสมบัตินั้นเหมาะสมที่สุดทั่วโลก ภาพโดยผู้เขียน

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

แต่จะเกิดอะไรขึ้นเมื่อเราไม่มีแผนที่?

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

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

1.2 — โซลูชันที่เป็นไปได้

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

1.2.1 — การค้นหาแบบกริด (แย่ที่สุด)

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

ไฮเปอร์พารามิเตอร์ ไฮเปอร์พารามิเตอร์ การปรับโมเดล การปรับแต่งแมชชีนเลิร์นนิง วิทยาศาสตร์ข้อมูล sklearn โมเดล mllib spark hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
รูปที่ 2: ตัวอย่างเค้าโครงการค้นหาแบบกริด ภาพโดยผู้เขียน

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

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

สรุป, การค้นหากริดอยู่ภายใต้คำสาปของมิติข้อมูลและคำนวณข้อมูลใหม่ระหว่างการประเมิน แต่ยังคงใช้กันอย่างแพร่หลาย

1.2.2 — การค้นหาแบบสุ่ม (ดี)

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

ไฮเปอร์พารามิเตอร์ ไฮเปอร์พารามิเตอร์ การปรับโมเดล การปรับแต่งแมชชีนเลิร์นนิง วิทยาศาสตร์ข้อมูล sklearn โมเดล mllib spark hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
รูปที่ 3: ตัวอย่างการค้นหาแบบสุ่ม ภาพโดยผู้เขียน

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

การค้นหาแบบสุ่มเป็นพื้นฐานที่ดีสำหรับการเพิ่มประสิทธิภาพไฮเปอร์พารามิเตอร์

1.2.3 — การเพิ่มประสิทธิภาพแบบเบย์ (ดีกว่า)

ตัวเลือกที่สามของเราคืออัลกอริทึม Sequential Model-Based Optimization (SMBO) แรกของเรา ความแตกต่างทางแนวคิดที่สำคัญจากเทคนิคก่อนหน้านี้คือเรา ใช้การวิ่งก่อนหน้าซ้ำๆ เพื่อกำหนดจุดสำรวจในอนาคต

ไฮเปอร์พารามิเตอร์ ไฮเปอร์พารามิเตอร์ การปรับโมเดล การปรับแต่งแมชชีนเลิร์นนิง วิทยาศาสตร์ข้อมูล sklearn โมเดล mllib spark hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
รูปที่ 4: ตัวอย่างการเพิ่มประสิทธิภาพแบบเบย์ — สิ่งอำนวยความสะดวก. ภาพโดยผู้เขียน

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

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

1.2.4 — ตัวประมาณ Parzen แบบต้นไม้ (ดีที่สุด)

สุดท้าย เรามาพูดถึงดาวเด่นของรายการกัน: Tree-Based Parzen Estimators (TPE) TPE เป็นอีกหนึ่งอัลกอริธึม SMBO ที่โดยทั่วไปแล้วมีประสิทธิภาพดีกว่าการเพิ่มประสิทธิภาพแบบ Bayesian พื้นฐาน แต่จุดขายหลักคือการจัดการความสัมพันธ์ของไฮเปอร์พารามิเตอร์ที่ซับซ้อนผ่านโครงสร้างแบบต้นไม้

ไฮเปอร์พารามิเตอร์ ไฮเปอร์พารามิเตอร์ การปรับโมเดล การปรับแต่งแมชชีนเลิร์นนิง วิทยาศาสตร์ข้อมูล sklearn โมเดล mllib spark hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
รูปที่ 5: ตัวอย่างโครงสร้างลำดับชั้นสำหรับ TPE — สิ่งอำนวยความสะดวก. ภาพโดยผู้เขียน

ลองใช้รูปที่ 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)…

ไฮเปอร์พารามิเตอร์ ไฮเปอร์พารามิเตอร์ การปรับโมเดล การปรับแต่งแมชชีนเลิร์นนิง วิทยาศาสตร์ข้อมูล sklearn โมเดล mllib spark hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
รูปที่ 6: ความน่าจะเป็นตามเงื่อนไขที่ TPE หาทางแก้ไข ภาพโดยผู้เขียน

โดยทั่วไปแล้วการปรับให้เหมาะสมแบบ Bayes จะมีลักษณะเป็นแบบจำลอง พี(y|x), ซึ่งเป็นความน่าจะเป็นของค่าฟังก์ชันวัตถุประสงค์ (y) กำหนดไฮเปอร์พารามิเตอร์ (x). TPE ทำในสิ่งที่ตรงกันข้าม - ดูเหมือนจะเป็นแบบจำลอง พี(x|y), ซึ่งเป็นความน่าจะเป็นของไฮเปอร์พารามิเตอร์ (x), กำหนดค่าฟังก์ชันวัตถุประสงค์ (y).

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

ด้วยการตั้งค่าที่สำคัญมาก เรามาเข้าสู่อัลกอริทึมที่แท้จริงกัน

2.2.1 — แยกข้อมูลของเราออกเป็นกลุ่ม "ดี" และ "ไม่ดี"

โปรดจำไว้ว่า เป้าหมายของเราคือการค้นหาค่าไฮเปอร์พารามิเตอร์ที่ดีที่สุดตามฟังก์ชันวัตถุประสงค์บางอย่าง แล้วเราจะใช้ประโยชน์ได้อย่างไร พี(x|y) ที่จะทำอย่างนั้น?

ประการแรก TPE แบ่งจุดข้อมูลที่สังเกตออกเป็นสองกลุ่ม: ดี, หมายถึง กรัม(x), และ ไม่ดี, หมายถึง ล.(x). จุดตัดระหว่างความดีและไม่ดีถูกกำหนดโดยแกมมาพารามิเตอร์ที่ผู้ใช้กำหนด (γ) ซึ่งสอดคล้องกับเปอร์เซ็นต์ไทล์ของฟังก์ชันวัตถุประสงค์ที่แยกการสังเกตของเรา (y*).

ดังนั้น ด้วย γ = 0.5 ค่าฟังก์ชันวัตถุประสงค์ของเราที่แบ่งการสังเกตของเรา (y*) จะเป็นค่ามัธยฐานของจุดสังเกตของเรา

ไฮเปอร์พารามิเตอร์ ไฮเปอร์พารามิเตอร์ การปรับโมเดล การปรับแต่งแมชชีนเลิร์นนิง วิทยาศาสตร์ข้อมูล sklearn โมเดล mllib spark hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
รูปที่ 7: การแบ่ง p(x|y) ออกเป็นสองชุด ภาพโดยผู้เขียน

ดังแสดงในรูปที่ 7 เราสามารถทำให้เป็นทางการได้ พี(x|y) โดยใช้กรอบข้างต้น และเพื่อเปรียบเทียบกับการเปรียบเทียบโจรสลัด ...

มุมมองของโจรสลัด: เมื่อพิจารณาจากสถานที่ที่เราสำรวจมาแล้ว l(x) จะแสดงสถานที่ที่มีสมบัติน้อยมาก และ g(x) จะแสดงสถานที่ที่มีสมบัติมากมาย

2.2.32— คำนวณคะแนน “ความมุ่งหวัง”

ประการที่สอง TPE กำหนดวิธีที่เราควรประเมินชุดค่าผสมไฮเปอร์พารามิเตอร์ที่ไม่ถูกสังเกตผ่านทาง คะแนน "ความน่าอยู่".

ไฮเปอร์พารามิเตอร์ ไฮเปอร์พารามิเตอร์ การปรับโมเดล การปรับแต่งแมชชีนเลิร์นนิง วิทยาศาสตร์ข้อมูล sklearn โมเดล mllib spark hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
รูปที่ 8: คำจำกัดความของคะแนนความมุ่งหวัง ภาพโดยผู้เขียน

รูปที่ 8 กำหนดคะแนนแนวโน้มของเรา (P) ซึ่งเป็นอัตราส่วนที่มีส่วนประกอบดังนี้…

  • เศษ: ความน่าจะเป็นของการสังเกตชุดของไฮเปอร์พารามิเตอร์ (x) ให้ค่าฟังก์ชันวัตถุประสงค์ที่สอดคล้องกันคือ “ดี".
  • ตัวส่วน: ความน่าจะเป็นของการสังเกตชุดของไฮเปอร์พารามิเตอร์ (x) ให้ค่าฟังก์ชันวัตถุประสงค์ที่สอดคล้องกันคือ “ไม่ดี".

ยิ่งค่า "แนวโน้ม" สูงเท่าใด ไฮเปอร์พารามิเตอร์ของเราก็จะมีโอกาสมากขึ้นเท่านั้น x จะสร้างหน้าที่วัตถุประสงค์ที่ "ดี"

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

กันไว้ก่อนดีกว่า ถ้าคุณคุ้นเคยกับการเพิ่มประสิทธิภาพแบบเบย์ สมการนี้ทำหน้าที่เป็นฟังก์ชันการได้มาและเป็นสัดส่วนกับ การปรับปรุงที่คาดหวัง (EI).

2.2.3— สร้างค่าประมาณความหนาแน่นของความน่าจะเป็น

ประการที่สาม TPE ประเมินคะแนน "ความมีแนวโน้ม" ผ่านทาง รุ่นผสม. แนวคิดของโมเดลผสมคือการแจกแจงความน่าจะเป็นหลายๆ แบบและนำมารวมกันโดยใช้ชุดค่าผสมเชิงเส้น — สิ่งอำนวยความสะดวก. การแจกแจงความน่าจะเป็นแบบรวมเหล่านี้จะใช้ในการพัฒนาค่าประมาณความหนาแน่นของความน่าจะเป็น

โดยทั่วไป กระบวนการสร้างแบบจำลองส่วนผสมคือ...

  1. กำหนดประเภทการกระจายคะแนนของเรา ในกรณีของเรา ถ้าตัวแปรของเราเป็นแบบหมวดหมู่ เราจะใช้การแจกแจงแบบแบ่งหมวดหมู่แบบถ่วงน้ำหนักใหม่ และถ้าเป็นตัวเลข เราจะใช้การแจกแจงแบบเกาส์เซียน (เช่น แบบปกติ) หรือการแจกแจงแบบสม่ำเสมอ
  2. ทำซ้ำในแต่ละจุดและแทรกการแจกแจงที่จุดนั้น
  3. รวมมวลของการแจกแจงทั้งหมดเพื่อรับค่าประมาณความหนาแน่นของความน่าจะเป็น

โปรดทราบว่ากระบวนการนี้ดำเนินการแยกกันสำหรับทั้งสองชุด ล.(x) และ กรัม(x).

มาดูตัวอย่างในรูปที่ 9…

ไฮเปอร์พารามิเตอร์ ไฮเปอร์พารามิเตอร์ การปรับโมเดล การปรับแต่งแมชชีนเลิร์นนิง วิทยาศาสตร์ข้อมูล sklearn โมเดล mllib spark hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
รูปที่ 9: ตัวอย่างของการแจกแจงแบบเกาส์เซียนที่ถูกตัดให้พอดีกับการสังเกตไฮเปอร์พารามิเตอร์ 3 รายการ ภาพโดยผู้เขียน

สำหรับการสังเกตแต่ละครั้ง (จุดสีน้ำเงินบนแกน x) เราสร้างการแจกแจงแบบปกติ ~N(μ, σ) โดยที่...

  • μ (มิว) คือค่าเฉลี่ยของการแจกแจงแบบปกติของเรา ค่าของมันคือตำแหน่งของจุดตามแกน x
  • σ (ซิกมา) คือค่าเบี่ยงเบนมาตรฐานของการแจกแจงแบบปกติ ค่าของมันคือระยะทางไปยังจุดที่ใกล้เคียงที่สุด.

ถ้าจุดอยู่ใกล้กัน ค่าเบี่ยงเบนมาตรฐานจะน้อย ดังนั้นการกระจายจะสูงมาก ในทางกลับกัน ถ้าจุดห่างกัน การกระจายจะแบน (รูปที่ 10)...

ไฮเปอร์พารามิเตอร์ ไฮเปอร์พารามิเตอร์ การปรับโมเดล การปรับแต่งแมชชีนเลิร์นนิง วิทยาศาสตร์ข้อมูล sklearn โมเดล mllib spark hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
รูปที่ 10: ตัวอย่างผลกระทบของส่วนเบี่ยงเบนมาตรฐานต่อรูปร่างของการแจกแจงแบบปกติ ภาพโดยผู้เขียน

Pirate Perspective: NA — โจรสลัดไม่เหมาะกับโมเดลผสม

อีกข้อหนึ่งก่อนที่จะไปต่อ: หากคุณกำลังอ่านหนังสือ คุณจะสังเกตเห็นว่า TPE ใช้เกาส์เซียนแบบ "ตัดทอน" ซึ่งหมายความว่าเกาส์เซียนนั้นถูกล้อมรอบด้วยช่วงที่เราระบุในการกำหนดค่าไฮเปอร์พารามิเตอร์แทนที่จะขยายเป็น +/- อินฟินิตี้ .

2.2.4 — กำหนดจุดต่อไปเพื่อสำรวจ!

ลองนำชิ้นส่วนเหล่านี้มารวมกัน จนถึงตอนนี้ เราได้ 1) ได้รับข้อสังเกตเกี่ยวกับฟังก์ชันวัตถุประสงค์ 2) กำหนดสูตร "ความน่าจะเป็น" ของเรา และ 3) สร้างค่าประมาณความหนาแน่นของความน่าจะเป็นผ่านแบบจำลองส่วนผสมตามค่าก่อนหน้า เรามีชิ้นส่วนทั้งหมดเพื่อประเมินจุดที่กำหนด!

ขั้นตอนแรกของเราคือสร้างฟังก์ชันความหนาแน่นของความน่าจะเป็นเฉลี่ย (PDF) สำหรับทั้งสองอย่าง กรัม(x) และ ล.(x).

ไฮเปอร์พารามิเตอร์ ไฮเปอร์พารามิเตอร์ การปรับโมเดล การปรับแต่งแมชชีนเลิร์นนิง วิทยาศาสตร์ข้อมูล sklearn โมเดล mllib spark hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
รูปที่ 11: การซ้อนทับของความหนาแน่นของความน่าจะเป็นโดยเฉลี่ยที่กำหนด 3 จุดที่สังเกตได้ ภาพโดยผู้เขียน

กระบวนการตัวอย่างแสดงในรูปที่ 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...

  1. กำหนดพื้นที่ค้นหา ซึ่งเป็นเพียงช่วงและรูปแบบการทำงานของไฮเปอร์พารามิเตอร์ที่คุณต้องการเพิ่มประสิทธิภาพ
  2. กำหนดฟังก์ชั่นที่เหมาะสม ซึ่งโทรหาคุณ model.fit() ฟังก์ชั่นแยกรถไฟ / การทดสอบที่กำหนด
  3. กำหนดฟังก์ชั่นวัตถุประสงค์ ซึ่งเป็นเมตริกความแม่นยำแบบคลาสสิก เช่น 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 ทำซ้ำขั้นตอนด้านล่างจนกว่าจะถึงเกณฑ์การหยุด:

  1. แบ่งจุดที่สังเกตออกเป็นชุด "ดี" และ "ไม่ดี" ตามพารามิเตอร์หลายมิติ เช่น แกมมา
  2. ปรับโมเดลผสมให้เหมาะกับทั้งชุด "ดี" และ "ไม่ดี" เพื่อพัฒนาค่าประมาณความหนาแน่นของความน่าจะเป็นโดยเฉลี่ย
  3. เลือกจุดที่ปรับคะแนน "แนวโน้ม" ให้เหมาะสม ซึ่งใช้ประโยชน์จากขั้นตอนที่ 2 เพื่อประเมินความน่าจะเป็นที่จะอยู่ในชุด "ดี" และ "ไม่ดี"

สุดท้าย เรามีข้อมูลโค้ดเจ๋งๆ ที่แสดงวิธีการขนาน HyperOpt ผ่าน SparkTrials นอกจากนี้ยังบันทึกการวนซ้ำทั้งหมดของเราไปยัง MLflow

HyperOpt Demystified เผยแพร่ซ้ำจากแหล่งที่มา https://towardsdatascience.com/hyperopt-demystified-3e14006eb6fa?source=rss—-7f60cf5620c9—4 ผ่าน https://towardsdatascience.com/feed

<!–

->

ประทับเวลา:

เพิ่มเติมจาก ที่ปรึกษาบล็อคเชน

มหาวิทยาลัยแมริแลนด์เป็นเจ้าภาพจัดการบรรยายสาธารณะเกี่ยวกับสกุลเงินดิจิทัลและสกุลเงินดิจิทัลของธนาคารกลาง (CBDC) – Education Wire

โหนดต้นทาง: 1760671
ประทับเวลา: พฤศจิกายน 22, 2022

การแก้ไขปัญหาการขุดของ Bitcoin พิมพ์การเพิ่มขึ้นครั้งใหญ่เป็นอันดับสองของปี 2022 – ตัวชี้วัดใกล้ระดับสูงสุดอย่างไม่มีใครเทียบ

โหนดต้นทาง: 1648718
ประทับเวลา: กันยายน 1, 2022

เซลเซียสได้รับการอนุมัติให้ขาย Bitcoin ที่ขุดได้ ลูกค้าที่สูญเสีย 50,000 USDC ยืนยันว่า Stablecoins ที่ได้รับการควบคุมของเธอควรได้รับการปฏิบัติที่แตกต่าง

โหนดต้นทาง: 1629724
ประทับเวลา: สิงหาคม 18, 2022