Участник:Margarita/Градиентный спуск: различия между версиями
Margarita (обсуждение | вклад) |
Margarita (обсуждение | вклад) Нет описания правки |
||
| Строка 1: | Строка 1: | ||
автор: [[Участник:Margarita|М.В.Зайцева]] | |||
== Постановка задачи == | == Постановка задачи == | ||
Рассмотрим задачу поиска минимума функции <math>f(x)\colon \mathbb{R}^n \to \mathbb{R}</math> | Рассмотрим задачу поиска минимума функции <math>f(x)\colon \mathbb{R}^n \to \mathbb{R}</math> | ||
Версия от 17:49, 4 ноября 2017
автор: М.В.Зайцева
Постановка задачи
Рассмотрим задачу поиска минимума функции [math]\displaystyle{ f(x)\colon \mathbb{R}^n \to \mathbb{R} }[/math]
- [math]\displaystyle{ \begin{align} f(x) \rightarrow \min_{x \in \mathbb{R}^n} \end{align} }[/math]
Будем считать, что у функции [math]\displaystyle{ f(x) }[/math] существуют частные производные.
Если в задаче требуется найти максимум, вместо [math]\displaystyle{ f(x) }[/math] следует брать [math]\displaystyle{ -f(x) }[/math].
Общее описание алгоритма
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.
Математическое описание алгоритма
Основная идея [1] метода состоит в том, чтобы идти в направлении антиградиента [math]\displaystyle{ -\nabla f }[/math] (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:
- [math]\displaystyle{ \begin{align} x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}), \end{align} }[/math]
где [math]\displaystyle{ \alpha_{k} }[/math] выбирается по одному из следующих правил:
- постоянной, в таком случае метод может не сходиться;
- дробным шагом, то есть во время итерации длина шага делится на некоторое число;
- наискорейшим спуском[2], где [math]\displaystyle{ \alpha_{k} = \operatorname{arg}\min_{\alpha} f(x_{k} - \alpha\nabla f(x_{k})) }[/math].
Вычислительное ядро алгоритма
Макроструктура алгоритма
Схема реализации последовательного алгоритма
Алгоритм:
- Выбираем начальную точку [math]\displaystyle{ x_{0}, \varepsilon }[/math].
- Вычисляем [math]\displaystyle{ x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}) }[/math], где [math]\displaystyle{ \alpha_{k} }[/math] выбирается одним из описанных выше способом.
- Если выполнено условие останова, то возвращаем [math]\displaystyle{ x_{k+1} }[/math], иначе переходим к шагу 2.
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:
- [math]\displaystyle{ \| x_{k+1} - x_{k} \| \lt \varepsilon }[/math];
- [math]\displaystyle{ \| f(x_{k+1}) - f(x_{k}) \| \lt \varepsilon }[/math];
- [math]\displaystyle{ \| \nabla f(x_{k+1}) \| \lt \varepsilon }[/math];