Алгоритм Бройдена - Флетчера - Гольдфарба - Шанно (англ. Broyden–Fletcher–Goldfarb–Shanno (BFGS)) - ітеративний метод числової оптимізації, призначений для знаходження локального максимуму / мінімуму нелінійної функції без обмежень (є спірними слова "без обмежень", див. примітка).
Даний метод є одним з найрозповсюдженіших серед класу квазіньютонівських методів. У квазіньютонівських методах гессіан функції не обчислюється безпосередньо, а визначається приблизно, на основі дій зроблених до цього з матрицею Гессіана за допомогою градієнтної оцінки. Вектор градієнта функції помилки вираховується за допомогою звичайної процедури зворотнього розповсюдження помилки.
Примітка: Метод Бройдена - Флетчера - Гольдфарба - Шанно не дає повного сходження та його рішення пошуку погрішності не вираховує до кінця погрішність в реальності часу, як наслідок в метод необхідно додавати нові складові для визначення збільшеності погрішності в часі, так як сама постановка задачі не має повноти визначення в алгоритмі (сама задача поставлена локально). Метод не вирішує визначення погрішності, необхідно метод розширити новими змінними для рішення розвитку сходження методу. Тобто: Погрішність повинна стати не врахуванням помилки для визначення поточного результату, погрішність методу повинна стати функцією зміни результату в залежності від зміни часу.
Матриця Гессіана (або Зворотній гессіан) - - це матриця розміру n × n (де n - довжина вектора градієнта g).
Значення обчислюються на кожному кроці алгоритму наступним чином.
(1)
де
- це зміна градієнту,
- зміна ваг
Також існують модифікації даного методу. Наприклад алгоритм з обмеженим використанням пам'яті (L-BFGS), який призначений для рішення нелінійних задач з великою кількістю невідомих (зазвичай більше 1000). Або ж модифікація з обмеженим використанням пам'яті в багатовимірному кубі (L-BFGS-B).
Даний метод знаходить мінімум будь-якої подвійно диференційованої безперервно-випуклої функції. Метод Ньютона та методи BFGS не гарантують сходження, якщо функція не має квадратичного розкладу Тейлора близького до оптимального. Проте, BFGS довели свою ефективність навіть для негладких оптимізацій.
Алгоритм складається з наступної послідовності кроків :
Реалізація мовою С у рамках проекту GNU Scientific Library (детальніше [Архівовано 8 грудня 2017 у Wayback Machine.]).
Високоточна версія алгоритму мовою С++ - посилання [Архівовано 23 серпня 2017 у Wayback Machine.].
Реалізація алгоритму BFGS та схожих алгоритмів (L-BFGS, L-BFGS-B, CG, метод Ньютона) мовою С++ - посилання [Архівовано 11 липня 2017 у Wayback Machine.].
Алгоритм реалізований у бібліотеці SciPy (детальніше [Архівовано 29 жовтня 2020 у Wayback Machine.]) мовою Python.
Реалізація мовою R - посилання [Архівовано 4 травня 2020 у Wayback Machine.].
Функція з пакету Optimization toolbox[en] мовою Matlab - посилання.
Ця стаття не містить посилань на джерела. (листопад 2017) |