Градієнтний спуск

глибоке навчання
математика
градієнтний спуск
Градієнтний спуск cover image

Вступ

Уявіть, що у нас є функція $f(x)$ і ми хочемо знайти її мінімум. Що б ти зробив ?

Просто так? Нам потрібно лише розв’язати таке рівняння:

$$f'(x) = 0$$

Справа в тому, що знайти формулу $f'$ не завжди легко, оскільки вони, як правило, надзвичайно складні, особливо в глибокому навчанні, де ми маємо справу зі складними функціями. Отже, нам потрібно знайти інший метод, який може надати нам мінімум функції без необхідності знаходити формулу похідної $f'$.

Давайте розвинемо інтуїцію

Припустимо, що у нас є функція f з відповідним графіком:

Graph 1

Почнемо з випадкової точки $x_{0}$. Мета полягає в тому, щоб перемістити цю точку та наблизити її до $x*$ так, щоб $f'($x*$) = 0$. Тому проблему можна розділити на дві частини:

  • У якому напрямку потрібно перемістити точку $x$ ? Вліво чи вправо?

  • На скільки ми повинні його перемістити?

Напрямок

Давайте розвинемо трохи інтуїції, щоб відповісти на перше запитання. Зверніть увагу на наступний пункт:

Graph 2

Graph 3

Зауважте, що:

  • коли точка $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}$?

Подивіться на наступні приклади:

Graph 4

Graph 5

Ми можемо зробити висновок, що:

  • $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

  • Оскільки функції мають більше одного локального мінімуму.

Career Services background pattern

Кар'єрні послуги

Contact Section background image

Давайте залишатися на зв'язку

Code Labs Academy © 2024 Всі права захищені.