Алгоритм Бройдена — Флетчера — Гольдфарба — Шанно

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Алгоритм Бройдена - Флетчера - Гольдфарба - Шанно (англ. Broyden–Fletcher–Goldfarb–Shanno (BFGS)) - ітеративний метод числової оптимізації, призначений для знаходження локального максимуму / мінімуму нелінійної функції без обмежень (є спірними слова "без обмежень", див. примітка).

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

Примітка: Метод Бройдена - Флетчера - Гольдфарба - Шанно не дає повного сходження та його рішення пошуку погрішності не вираховує до кінця погрішність в реальності часу, як наслідок в метод необхідно додавати нові складові для визначення збільшеності погрішності в часі, так як сама постановка задачі не має повноти визначення в алгоритмі (сама задача поставлена локально). Метод не вирішує визначення погрішності, необхідно метод розширити новими змінними для рішення розвитку сходження методу. Тобто: Погрішність повинна стати не врахуванням помилки для визначення поточного результату, погрішність методу повинна стати функцією зміни результату в залежності від зміни часу.

Детальна інформація[ред. | ред. код]

Матриця Гессіана (або Зворотній гессіан) - - це матриця розміру n × n (де n - довжина вектора градієнта g).

Значення обчислюються на кожному кроці алгоритму наступним чином.

(1)

де

- це зміна градієнту,

- зміна ваг

Також існують модифікації даного методу. Наприклад алгоритм з обмеженим використанням пам'яті (L-BFGS), який призначений для рішення нелінійних задач з великою кількістю невідомих (зазвичай більше 1000). Або ж модифікація з обмеженим використанням пам'яті в багатовимірному кубі (L-BFGS-B).

Даний метод знаходить мінімум будь-якої подвійно диференційованої безперервно-випуклої функції. Метод Ньютона та методи BFGS не гарантують сходження, якщо функція не має квадратичного розкладу Тейлора близького до оптимального. Проте, BFGS довели свою ефективність навіть для негладких оптимізацій.

Алгоритм методу[ред. | ред. код]

Алгоритм складається з наступної послідовності кроків :

  1. Ініціалізуємо вагові коефіцієнти (випадковими малими значеннями) і встановимо початкове значення наближення зворотнього гессіана.
  2. Обчислимо значення градієнту g.
  3. Виконаємо корекцію значень вагових коефіцієнтів (; ; де - параметр швидкості навчання)
  4. Зберігаємо старе значення градієнту () та обчислюємо нове значення () і зміну градієнту ().
  5. Обчислимо значення зворотнього гессіана за формулою 1.
  6. Обчислимо зміну вагових коефіцієнтів () і виконаємо корекцію параметрів ()
  7. Обчислимо похибку ()
  8. Якщо отримане значення похибки менше, ніж задана точність (), то алгоритм зупиняється.
  9. Якщо точність не досягнута, то повторюємо алгоритм з 4 кроку.

Програмна реалізація[ред. | ред. код]

Реалізація мовою С у рамках проекту 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 - посилання.

Посилання[ред. | ред. код]