Введение
Представьте, что у нас есть функция $f(x)$ и мы хотим найти ее минимум. Что бы вы сделали ?
Просто, правда? Нам нужно всего лишь решить следующее уравнение:
$$f'(x) = 0$$
Дело в том, что найти формулу $f'$ не всегда легко, поскольку они, как правило, чрезвычайно сложны, особенно при глубоком обучении, где мы имеем дело со сложными функциями. Поэтому нам нужно найти другой метод, который сможет предоставить нам минимум функции без необходимости нахождения формулы производной $f'$.
Давайте потренируем интуицию
Предположим, что у нас есть функция f с соответствующим графиком:
Начнем со случайной точки $x_{0}$. Цель состоит в том, чтобы переместить эту точку и сделать ее все ближе и ближе к $x*$ так, чтобы $f'($x*$) = 0$. Итак, проблему можно разделить на две части:
-
В каком направлении нам следует переместить точку $x$ ? Влево или вправо ?
-
Насколько нам следует его переместить?
Направление
Давайте проявим интуицию, чтобы ответить на первый вопрос. Обратите внимание на следующий момент:
Обратите внимание, что:
-
когда точка $x_{0}$ находится справа от оптимальной точки $x*$, ее касательная направлена вверх.
-
когда точка $x_{0}$ находится справа от оптимальной точки $x*$, ее касательная идет вниз.
Направление линии определяется знаком ее наклона:
-
Линия идет вверх, $\подразумевает$, что наклон $a$ положителен.
-
Линия идет вниз, $\подразумевает$, что наклон $a$ отрицательный.
Обратите внимание: \
Наклон касательной функции в некоторой точке $x_{0}$ не больше, чем производная в этой точке $f'(x_{0})$:
$$ tangent(x*{0}): g(x) = f'(x*{0}).(x-x*{0}) + f(x*{0}) $$
Итак, ответ на вопрос "Куда нам переместить $x_{0}$?":
-
$f'(x_{0}) < 0$ $\implies$ $x_{0}$ справа от $x*$ $\implies$ Нам нужно переместить $x_{0}$ влево.
-
$f'(x_{0}) > 0$ $\implies$ $x_{0}$ слева от $x*$ $\implies$ Нам нужно переместить $x_{0}$ вправо.
Шаги
Теперь второй вопрос: На сколько нам следует переместить $x_{0}$ ?
Взгляните на следующие примеры:
Мы можем сделать вывод, что:
-
$x_{0}$ близок к $x*$ => Наклон касательной мал => $f'(x_{0})$ мал.
-
$x_{0}$ находится далеко от $x*$ => Наклон касательной большой => $f'(x_{0})$ большой.
Ответив на оба вопроса, мы пришли к выводу, что только знание производной в точке $x_{0}$ может дать нам много информации о направлении и расстоянии до оптимальной точки $x_{0}$.
Градиентный спуск
Градиентный спуск — это формулировка ответов на два предыдущих вопроса. Это итерационный алгоритм оптимизации, который приближает минимум $x*$ функции, начиная со случайной начальной точки $x_{0}$. Алгоритм сформулирован следующим образом:
$$ x*{n+1} = x*{n} - lr \times \frac{\mathrm{d} f}{\mathrm{d} x_{n}} $$
где:
-
$ \frac{\mathrm{d} f}{\mathrm{d} x*{n}} $ не более чем производная от $f$ в точке $x*{n}$.
-
$lr$ — положительная константа, определяющая размер шагов.
Заметить, что:
-
$x_{n}$ находится справа от $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} > 0 $ => $ x_{n+ 1} = x_{n} - положительный $ => $x_{n}$ перемещается влево.
-
$x_{n}$ находится слева от $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} < 0$ => $ x*{n +1} = x*{n} + положительный $ => $x_{n}$ перемещается вправо.
-
$x_{n}$ близко к $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}}$ близко к $0$ => Небольшое обновление $x_{ n}$.
Викторина
-
Когда градиентный спуск прекращает итерацию:
-
Когда $x_{n}$ достаточно мал.
-
Когда $x_{n}$ близок к $x_{0}$ .
-
Когда $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} = 0 $. ХХХ
-
Как мы выбираем $x_{0}$:
-
Мы выбираем его случайно. ХХХ
-
Возьмем его в окрестности $x{n}$.
-
Это зависит от проблемы.
-
Зачем нужен градиентный спуск:
-
Потому что компьютеры недостаточно мощны, чтобы рассчитывать производные.
— Потому что найти производные формулы моделей глубокого обучения крайне сложно. ХХХ
— Потому что функции имеют более одного локального минимума.