การให้การไล่ระดับสีโดยประมาณให้กับเครื่องมือเพิ่มประสิทธิภาพการไล่ระดับสีนั้นไร้ประโยชน์หรือไม่?


9

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

[แก้ไข]

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

  • ปัญหาของฉันกับความแตกต่างอัตโนมัติคือดูเหมือนว่าจะมีการจับเสมอ ไลบรารี AD ไม่สามารถเผยแพร่ไปยังการเรียกใช้ไลบรารีภายนอก (เช่น BLAS) หรือคุณต้องปรับปรุงเวิร์กโฟลว์ของคุณใหม่อย่างมากจนทำให้การจัดการกับ ... โดยเฉพาะอย่างยิ่งถ้าคุณทำงานกับภาษาที่มีความละเอียดอ่อน Gripes ของฉันที่มีโฆษณาเป็นปัญหาที่แยกจากกันโดยสิ้นเชิง แต่ฉันอยากจะเชื่อ!

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


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

1
คำถามของฉันคือกล่าวอีกวิธีหนึ่งสมมติว่าสมการของคุณมีส่วนเกี่ยวข้องมากเกินไปสำหรับคุณในการคำนวณการไล่ระดับสี
ศาสตราจารย์ bigglesworth

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

1
@nicoguaro ใช่ในบริบทของการปรับให้เหมาะสมกับสมการเชิงอนุพันธ์บางส่วนนั้นเป็นกรณี (และนี่คือหนึ่งในพื้นที่การวิจัยของฉันซึ่งเป็นความคิดแรกของฉันเช่นกัน) แต่คำถามไม่ได้กล่าวถึงสิ่งใดในทิศทางนั้น (และมีประโยชน์มากกว่าในเรื่องทั่วไปฉันคิดว่า)
Christian Clason

1
ยิ่งไปกว่านั้นในกรณีนี้มันเป็นคำถามที่สมเหตุสมผล: จะเกิดอะไรขึ้นถ้าระบบ PDE ของคุณซับซ้อนมากจนคุณไม่สามารถหาสมการ adjoint ที่จะแก้ปัญหาเชิงตัวเลขเพื่อให้ได้การไล่ระดับสี (สิ่งเหล่านี้น่ารังเกียจมากโดยเฉพาะอย่างยิ่งหากเงื่อนไขขอบเขตที่ไม่ได้มาตรฐานมีส่วนเกี่ยวข้อง)
Christian Clason

คำตอบ:


11

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

  1. วิธี Stochasticที่การเลือกตัวอย่างเป็นการสุ่มแบบพื้นฐาน (หมายถึงการสุ่มนั้นเป็นองค์ประกอบที่สำคัญ; อาจมีส่วนประกอบอื่น ๆ ที่กำหนดขึ้นได้) วิธีการเหล่านี้มักจะถูกกระตุ้นด้วยกระบวนการทางกายภาพหรือชีวภาพและมีชื่อที่สอดคล้องกันเช่น "การจำลองการอบ", "อัลกอริทึมทางพันธุกรรม" หรือ "วิธีการจับกลุ่มอนุภาค / หิ่งห้อย / มดวิธี" แทบจะไม่มีทฤษฎีการลู่เข้าที่เกิน "ถ้าคุณลองมานานพอคุณจะได้คะแนนทั้งหมด (รวมถึง minimizer) ด้วยความน่าจะเป็น " (ไม่ว่ามันจะเกิดขึ้น - ด้วยความน่าจะเป็น - ก่อนที่ความร้อนตายของเอกภพ ... ) ในฐานะนักคณิตศาสตร์ฉันจะพิจารณาวิธีการเหล่านี้เป็นทางเลือกสุดท้าย: หากคุณไม่รู้อะไรเลย1 เกี่ยวกับฟังก์ชั่นของคุณนี่คือทั้งหมดที่คุณสามารถทำได้และคุณอาจจะโชคดี

  2. วิธีการที่กำหนดซึ่งการเลือกตัวอย่างไม่สุ่มคืออิงตามการประเมินฟังก์ชั่นก่อนหน้าอย่างหมดจด ตัวอย่างที่มีชื่อเสียงที่สุดน่าจะเป็นวิธี Nelder - Mead simplex; อื่น ๆ กำลังสร้างวิธีการค้นหาชุด สิ่งสำคัญคือต้องตระหนักว่าสิ่งนี้สามารถทำงานได้หากมีความสัมพันธ์ (ใช้ประโยชน์ได้) ระหว่างค่าของฟังก์ชั่นที่จุดต่าง ๆ - เช่นความราบรื่นของฟังก์ชั่น ในความเป็นจริงทฤษฎีคอนเวอร์เจนซ์สำหรับเช่นวิธี Nelder - Mead ขึ้นอยู่กับการสร้างแบบไม่สม่ำเสมอการประมาณความแตกต่างแน่นอนของการไล่ระดับสีตามค่าฟังก์ชันที่จุดยอดของซิมเพล็กซ์และแสดงให้เห็นว่ามันเป็นการบรรจบกันทั้งการไล่ระดับสีที่แน่นอนและศูนย์เมื่อสัญญาซิมเพล็กซ์ถึงจุด (ตัวแปรที่อยู่บนพื้นฐานของการประมาณค่าผลต่างแบบ จำกัด มาตรฐานเรียกว่าการค้นหาเข็มทิศ )

  3. เมธอดตามโมเดลซึ่งค่าฟังก์ชันถูกใช้เพื่อสร้างโมเดลโลคัลของฟังก์ชัน (เช่นโดยการแก้ไข) ซึ่งจะถูกย่อให้เล็กสุดโดยใช้เมธอดมาตรฐาน (gradient- / Hessian-based) เนื่องจากการประมาณความแตกต่างอัน จำกัด นั้นเทียบเท่ากับอนุพันธ์ของพหุนามพหุนามวิธีการ "ไล่ระดับตัวเลข" แบบคลาสสิกจึงตกอยู่ในชั้นเรียนนี้เช่นกัน

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

การขาดข้อมูลไม่สามารถแก้ไขได้โดยกลอุบายทางคณิตศาสตร์ใด ๆ

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


17

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

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

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


3
+1 สำหรับความแตกต่างโดยอัตโนมัติ สิ่งนี้มักจะดีกว่าการแสดงออกของสัญลักษณ์ a-Priori สำหรับการไล่ระดับสีหรือการประมาณความแตกต่างอัน จำกัด
leftaroundabout

ฉันขอแนะนำให้ใช้ความแตกต่างอัตโนมัติ สำหรับ Fortran ให้ลองใช้ tapenade จาก INRIA Sophia-Antipolis ซึ่งขึ้นอยู่กับการแปลงแหล่งที่มา สำหรับ C / C ++ มีตัวเลือกเพิ่มเติมเช่น adol-c, adept, sacado (ส่วนหนึ่งของ Trilinos) สิ่งเหล่านี้ขึ้นอยู่กับการใช้งานมากเกินไปและง่ายต่อการใช้งานแม้ว่าจะไม่ได้ผลมากนักสำหรับปัญหาที่มีขนาดใหญ่มาก
cfdlab

นอกจากนี้ยังมีบางสถานการณ์ที่ความแตกต่างโดยอัตโนมัติ (AD) อาจใช้งานยาก แต่ความแตกต่างของขั้นตอนที่ซับซ้อนซึ่งบางครั้งอาจมีจำนวนเกือบเท่ากับสิ่งเดียวกับโฆษณา (นอกเหนือจากความสามารถในการคำนวณการไล่ระดับสีทั้งหมดในครั้งเดียวด้วยโหมดย้อนกลับ ของ AD) อาจใช้ได้และค่อนข้างง่ายที่จะใช้
Mark L. Stone

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

4

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

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

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

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


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

@choward: ใช่ นั่นคือสิ่งที่สวยเกี่ยวกับมัน ฉันสงสัยว่า เพื่อนร่วมงานของฉันบางคนดูเหมือนจะคิดว่ามันเป็นกระสุนวิเศษ ฉันสงสัยว่ามันเทียบเท่ากับสมการความไวและหนึ่งในเพื่อนร่วมงานของฉันซึ่งเป็นนักคณิตศาสตร์ประยุกต์ได้พิสูจน์แล้ว
Mike Dunlavey

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

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