BFGS เทียบกับวิธีการไล่ระดับสีคอนจูเกต


25

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


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

ต้องพอดีเท่านั้น ~ 7 (แน่นอนน้อยกว่า 10) หมายความว่าการประมาณแบบเฮสเซียนเป็นเพียงเมทริกซ์ 10x10 ที่ถูกต้องเท่านั้น ในกรณีใดจะเร็วกว่าอีกอันหนึ่ง
drjrm3

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

คำตอบ:


13

JM ถูกต้องเกี่ยวกับการจัดเก็บ BFGS ต้องการ Hessian โดยประมาณ แต่คุณสามารถกำหนดค่าเริ่มต้นได้ด้วยเมทริกซ์เอกลักษณ์แล้วเพียงคำนวณการอัปเดตอันดับสองของ Hessian โดยประมาณในขณะที่คุณไปตราบใดที่คุณมีข้อมูลการไล่ระดับสี BFGS เป็นวิธี quasi-Newton และจะมาบรรจบกันในขั้นตอนที่น้อยกว่า CG และมีแนวโน้มที่จะ "ติด" น้อยลงและต้องการการปรับแต่งอัลกอริทึมเล็กน้อยเพื่อให้ได้การทำซ้ำที่สำคัญในแต่ละครั้ง

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

nn

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

ในที่สุดคำเกี่ยวกับการสร้างความแตกต่างโดยอัตโนมัติ: การมีประสบการณ์กับสิ่งอำนวยความสะดวกในการสร้างความแตกต่างโดยอัตโนมัติ (AD) สำหรับ Fortran ( DAEPACK ) ฉันสามารถบอกคุณได้ว่าเครื่องมือโฆษณามักจะพิถีพิถัน พวกเขาอาจไม่สามารถแยกความแตกต่างรหัสที่พวกเขาสร้างขึ้นเอง เครื่องมือโฆษณามีสองประเภท:

  • เครื่องมือโฆษณาจากต้นทางสู่แหล่ง
  • ผู้ประกอบการมากเกินไปเครื่องมือโฆษณา

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


22

mm

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

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

m


ฉันลืมเรื่อง L-BFGS โดยสิ้นเชิง +1 สำหรับสิ่งนั้น
JM

15

ในมิติที่ต่ำวิธี BFGS ที่นำมาใช้อย่างดีนั้นโดยทั่วไปจะเร็วกว่าและมีประสิทธิภาพมากกว่า CG โดยเฉพาะถ้าฟังก์ชั่นอยู่ไม่ไกลจากสมการกำลังสอง

BFGS และ CG ไม่จำเป็นต้องมีข้อสันนิษฐานใด ๆ เกี่ยวกับการนูน เฉพาะการประมาณ Hessian เบื้องต้น (สำหรับ BFGS) สิ่งที่จำเป็นต้องมี (สำหรับ CG) จะต้องเป็นค่าบวกแน่นอน แต่สิ่งเหล่านี้สามารถถูกเลือกให้เป็นเมทริกซ์เอกลักษณ์ในมิติต่ำโดยไม่มีอันตรายมาก ดูเพิ่มเติมที่/scicomp//a/3213/1117

ในกรณีที่ไม่มีการไล่ระดับสีที่ตั้งโปรแกรมไว้มันเป็นการสูญเสียความพยายามอย่างมากในการใช้การไล่ระดับสีเชิงตัวเลขโดยเฉพาะเมื่อค่าฟังก์ชันมีราคาแพง แต่ควรใช้อัลกอริทึมที่ปราศจากอนุพันธ์ ดูhttp://archimedes.cheme.cmu.edu/?q=dfocompสำหรับการสำรวจล่าสุด


ลิงค์นี้ให้ฉัน "404 ไม่พบ" คุณสามารถแก้ไขได้หรือไม่
Stiefel

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