Градієнтний спуск
Оновлено на September 03, 2024 3 хвилини читають
 
 Вступ
Уявіть, що у нас є функція $f(x)$ і ми хочемо знайти її мінімум. Що б ти зробив ?
Просто так? Нам потрібно лише розв’язати таке рівняння:
$$f’(x) = 0$$
Справа в тому, що знайти формулу $f’$ не завжди легко, оскільки вони, як правило, надзвичайно складні, особливо в глибокому навчанні, де ми маємо справу зі складними функціями. Отже, нам потрібно знайти інший метод, який може надати нам мінімум функції без необхідності знаходити формулу похідної $f’$.
Давайте розвинемо інтуїцію
Припустимо, що у нас є функція f з відповідним графіком:
Почнемо з випадкової точки $x_{0}$. Мета полягає в тому, щоб перемістити цю точку та наблизити її до $x*$ так, щоб $f’($x*$) = 0$. Тому проблему можна розділити на дві частини:
- 
У якому напрямку потрібно перемістити точку $x$ ? Вліво чи вправо? 
- 
На скільки ми повинні його перемістити? 
Напрямок
Давайте розвинемо трохи інтуїції, щоб відповісти на перше запитання. Зверніть увагу на наступний пункт:
Зауважте, що:
- 
коли точка $x_{0}$ знаходиться праворуч від оптимальної точки $x*$, її дотична лінія йде вгору. 
- 
коли точка $x_{0}$ знаходиться праворуч від оптимальної точки $x*$, її дотична лінія йде вниз. 
Напрям прямої визначається знаком її нахилу:
- 
Лінія йде вгору $\implies$ нахил $a$ позитивний. 
- 
Лінія йде вниз $\implies$ нахил $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 $. XXX 
- 
Як ми вибираємо $x_{0}$: 
- 
Ми вибираємо випадково. XXX 
- 
Ми беремо його в районі $x{n}$. 
— Це залежить від проблеми.
- Навіщо нам градієнтний спуск:
– Тому що комп’ютери недостатньо потужні, щоб обчислювати похідні.
– Тому що надзвичайно важко знайти формули похідних моделей глибокого навчання. XXX
- Оскільки функції мають більше одного локального мінімуму.
