Подбор шага с помощью линейного поиска в градиентном спуске
Если нам известны характеристики сильно выпуклой функции, то мы можем выбрать оптимальный постоянный шаг 2/(μ + L),
где μ и L – наименьшее и наибольшее собственные значения гессиана функции.
Однако на практике эти параметры почти никогда не известны. Да и функции бывают невыпуклые. Приходится подбирать learning rate вручную (перебор), линейным поиком или использовать эвристики/адаптивные алгоритмы (например, AdamW, NAG-GS).
В первой части видео мы минимизируем функцию Розенброка с помощью градиентного спуска с разными постоянными шагами, отличающимися всего в 2 раза. Разница в поведении методов – колоссальная!
Во второй части видео демонстрируются работа методов линейного поиска для решения этой задачи:
📝 Метод золотого сечения - прекрасный вариант для выпуклых функций, но если функция не унимодальна, то я не знаю гарантий сходимости для него.
📝 Неточный поиск с условиями Вульфа позволяет подобрать шаг так, чтобы он гарантировал "достаточное" убывание функции, исключая при этом слишком маленькие шаги.
Такие стратегии чаще приводят к меньшим значениям функции за фиксированное число итераций. На каждой итерации эти методы требуют больше вычислений, чем градиентный спуск с постоянным шагом, но часто могут экономить время за счет меньшего числа итераций.
Post #28
7.25K