วิธีการเลือกอัลกอริทึมการเพิ่มประสิทธิภาพที่เหมาะสม?


16

ฉันต้องการค้นหาฟังก์ชันขั้นต่ำ การอ่านเอกสารที่http://docs.scipy.org/doc/scipy/reference/optimize.htmlฉันเห็นว่ามีอัลกอริทึมหลายอย่างที่ทำสิ่งเดียวกันคือหาขั้นต่ำ ฉันจะรู้ได้อย่างไรว่าควรเลือกอันไหน

อัลกอริทึมบางส่วนที่ระบุไว้

  • ย่อขนาดฟังก์ชั่นโดยใช้อัลกอริธึมลงเขา
  • ย่อขนาดฟังก์ชันโดยใช้อัลกอริทึม BFGS
  • ย่อเล็กสุดของฟังก์ชันด้วยอัลกอริทึมการไล่ระดับสีแบบคอนจูเกตแบบไม่เชิงเส้น
  • ลดฟังก์ชั่น f โดยใช้วิธี Newton-CG
  • ย่อขนาดฟังก์ชั่นโดยใช้วิธีของ Powell ที่แก้ไขแล้ว

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


คุณต้องตรวจสอบลักษณะของปัญหาของคุณ: มันเป็นเส้นตรงหรือไม่? มิติของมันคืออะไร? ฟังก์ชันต้นทุนของคุณถูกประเมินหรือไม่ คุณสามารถประเมินอนุพันธ์ของคุณเชิงวิเคราะห์และ / หรือราคาถูกได้หรือไม่? คุณมีข้อ จำกัด หรือไม่ หากคุณมีข้อ จำกัด คุณสามารถเขียนปัญหาของคุณได้อย่างง่ายดายเหมือนไม่มีข้อ จำกัด ? โปรดอธิบายรายละเอียดเกี่ยวกับเรื่องเหล่านี้ให้มากขึ้น
usεr11852พูดว่า Reinstate Monic

@ user11852 มันเป็นเส้นตรง มิติข้อมูลมีอยู่ประมาณ 50 คุณสมบัติใช้เวลาประมาณ 2 นาทีในการคำนวณการไล่ระดับสีและค่าใช้จ่ายเพียงครั้งเดียวดังนั้นจึงไม่ถูก ฉันไม่คิดว่าฉันมีข้อ จำกัด
siamii

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

@paul: ในการเพิ่มประสิทธิภาพเชิงเส้นตรงมักจะหมายถึงข้อ จำกัด ไม่ได้เป็นฟังก์ชั่นของตัวเอง ฉัน (ได้รับอย่างไม่ถูกต้อง) เรียกว่า "เส้นตรง" ที่สัมพันธ์กับความนุ่มนวลของฟังก์ชั่นและฉันคิดว่านั่นเป็นสิ่งที่ OP อ้างถึงเช่นกัน ในคำตอบของฉันฉันส่วนใหญ่ขึ้นอยู่กับความจริงที่ว่าเขาพูดว่า "ต่อเนื่อง" หลังจากนั้น
usεr11852พูดว่า Reinstate Monic

คำตอบ:


14

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

ให้ฉันเครียดคุณเป็นคนที่ทำให้เกิดความอับอายระหว่าง 25-30 ถึง 100 ตัวแปรมันเป็นช่วงเวลาพลบค่ำเมื่อมันมาถึงการเลือกระหว่างการเพิ่มประสิทธิภาพขนาดใหญ่หรือขนาดเล็ก ต้องบอกว่าแม้ว่าจะไม่มีอะไรหายไป

เนื่องจากอนุพันธ์ลำดับที่หนึ่งถึงแม้จะมีราคาแพงในการกำจัดความคิดของวิธีการของนิวตัน คุณอาจมีโชคกับ Quasi-Newton (BFGS) แม้ว่า Hessian ของคุณจะมีแนวทแยงเล็กน้อยเริ่มต้นด้วย CG มักจะช้ากว่า BFGS เล็กน้อยนั่นอาจจะไม่ปรับปรุงอะไรมากมาย ใช้ถ้าหน่วยความจำยังเป็นปัญหา (หรือเพียงแค่ไปหา L-BFGS ในกรณีนั้น) นอกจากนี้เมื่อพิจารณาว่าการประเมินฟังก์ชั่นของคุณช้าแค่ไหนขั้นตอนวิธีการสืบเชื้อสาย / การค้นหาบรรทัดที่ชันที่สุดจะช้ามาก สิ่งเดียวกันกับ Simulated Annealing และตัวแปรการค้นหาแบบสุ่มอื่น ๆ (ฉันคิดว่าคุณไม่สามารถเข้าถึง HMC และแจ๊สทั้งหมดได้)

ดังนั้นเมื่อคุณต้องการปังที่ดีที่สุดสำหรับเจ้าชู้ของคุณเมื่อมันมาถึงการประเมินฟังก์ชั่นเดียว: ไปกับวิธีการของ Powell และทดสอบ COBYLA; แม้ว่าจะเป็นอัลกอริธึมการปรับให้เหมาะสมแบบ จำกัด เพราะมันจะทำหน้าที่เป็นเส้นตรงประมาณภายในการไล่ระดับสีของฟังก์ชันของคุณเพื่อเร่งความเร็วของสิ่งต่าง ๆ มันจะสามารถใช้ประโยชน์จากความเป็นเส้นตรงของฟังก์ชันของคุณ นอกจากนี้แน่นอนลองNLopt สำหรับงูหลาม มีเครื่องมือเพิ่มประสิทธิภาพไล่ระดับสีฟรีมากมาย ลอง UOBYQA; มันเป็นผลิตผลทางสมองของ Powell ด้วย (การเพิ่มประสิทธิภาพแบบไม่ จำกัด โดยการประมาณกำลังสอง)

สั้นมาก: อัลกอริทึม N-CG ขึ้นอยู่กับการคำนวณ Hessian และ Hessian ของคุณดูเหมือนจะมีราคาแพงมากในการคำนวณ NLCG และ BFGS ไม่จำเป็นต้องใช้แม้ว่าอาจลองลองคำนวณหนึ่งครั้งในขั้นตอนแรก

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

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


สำหรับการอ้างอิงในอนาคต: คุณอาจสนใจตรวจสอบการคำนวณทางวิทยาศาสตร์เบต้าบน Stackexchange สำหรับคำถามที่คล้ายกัน
usεr11852พูดว่า Reinstate Monic

ขอบคุณสำหรับคำตอบ. ที่จริงมิติของฉันคือ 232,750 นี่คือจำนวนการไล่ระดับสีที่ฉันคำนวณในแต่ละครั้ง ฉันทำการประเมินฟังก์ชั่นและการคำนวณการไล่ระดับสีบน GPU มันจะเข้ากันได้กับ NLopt หรือไม่?
siamii

ฉันไม่ได้ใช้ NLopt กับ GPU แต่ฉันไม่เห็นเหตุผลที่ชัดเจนว่าทำไมมันควรมีปัญหาเกี่ยวกับความเข้ากันได้ ฉันอาจสงสัยว่าคิดว่าปัญหาของการดำเนินการ I / O บ่อยครั้งจากและไปยัง GPU
usεr11852พูดว่า Reinstate Monic

@ usεr11852, ยังสามารถพูดคุยเกี่ยวกับการเปรียบเทียบการลดลงของการไล่ระดับสีและวิธีการสลายตัว QR สำหรับการลดฟังก์ชั่นลดต้นทุนเชิงเส้น? ฉันต้องถามคำถามแยกต่างหากหรือไม่?
ดร. Nisha Arora

@DrNishaArora: ใช่ นั่นจะเหมาะสมสำหรับคำถามแยกต่างหาก โปรดดูที่หัวข้อทำไมต้องใช้การไล่ระดับสีแบบลาดชันสำหรับการถดถอยเชิงเส้นเมื่อมีวิธีการแก้ปัญหาคณิตศาสตร์แบบปิด? เพื่อให้แน่ใจว่าคุณหลีกเลี่ยงการทำซ้ำ!
usεr11852พูดว่า Reinstate Monic

1

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

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

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


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