Критерій зупинки для Nelder Mead


11

Я намагаюся реалізувати алгоритм Nelder-Mead для оптимізації функції. Сторінка вікіпедії про Нелдера-Мід напрочуд чітка щодо всього алгоритму, за винятком критерію його зупинки. Там це сумно говорить:

Перевірте на конвергенцію [потрібне уточнення] .

Я сам випробував кілька критеріїв:

  • Зупиніться, якщо де малий і де - -та вершина симплекса, впорядкована від низької ( ) до високої ( ) значення функцій. Іншими словами, коли максимальне значення симплексу майже дорівнює мінімальному значенню. Я виявив, що це не працює належним чином, оскільки це не дає гарантій того, що функція виконує всередині симплекса. Приклад, розглянемо функцію: Це, звичайно, тривіально для оптимізації, але скажімо, що ми робимо це з NM, і нехай наші дві симплексні точки будуть іϵ x i i f ( x 1 ) f ( x N + 1 ) f ( x ) = x 2f(xN+1)f(x1)<ϵϵxiif(x1)f(xN+1)

    f(x)=x2
    х 2 = 1x1=1x2=1. Алгоритм сходився б тут, не знаходячи свого оптимального.
  • Другий варіант включає оцінку центроїда симплекса: стоп, якщо . Це передбачає, що якщо найнижча точка симплекса і центроїда мають такі подібні значення, симплекс є досить малим, щоб викликати конвергенцію.|f(x1)f(xc)|<ϵ

Це правильний спосіб перевірити конвергенцію? Або існує усталений спосіб перевірити це? Я не міг знайти жодних джерел з цього приводу, оскільки більшість пошукових запитів фокусуються на складності алгоритму.


1. Мені не зрозуміло, чому ти порівнюєш те, що відбувається в з ; звичайно, ви хочете порівняти це з тим, що відбувається на . 2. Перевірки конвергенції є особливо складним напрямком у багатьох оптимізаціях; вам потрібно, щоб функція мало змінювалася, але якщо аргументи швидко змінюються (навіть якщо функція ледь змінюється), ви, можливо, не сходилися, тому люди часто використовують критерії, які дивляться на обидва. Існує також питання, чи використовуєте ви відносний чи абсолютний критерій (цього недостатньо - наприклад, відносний тест, коли ви дуже близький до 0, не буде спрацьовувати) x 1 x NxN+1x1xN
Glen_b -Встановіть Моніку

3
Найкращий критерій зупинки для Nelder Mead - перед початком роботи.
Марк Л. Стоун

Просто щоб уникнути плутанини wrt notation у коментарі @ Glen_b ... Я вважаю, що тут підписники стосуються вершин симплексу, а не ітерації алгоритму. Так що перший критерій конвергенції, запропонований у цьому питанні, порівнює найнижчі та найвищі значення функцій вершин у розмірному просторі параметрів ... це не вказано в питанні, а опис алгоритму на пов'язаній сторінці вікіпедії ( та в оригінальному папері) упорядкуйте вершини від найнижчого значення функції до найвищого. N + 1NN+1
Нейт Папа

@NatePope Це був мій намір так, я додам роз'яснення до питання. \
JAD

Відповіді:


6

Облік цього "алгоритму простого спуску" в оригінальних версіях Numerical Recipes є особливо зрозумілим і корисним. Тому я цитую відповідні його частини. Ось передумови:

При одновимірному мінімізації можна було думати мінімум .... На жаль! Не існує аналогічної процедури у багатовимірному просторі. ... Найкраще, що ми можемо зробити, - це дати нашому алгоритму вихідну здогадку; тобто вектор незалежних змінних як перша точка спробу. Потім алгоритм повинен зробити свій шлях під гору через немислиму складність мірної топографії, поки вона не зустріне (принаймні локального) мінімуму.NNN

Метод симплексу для спуску потрібно починати не просто з однієї точки, а з балів, визначаючи початковий симплекс. [Ви можете вважати, що ці точки є початковою початковою точкою разом із] де - одиничних векторів і де - константа, яка є вашою здогадкою характерної шкали довжини задачі. ...P 0 P i = P 0 + λ e i e i N λN+1P0

(10.4.1)Pi=P0+λei
eiNλ

Більшість кроків просто [переміщують] точку симплексу, де функція найбільша ("найвища точка") через протилежну грань симплекса до нижньої точки. ...

Тепер про проблему під рукою, припинення роботи алгоритму. Зауважте загальність облікового запису: автори надають інтуїтивно зрозумілу та корисну пораду щодо припинення будь-якого багатовимірного оптимізатора, а потім конкретно показують, як він застосовується до цього конкретного алгоритму. Перший абзац відповідає на запитання перед нами:

Критерії припинення можуть бути делікатними .... Зазвичай ми можемо визначити один "цикл" або "крок" нашого багатовимірного алгоритму. Тоді можна припинити, коли векторна відстань, переміщена на цьому кроці, дрібно менша за величиною, ніж деяка допуск TOL. Альтернативно, ми могли б вимагати, щоб зменшення значення функції на етапі завершення було частково меншим, ніж деякий допуск FTOL. ...

Зауважте, що будь-який із зазначених вище критеріїв може бути обдурений одним аномальним кроком, який з тих чи інших причин нікуди не зміг дістатися. Тому часто рекомендується перезапустити багатовимірну процедуру мінімізації в той момент, коли вона стверджує, що знайшла мінімум. Для цього перезапуску слід повторно ініціалізувати будь-які допоміжні величини введення. В гору симплекс - методу, наприклад, ви повинні повторно ініціалізувати з вершин симплекса знову рівнянням , з є однією з вершин заявленого мінімуму.N + 1 ( 10.4.1 ) P 0NN+1(10.4.1)P0

Рестарти ніколи не повинні бути дуже дорогими; зрештою, ваш алгоритм перейшов до точки перезапуску, і тепер ви вже запускаєте алгоритм.

[Сторінки 290-292.]

Код, що супроводжує цей текст у " Числових рецептах", пояснює значення "частково менших": різниця між значеннями і (або значення аргументу, або значення функції) "частково менша", ніж поріг колиxyT>0

(1)|x||y|f(x,y)=2|x||y||x|+|y|<T

з .f(x,y)=(|x|+|y|)/2

Ліва частина іноді відома як "відносна абсолютна різниця". У деяких полях це виражається у відсотках, де його називають "відносною процентною помилкою". Дивіться статтю Вікіпедії про відносні зміни та різниці для отримання додаткових варіантів та термінології.(1)

Довідково

Вільям Х. Прес та ін. , Числові рецепти: Мистецтво наукових обчислень. Cambridge University Press (1986). Завітайте на http://numerical.recipes/ для останніх видань.


1
Дякуємо за розуміння щодо перезавантаження. Я подумав, що це лише запуск алгоритму з різних вихідних точок, але насправді, здається, до цього більше.
JAD

Я раніше не думав про можливі значення "перезавантаження". У теперішньому контексті я міг би використати такий термін, як "полірування" для "перезавантаження", але, можливо, це теж не зовсім правильно. Вид «перезапуску», який застосовується для симплексного методу, може бути для нього досить особливим.
whuber

9

Не повна відповідь, але занадто довго для коментарів і може поставити вас на правильний шлях.

Ця тема коротко розглядається на сторінці 171 «Компактні чисельні методи для комп’ютерів», 2-е видання, Джон К. Неш. І трапляється це посилання, яке цитується для рутини Nelder-Mead, реалізованої у optim()функції R. Цитуючи відповідну частину:

Таким чином, слід вирішити найсміливіше питання щодо алгоритмів мінімізації: коли було встановлено мінімум? Нельдер і Мід пропонують "стандартну помилку" значень функції: Де

test=[(i=1n+1[S(bi)S¯]2)/n]1/2
S¯=i=1n+1S(bi)/(n+1).

Я перерву, щоб уточнити, що - функція, що мінімізується, - балів, які визначають розмірний симплекс; точка з найвищим значенням функції - а точка з найнижчим значенням функції - . Наш продовжує:S(.)bn+1nbHbL

Процедура вважається збіжною, коли значення тесту опускається нижче заздалегідь заданого допуску. У статистичних додатках, які зацікавили Нелдера та Міда, такий підхід є розумним. Однак автор встановив, що цей критерій може спричинити передчасне припинення процедури при проблемах із досить плоскими ділянками на функціональній поверхні. У статистичному контексті можна було б зупинитись, якщо зустрічалася така подібна область, але, припускаючи мінімум, шукається, здається, логічним є використання більш простого тесту на рівність між та , тобто тест на рівну висоту всіх точок у симплекса.S ( b H )S(bL)S(bH)

Швидкий огляд джерела optim()вказує на те, що він використовує різницю між найвищим і найнижчим значенням функції (точок, що визначають симплекс) для визначення конвергенції: if (VH <= VL + convtol || VL <= abstol) break;Де VHвисоке і VLнизьке значення. Це стосується застереження, що я дуже швидко подивився на джерело, і, певно, чогось не вистачає.

Тепер ваш варіант (1) представляється другим підходом, який обстоює Неш. Він також обговорює проблему, з якою ви стикалися:

Нарешті, все ж можливо сходитись у точці, яка не є мінімальним. Наприклад, якщо точки симплексу знаходяться в одній площині (яка є лінією у двох вимірах), симплекс може рухатись лише в напрямках у -вимірному просторі і може не в змозі перейти до мінімального. O'Neill (1971), реалізуючи FORTRAN ідеї Нелдера-Міда, тестує значення функції по будь-якій стороні від передбачуваного мінімуму вздовж кожної з осей параметрів. Якщо будь-яке значення функції виявилося нижчим від поточного передбачуваного мінімуму, процедура повторно запускається.( n - 1 ) n(n+1)(n1)n

Оригінальні посилання, на які тут посилається Наш,:

Nelder JA, Mead R. 1965. Симплексний метод мінімізації функцій. Комп'ютерний журнал 7: 308-313.

O'Neill R. 1971. Алгоритм AS 47: мінімізація функцій за допомогою симплексної процедури. Прикладна статистика 20: 338-345.


3

Солом’яний чоловік: відслідковуйте лише найнижчий кут з правилом зупинки "терпіння" :

fmin(t)minall corners f(Xi,t)
# 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

Моніторинг усіх кутів, безумовно, корисний для перевірки наявності розумного масштабування координат, обмежень, початкового симплексу NM. Якщо відстеження всіх кутів може покращити комбінаціюn+1

  1. проблема: пересічена місцевість, можливо, із поганим масштабуванням чи нерозумними обмеженнями
  2. алгоритм, балансування дослідження та переміщення (та складність програмного забезпечення)
  3. власне правило зупинки

залишається побачити - справжні тестові справи вітаються.

(У справжнього Stopiterкласу є також багато умов зупинки patience; найпростіший - настінний годинник.)

Дивіться також:
NLopt : багато алгоритмів, включаючи Nelder-Mead, легко порівняти. Особливо дивіться примітки щодо порівняння алгоритмів
вниз : терпіння зупиняєтьсяmin_improvement

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.