การหยุดเกณฑ์สำหรับ Nelder Mead


11

ฉันกำลังพยายามใช้อัลกอริทึม Nelder-Mead สำหรับการปรับฟังก์ชั่นให้เหมาะสม หน้าวิกิพีเดียเกี่ยวกับ Nelder-มธุรสเป็นที่น่าแปลกใจที่ชัดเจนเกี่ยวกับขั้นตอนวิธีการทั้งหมดยกเว้นสำหรับเกณฑ์การหยุดของมัน ที่นั่นมันเศร้าพูดว่า:

ตรวจสอบการบรรจบกัน[ต้องการชี้แจง]

ฉันลองและทดสอบเกณฑ์สองสามข้อด้วยตัวเอง:

  • หยุดถ้าโดยที่มีขนาดเล็กและที่คือจุดยอด th ของ simplex เรียงลำดับจากต่ำ ( ) ถึงสูง ( ) ค่าฟังก์ชัน กล่าวอีกนัยหนึ่งเมื่อค่าสูงสุดของ simplex เกือบเท่ากับค่าต่ำสุด ฉันพบว่ามันทำงานไม่ถูกต้องเนื่องจากมันไม่รับประกันว่าฟังก์ชั่นจะทำงานอย่างไรภายใน simplex ตัวอย่างพิจารณาฟังก์ชั่น:แน่นอนว่ามันเป็นเรื่องเล็กน้อยที่จะปรับให้เหมาะสม แต่สมมุติว่าเราทำสิ่งนี้ด้วย NM และให้จุดสองจุดคือและϵ x ฉันฉันf ( x 1 ) f ( x N + 1 ) f ( x ) = x 2 x 1 = - 1 x 2 = 1(xยังไม่มีข้อความ+1)-(x1)<εεxผมผม(x1)(xยังไม่มีข้อความ+1)

    (x)=x2
    x1=-1x2=1. อัลกอริทึมจะมาบรรจบกันที่นี่
  • ตัวเลือกที่สองเกี่ยวข้องกับการประเมิน centroid ของเริม: หยุดถ้า<\นี่ถือว่าถ้าจุดต่ำสุดของซิมเพล็กซ์และเซนทรอยด์มีค่าใกล้เคียงกันซิมเพล็กซ์มีขนาดเล็กพอที่จะเรียกการบรรจบกัน|(x1)-(x)|<ε

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


1. ไม่ชัดเจนสำหรับฉันว่าทำไมคุณเปรียบเทียบสิ่งที่เกิดขึ้นที่กับx 1 ; แน่นอนคุณต้องการที่จะเปรียบเทียบกับสิ่งที่เกิดขึ้นที่x N 2. การตรวจสอบคอนเวอร์เจนซ์เป็นพื้นที่ที่มีความยุ่งยากเป็นพิเศษในการเพิ่มประสิทธิภาพจำนวนมาก คุณต้องการให้ฟังก์ชั่นนั้นไม่เปลี่ยนแปลงมากนัก แต่ถ้าข้อโต้แย้งกำลังเปลี่ยนแปลงอย่างรวดเร็ว (แม้ว่าฟังก์ชั่นนั้นจะเปลี่ยนไปไม่ได้) คุณอาจไม่ได้รวมกันดังนั้นผู้คนมักจะใช้เกณฑ์ที่ดูทั้งสองอย่าง นอกจากนี้ยังมีปัญหาว่าคุณใช้ญาติหรือเกณฑ์แบบสัมบูรณ์ (ไม่เพียงพอ - เช่นการทดสอบแบบสัมพัทธ์เมื่อคุณใกล้ถึง 0 จะไม่ถูกเรียกใช้)xN+1x1xยังไม่มีข้อความ
Glen_b

3
เกณฑ์การหยุดที่ดีที่สุดสำหรับ Nelder Mead คือก่อนที่คุณจะเริ่ม
Mark L. Stone

เพียงเพื่อหลีกเลี่ยงความสับสนในการแสดงความคิดเห็นของ @ Glen_b ... ฉันเชื่อว่าตัวห้อยที่นี่อ้างถึงจุดยอดของเริม, ไม่ใช่การวนซ้ำของอัลกอริทึม เพื่อให้เกณฑ์การบรรจบแรกที่เสนอในคำถามนี้เปรียบเทียบค่าฟังก์ชันต่ำสุดและสูงสุดของจุดยอดในพื้นที่พารามิเตอร์ -dimensional ... มันไม่ได้ระบุไว้อย่างชัดเจนในคำถาม แต่คำอธิบายของอัลกอริทึมบนหน้าวิกิพีเดียที่เชื่อมโยง ( และในกระดาษต้นฉบับ) สั่งให้จุดยอดN + 1จากค่าฟังก์ชันต่ำสุดถึงสูงสุด ยังไม่มีข้อความยังไม่มีข้อความ+1
Nate Pope

@NatePope นั่นคือความตั้งใจของฉันใช่ฉันจะเพิ่มความกระจ่างให้กับคำถาม \
JAD

คำตอบ:


6

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

ในการย่อขนาดหนึ่งมิติเป็นไปได้ที่จะกำหนดขั้นต่ำ ... อนิจจา ไม่มีขั้นตอนแบบอะนาล็อกในพื้นที่หลายมิติ ... สิ่งที่ดีที่สุดที่เราสามารถทำได้คือให้อัลกอริทึมของเราเริ่มต้นเดา นั่นคือ -vector ของตัวแปรอิสระเป็นจุดแรกที่ลอง อัลกอริทึมที่ควรแล้วที่จะทำให้ทางของตัวเองลงเขาผ่านไปไม่ได้ซับซ้อนของNภูมิประเทศมิติจนกว่าจะพบข้อ (อย่างน้อยท้องถิ่น) ขั้นต่ำNN

วิธีดาวน์ฮิลล์ซิมเพลกซ์ต้องเริ่มต้นไม่เพียงแค่มีจุดเดียว แต่ด้วยคะแนนซึ่งจะกำหนดเริมต้นเบื้องต้น [คุณสามารถใช้จุดเหล่านี้เป็นจุดเริ่มต้นเริ่มต้นP 0พร้อมกับ] P i = P 0 + λ e iโดยที่e iคือเวกเตอร์หน่วยNและโดยที่λเป็นค่าคงที่ซึ่งคุณเดาลักษณะของปัญหา ขนาดความยาว ...N+1P0

(10.4.1)Pผม=P0+λอีผม
อีผมยังไม่มีข้อความλ

ขั้นตอนส่วนใหญ่เพียง [เลื่อน] จุดของซิมเพล็กซ์ที่ฟังก์ชั่นใหญ่ที่สุด ("จุดสูงสุด") ผ่านใบหน้าตรงข้ามของเริมไปยังจุดที่ต่ำกว่า ...

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

เกณฑ์การสิ้นสุดอาจมีความละเอียดอ่อน ... โดยทั่วไปเราสามารถระบุ "รอบ" หรือ "ขั้นตอน" ของอัลกอริทึมหลายมิติของเรา จากนั้นเป็นไปได้ที่จะยุติเมื่อระยะทางของเวกเตอร์เคลื่อนที่ในขั้นตอนนั้นมีขนาดเล็กกว่าความอดทนTOLเล็กน้อย อีกวิธีหนึ่งเราอาจต้องการให้การลดลงของค่าฟังก์ชันในขั้นตอนการยุติมีขนาดเล็กกว่าความอดทนFTOLเล็กน้อย ...

ยังไม่มีข้อความยังไม่มีข้อความ+1(10.4.1)P0

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

[หน้า 290-292]

xYT>0

(1)|x|-|Y|(x,Y)=2|x|-|Y||x|+|Y|<T

(x,Y)=(|x|+|Y|)/2

(1)

การอ้างอิง

William H. Press และคณะ , สูตรตัวเลข: ศิลปะของวิทยาศาสตร์คอมพิวเตอร์ สำนักพิมพ์มหาวิทยาลัยเคมบริดจ์ (2529) เยี่ยมชมhttp://numerical.recipes/สำหรับฉบับล่าสุด


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

ฉันไม่เคยคิดมาก่อนเกี่ยวกับความหมายที่เป็นไปได้ของ "การเริ่มต้นใหม่" ในบริบทปัจจุบันฉันอาจใช้คำเช่น "การขัด" สำหรับ "การเริ่มใหม่" แต่อาจไม่ถูกต้องเช่นกัน ชนิดของ "เริ่มใหม่" ที่สนับสนุนวิธีการ simplex อาจค่อนข้างพิเศษสำหรับมัน
whuber

9

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

หัวข้อนี้จะได้รับการปฏิบัติอย่างย่อในหน้า 171 ของ "วิธีการคำนวณแบบกะทัดรัดสำหรับคอมพิวเตอร์" 2nd Ed. โดย John C. Nash และเกิดขึ้นกับการอ้างอิงที่อ้างถึงสำหรับรูทีน Nelder-Mead ที่ใช้ในoptim()ฟังก์ชันของ R การอ้างถึงส่วนที่เกี่ยวข้อง:

เสื้ออีsเสื้อ=[(Σผม=1n+1[S(ผม)-S¯]2)/n]1/2
S¯=Σผม=1n+1S(ผม)/(n+1).

S(.)n+1nHL

S(L)S(H)

ดูที่แหล่งที่มาอย่างรวดเร็วของการoptim()บ่งชี้ว่ามันใช้ความแตกต่างระหว่างค่าฟังก์ชันสูงสุดและต่ำสุด (ของคะแนนที่กำหนด simplex) เพื่อตรวจสอบการบรรจบกัน: if (VH <= VL + convtol || VL <= abstol) break;ที่ไหนVHคือค่าสูงและVLค่าต่ำ สิ่งนี้มาพร้อมกับข้อแม้ที่ฉันได้ดูแหล่งที่มาอย่างรวดเร็วมากและอาจมีบางอย่างขาดหายไป

ตอนนี้ตัวเลือกของคุณ (1) ดูเหมือนจะเป็นแนวทางที่สองที่แนชสนับสนุน เขายังกล่าวถึงปัญหาที่คุณพบ:

(n+1)(n-1)n

การอ้างอิงดั้งเดิมที่ Nash อ้างถึงที่นี่คือ:

Nelder JA, Mead R. 1965. วิธี simplex สำหรับการย่อขนาดฟังก์ชัน วารสารคอมพิวเตอร์ 7: 308-313

O'Neill R. 1971 อัลกอริทึม AS 47: การย่อขนาดฟังก์ชันโดยใช้ขั้นตอนง่าย ๆ สถิติประยุกต์ 20: 338-345


3

นาที(เสื้อ)นาทีทุกมุม (Xผม,เสื้อ)
# stop when you run out of patience, no improvement for say 10 iterations in a row:
if t > tbest + patience:
    message = "iter %d: f %g >= fbest %g" ...
    return message, fbest, xbest

n+1

  1. ปัญหา: ภูมิประเทศขรุขระอาจมีข้อ จำกัด ที่ไม่ดีหรือไร้สาระ
  2. อัลกอริธึมปรับสมดุลการสำรวจและเคลื่อนย้าย (และความซับซ้อนของซอฟต์แวร์)
  3. กฎการหยุดที่เหมาะสม

ยังคงที่จะเห็น - กรณีทดสอบจริงยินดีต้อนรับ

( Stopiterชั้นเรียนจริงมีเงื่อนไขหยุดหลายอย่างนอกจากนี้เวลาที่patienceง่ายที่สุดคือเวลานาฬิกาแขวน)

ดูเพิ่มเติมที่:
NLopt : อัลกอริทึมมากมายรวมถึง Nelder-Mead ง่ายต่อการเปรียบเทียบ ดูบันทึกย่อโดยเฉพาะอย่างยิ่งในการ เปรียบเทียบอัลกอริธึม
ดาวน์ฮิลล์ : ความอดทนหยุดด้วยmin_improvement

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