อัลกอริธึมการปรับให้เหมาะสมแบบขนานสำหรับปัญหากับฟังก์ชันวัตถุประสงค์ราคาแพงมาก


15

ฉันเพิ่มประสิทธิภาพการทำงานของตัวแปร 10-20 ข่าวดีก็คือการประเมินแต่ละฟังก์ชั่นมีราคาแพงประมาณ 30 นาทีของการคำนวณแบบอนุกรม ข่าวดีก็คือฉันมีกลุ่มที่มีโหนดการคำนวณไม่กี่โหลในการกำจัดของฉัน

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

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

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

อัลกอริธึมกำลังสองดูเหมือนจะอยู่ตรงกลาง: เราสามารถสร้าง "ตัวแทนจำลอง" เริ่มต้นด้วยการคำนวณค่าจำนวนมากในแบบคู่ขนาน แต่ฉันไม่รู้ว่าการวนซ้ำที่เหลืออยู่นั้นสามารถขนานกันได้หรือไม่

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


1
คุณสามารถคำนวณการไล่ระดับสีแบบขนาน (สำหรับวิธี quasi-Newton โดยใช้ความแตกต่างอัน จำกัด ) และรับการเร่งความเร็วตามสัดส่วนของจำนวนพารามิเตอร์เช่น 10x-20x
stali

@stali: คุณต้องการ Hessian สำหรับวิธี quasi-Newton ในการเพิ่มประสิทธิภาพ การคำนวณ Hessian ผ่านการประเมินฟังก์ชั่นที่ จำกัด นั้นไม่ใช่ความคิดที่ดี การคำนวณความแตกต่างอัน จำกัด ของการไล่ระดับสีเพื่อเพิ่มประสิทธิภาพนั้นโดยทั่วไปก็ไม่ใช่ความคิดที่ดี
Geoff Oxberry

วิธี quasi-Newton จำนวนมากเช่น BFGS ไม่ต้องการ Hessian อย่างชัดเจน ฉันคิดว่าการใช้การไล่ระดับสีร่วมกับ L-BFGS OP สามารถบรรลุสิ่งที่เขาต้องการได้อย่างรวดเร็ว
stali

@stali: ฉันชี้ให้เห็นว่าทำไมการใช้การประมาณความแตกต่างแน่นอนกับการไล่ระดับสีจะเป็นความคิดที่ไม่ดีในคำตอบของฉัน มันจะลดการบรรจบกันโดยการนำข้อผิดพลาดไปทางด้านขวามือของการทำซ้ำเสมือนนิวตัน นอกจากนี้ยังเป็นการสูญเสียการประเมินผลการทำงานเนื่องจากไม่มีโอกาสในการนำการประเมินเก่ากลับมาใช้ใหม่ (ต่างจากวิธีตัวแทนเสมือน) การใช้ BFGS จะแก้ปัญหาเพียงครึ่งเดียวกับแนวทางที่คุณเสนอ
Geoff Oxberry

นี่เป็นความคิดเห็นที่เหมาะสมไม่ใช่คำตอบ แต่ฉันไม่มีทางเลือกเนื่องจากฉันไม่มีตัวแทนเพียงพอที่จะโพสต์ความคิดเห็น Michael ฉันมีปัญหาคล้ายกันมาก: การประเมินฟังก์ชั่นราคาแพงที่เกี่ยวข้องกับการจำลองที่ซับซ้อนที่ทำงานบนคลัสเตอร์ คุณเคยพบรหัสที่เหมาะสมสำหรับการเพิ่มประสิทธิภาพการทำงานเมื่อการประเมินฟังก์ชั่นเกี่ยวข้องกับการจำลองในคลัสเตอร์หรือไม่?
MoonMan

คำตอบ:


16

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

ด้วยตัวแปร 10-20 รายการและการประเมินฟังก์ชั่นราคาแพงแนวโน้มที่จะแนะนำอัลกอริธึมการเพิ่มประสิทธิภาพที่ปราศจากอนุพันธ์ ฉันจะไม่เห็นด้วยอย่างยิ่งกับคำแนะนำของ Paul: โดยทั่วไปคุณต้องใช้การไล่ระดับสีที่มีความแม่นยำของเครื่องจักรเว้นแต่คุณจะใช้วิธีพิเศษบางอย่าง (เช่นการไล่ระดับสีแบบสุ่มในการเรียนรู้ของเครื่องจะใช้ประโยชน์จากรูปแบบของวัตถุประสงค์ ประมาณการไล่ระดับสี)

แต่ละขั้นตอนเสมือนนิวตันจะอยู่ในรูปแบบ:

H~(xk)dk=-(xk),

โดยที่เป็นการประมาณค่าของ Hessian matrix, d kคือทิศทางการค้นหา, x kคือค่าของตัวแปรการตัดสินใจที่กระแสซ้ำ, fคือฟังก์ชันวัตถุประสงค์ของคุณ, และfคือความชันของวัตถุประสงค์ของคุณ, และ ตัวแปรการตัดสินใจได้รับการปรับปรุงเช่นx k + 1 = x k + α k d kโดยที่α kH~dkxkxk+1=xk+αkdkαkคือขนาดขั้นตอนที่กำหนดในบางแบบ (เช่นการค้นหาบรรทัด) คุณสามารถหนีไปกับ Hessian โดยประมาณในบางวิธีและการวนซ้ำของคุณจะมาบรรจบกันแม้ว่าคุณจะใช้บางอย่างเช่นการประมาณค่าความแตกต่างแน่นอนของ Hessian ผ่านการไล่ระดับสีที่แน่นอนคุณอาจประสบปัญหาเนื่องจากสภาพไม่ดี โดยทั่วไปแล้ว Hessian จะใช้การไล่ระดับสี (ตัวอย่างเช่นวิธีการพิมพ์แบบ BFGS พร้อมการอัปเดตอันดับ 1 ของ Hessian)

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

  • คุณจะมีข้อผิดพลาดในการไล่ระดับสีดังนั้นวิธี quasi-Newton ที่คุณใช้คือคล้ายกับการค้นหารากของฟังก์ชันที่มีเสียงดัง
  • หากการประเมินฟังก์ชั่นมีราคาแพงและคุณกำลังพยายามประเมินการไล่ระดับสีตามตัวแปรคุณจะต้องเสียค่าใช้จ่ายในการประเมินฟังก์ชันNต่อการทำซ้ำยังไม่มีข้อความยังไม่มีข้อความ
  • หากคุณมีข้อผิดพลาดในการไล่ระดับสีคุณจะมีข้อผิดพลาดมากขึ้นใน Hessian ซึ่งเป็นปัญหาใหญ่ในแง่ของการปรับสภาพของระบบเชิงเส้น
  • ... และมันจะทำให้คุณเสียค่าใช้จ่ายในการประเมินฟังก์ชั่นต่อการวนซ้ำยังไม่มีข้อความ2

เพื่อให้ได้ผลการคำนวณที่ไม่ดีอย่างหนึ่งของ quasi-Newton คุณกำลังทำบางอย่างเช่นการประเมินฟังก์ชั่น 420 ครั้งที่ 30 นาทีต่อการประเมินผลซึ่งหมายความว่าคุณกำลังรอสักครู่สำหรับการทำซ้ำแต่ละครั้งหรือไม่ ต้องการคลัสเตอร์ใหญ่สำหรับการประเมินฟังก์ชัน ตัวแก้เชิงเส้นที่เกิดขึ้นจริงจะมีค่าเมทริกซ์ 20 ถึง 20 (มากที่สุด!) ดังนั้นจึงไม่มีเหตุผลที่จะทำให้มันขนานกัน หากคุณสามารถรับข้อมูลการไล่ระดับสีโดยการแก้ปัญหา adjoint มันอาจจะคุ้มค่ามากกว่าในกรณีนี้มันอาจคุ้มค่าที่จะดูหนังสือเช่น Nocedal & Wright

หากคุณจะทำการประเมินฟังก์ชั่นจำนวนมากในแบบคู่ขนานคุณควรดูที่วิธีการสร้างแบบจำลองตัวแทนหรือในการสร้างวิธีการค้นหาแบบตั้งก่อนที่จะพิจารณาวิธีแบบกึ่งนิวตัน บทความวิจารณ์แบบคลาสสิกเป็นบทความโดยRios และ Sahinidis เกี่ยวกับวิธีการซื้อขายตราสารอนุพันธ์ซึ่งตีพิมพ์ในปี 2555 และให้การเปรียบเทียบที่ดีและกว้างมาก บทความการเปรียบเทียบโดยMore and Wildจากปี 2009; ตำรา 2009 "การแนะนำการเพิ่มประสิทธิภาพปลอดอนุพันธ์" โดย Conn, Scheinberg และ Vicente; และบทความทบทวนเกี่ยวกับการสร้างวิธีการค้นหาที่กำหนดโดย Kolda, Lewis และ Torczonจากปี 2003

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


2
มันเป็นความสุขสำหรับฉันที่จะผิดอย่างสมบูรณ์และเรียนรู้สิ่งใหม่และมีประโยชน์ในกระบวนการ :)
เปาโล

ขอบคุณ! การชี้แจงเพิ่มเติมอีกหนึ่งข้อ: อัลกอริธึมเหล่าใดที่สามารถทำการประเมินฟังก์ชันแบบขนานได้ ตัวอย่างเช่นบนกริด k-way ที่ทำการวนซ้ำ n + 1, ... , n + k ขึ้นอยู่กับข้อมูลที่ได้รับจากการวนซ้ำ 1, ... , n?
ไมเคิล

k

3

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

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

การอ้างอิง

วัง, L. , Shan, S. , และ Wang, GG (2004) วิธีการสุ่มตัวอย่างตามโหมดสำหรับการเพิ่มประสิทธิภาพทั่วโลกในฟังก์ชั่นกล่องดำราคาแพง การเพิ่มประสิทธิภาพทางวิศวกรรม, 36 (4), 419-438


2

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

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


0

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

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

สำหรับข้อมูลเพิ่มเติมโปรดอ่านNocedal & ไรท์ตัวเลขการเพิ่มประสิทธิภาพบทที่ 7 มีชุดซอฟต์แวร์เพิ่มประสิทธิภาพหลายอย่างที่ใช้สิ่งนี้ควบคู่กันไป ท่ามกลางฟรีแวร์ใช้กันอย่างแพร่หลายมากที่สุดคือแพคเกจซอฟต์แวร์ DAKOTA (Sandia Labs แห่งชาติ)


5
ยังไม่มีข้อความ

-2

นี่คือวิธีแก้ไขปัญหาของคุณ

คำอธิบายของวิธีการทางคณิตศาสตร์มีอยู่ในบทความนี้


3
ยินดีต้อนรับสู่ SciComp.SE คุณสามารถให้รายละเอียดเกี่ยวกับวิธีการที่อธิบายในเอกสารและนำไปใช้ในซอฟต์แวร์ได้หรือไม่? วิธีการที่ใช้คืออะไร? ทำไมถึงดี มีวิธีใดบ้างที่คำตอบอื่น ๆ ไม่ครอบคลุม?
nicoguaro

2
นอกจากนี้ดูเหมือนว่านี่เป็นงานของคุณเอง หากเป็นจริงโปรดระบุว่าชัดเจนในคำตอบของคุณ
nicoguaro

@nicoguaro: ขอบคุณ แต่ฉันรู้วิธีคลิกลิงก์
Michael

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