JM ถูกต้องเกี่ยวกับการจัดเก็บ BFGS ต้องการ Hessian โดยประมาณ แต่คุณสามารถกำหนดค่าเริ่มต้นได้ด้วยเมทริกซ์เอกลักษณ์แล้วเพียงคำนวณการอัปเดตอันดับสองของ Hessian โดยประมาณในขณะที่คุณไปตราบใดที่คุณมีข้อมูลการไล่ระดับสี BFGS เป็นวิธี quasi-Newton และจะมาบรรจบกันในขั้นตอนที่น้อยกว่า CG และมีแนวโน้มที่จะ "ติด" น้อยลงและต้องการการปรับแต่งอัลกอริทึมเล็กน้อยเพื่อให้ได้การทำซ้ำที่สำคัญในแต่ละครั้ง
ในทางตรงกันข้าม CG ต้องการผลิตภัณฑ์เมทริกซ์เวกเตอร์ซึ่งอาจเป็นประโยชน์กับคุณหากคุณสามารถคำนวณอนุพันธ์ทิศทาง (อีกครั้งวิเคราะห์หรือใช้ความแตกต่าง จำกัด ) การคำนวณผลต่างอันตะของอนุพันธ์เชิงทิศทางจะถูกกว่าการคำนวณผลต่างอันตะของ Hessian มากดังนั้นหากคุณเลือกที่จะสร้างอัลกอริธึมของคุณโดยใช้ผลต่างอันตะ จำกัด เพียงคำนวณอนุพันธ์ของทิศทางโดยตรง อย่างไรก็ตามการสังเกตนี้ไม่ได้ใช้กับ BFGS ซึ่งจะคำนวณ Hessians โดยประมาณโดยใช้ผลิตภัณฑ์ภายในของข้อมูลการไล่ระดับสี
nn
ฉันจะเปรียบเทียบอัลกอริธึมทั้งสองกับปัญหาการทดสอบเล็กน้อยสำหรับแอปพลิเคชันของคุณหากคุณรู้ว่าการจัดเก็บจะไม่มีปัญหา โดยไม่ทราบถึงปัญหาเฉพาะของคุณฉันเดาว่า BFGS จะเร็วขึ้น แต่คุณควรทดสอบอัลกอริทึมทั้งสองเพื่อให้ได้แนวคิดที่ดีขึ้นซึ่งจะทำงานได้ดีขึ้น
ในที่สุดคำเกี่ยวกับการสร้างความแตกต่างโดยอัตโนมัติ: การมีประสบการณ์กับสิ่งอำนวยความสะดวกในการสร้างความแตกต่างโดยอัตโนมัติ (AD) สำหรับ Fortran ( DAEPACK ) ฉันสามารถบอกคุณได้ว่าเครื่องมือโฆษณามักจะพิถีพิถัน พวกเขาอาจไม่สามารถแยกความแตกต่างรหัสที่พวกเขาสร้างขึ้นเอง เครื่องมือโฆษณามีสองประเภท:
- เครื่องมือโฆษณาจากต้นทางสู่แหล่ง
- ผู้ประกอบการมากเกินไปเครื่องมือโฆษณา
เครื่องมือ Source-to-source เป็นตัวแก้ไขคอมไพเลอร์ที่รับซอร์สโค้ดที่คุณเขียนแยกวิเคราะห์และสร้างซอร์สโค้ดใหม่โดยอัตโนมัติซึ่งคำนวณการไล่ระดับสีของฟังก์ชั่นในซอร์สโค้ดของคุณ ผู้ปฏิบัติงานเครื่องมือโฆษณามากเกินไปทำให้คุณต้องใช้ตัวดำเนินการโฆษณามากเกินไปในซอร์สโค้ดของคุณเพื่อให้สามารถคำนวณอนุพันธ์ได้ซึ่งจะต้องใช้ความพยายามเพิ่มเติมในส่วนของคุณในการคำนวณอนุพันธ์เชิงวิเคราะห์ด้วยโฆษณา