Градиент — ваш навигатор в мире функций#

Мы уже знаем, как с помощью производной \(f'(x)\) найти «мгновенную скорость» функции одной переменной. Это наш спидометр на прямой дороге.

Но мир редко бывает одномерным. Представьте, что вы стоите на склоне горы. Ваша высота зависит уже от двух координат: от того, насколько вы продвинулись на север (ось Y) и на восток (ось X). Ваша высота — это функция \(f(x, y)\).

Здесь возникает новый, более сложный вопрос: в каком направлении нужно сделать шаг, чтобы подъём был самым крутым, и какова эта крутизна?

Фокус с «замораживанием» осей#

Чтобы ответить на этот вопрос, нам понадобится новый инструмент. Идея проста: давайте на время «заморозим» одно из направлений и посмотрим, что происходит с другим.

  1. Движение только вдоль оси X: Представьте, что вы решили двигаться строго на восток (вдоль оси X), не меняя своей координаты по оси Y. Как будет меняться высота? Чтобы это узнать, нам нужна производная функции \(f(x, y)\), но только по переменной \(x\). Это называется частная производная по x и обозначается \(\frac{\partial f}{\partial x}\).

    Частная производная \(\frac{\partial f}{\partial x}\) — это та же производная, но мы считаем её, делая вид, что все остальные переменные (в нашем случае \(y\)) — это просто числа (константы). Она показывает «скорость роста» функции строго в направлении оси X.

  2. Движение только вдоль оси Y: Теперь сделаем наоборот. Замрём на месте по оси X и сделаем шаг строго на север (вдоль оси Y). Скорость изменения высоты в этом направлении нам покажет частная производная по y\(\frac{\partial f}{\partial y}\).

Итак, у нас есть две «скорости»: одна в направлении X, другая в направлении Y. Как их объединить, чтобы найти самое крутое направление?

Собираем наш «умный компас»#

Градиент и есть тот самый инструмент, который объединяет эти частные производные в единое целое.

Градиент — это вектор (то есть направленный отрезок или «стрелка»), составленный из всех частных производных функции. Для функции двух переменных \(f(x, y)\) он выглядит так:

\[ \nabla f = \left( \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y} \right) \]

Читается это как «градиент эф» или «набла эф».

Если функция — это ландшафт вашей горы, то градиент — это вектор-компас, который в каждой точке указывает направление самого быстрого роста функции.

  • Направление вектора \(\nabla f\) — это и есть ответ на вопрос «куда идти?». Это направление самого крутого подъёма.

  • Длина (модуль) вектора \(\|\nabla f\|\) — это ответ на вопрос «насколько круто?». Она показывает скорость роста в этом самом крутом направлении.

Что градиент показывает на карте?#

Представьте карту высот с линиями уровня — линиями, соединяющими точки с одинаковой высотой.

Градиент в любой точке всегда перпендикулярен (направлен под углом 90°) к линии уровня, проходящей через эту точку.

Это логично: если вы стоите на тропинке, идущей траверсом по склону (линия уровня), то самый быстрый способ подняться — это пойти не вдоль тропы, а прямо «в лоб», перпендикулярно ей.

А если мы хотим спуститься как можно быстрее (например, как вода, стекающая с горы)? Нужно двигаться в направлении, прямо противоположном градиенту. Это направление называется антиградиентом и обозначается -∇f.

Градиентный спуск в машинном обучении#

Давайте разберем, как работает градиентный спуск на примере задачи предсказания оценок студентов. Если вы не знакомы с такими понятиями как: Линейная регрессия, функция потерь, оптимизация функции потерь, то ничего страшного, в следующих уроках мы подробно все это разберем, а сейчас главное увидеть и понять, что же все таки такое градиент и как он ведет себя.

Постановка задачи#

У нас есть данные о студентах:

  • GPA (средний балл) - признак \(x_1\)

  • Credits (количество кредитов) - признак \(x_2\)

  • Part-time Job (подработка: 0 или 1) - признак \(x_3\)

  • Grade (итоговая оценка) - целевая переменная \(y\)

Нужно построить модель линейной регресси для предсказания оценки: \(\hat{y} = \beta_1 + \beta_2 x_1 + \beta_3 x_2 + \beta_4 x_3\)

Функция потерь#

Используем Mean Squared Error (MSE):

\[\epsilon(\hat{y}, y) = \frac{1}{n} \sum_{i=1}^{n} (\hat{y}_i - y_i)^2\]

Градиентный спуск в действии#

  1. Находим частные производные функции потерь:

    • \(\frac{\partial \epsilon}{\partial \beta_1}\): Производная по свободному члену

    • \(\frac{\partial \epsilon}{\partial \beta_2}\): Производная по весу для GPA

    • \(\frac{\partial \epsilon}{\partial \beta_3}\): Производная по весу для Credits

    • \(\frac{\partial \epsilon}{\partial \beta_4}\): Производная по весу для Part-time Job

  2. Записываем вектор градиента:

    \[\nabla \epsilon = \left(\frac{\partial \epsilon}{\partial \beta_1}, \frac{\partial \epsilon}{\partial \beta_2}, \frac{\partial \epsilon}{\partial \beta_3}, \frac{\partial \epsilon}{\partial \beta_4}\right)\]
  3. Обновляем параметры:

    \[\beta_i = \beta_i - \alpha \cdot \frac{\partial \epsilon}{\partial \beta_i}\]

    где \(\alpha\) - скорость обучения (learning rate)

Что происходит в анимации#

  1. Инициализация: параметры \(\beta_1, \beta_2, \beta_3, \beta_4\) получают случайные значения

  2. Вычисление градиента: в текущей точке вычисляется направление самого крутого подъема функции потерь

  3. Шаг в противоположном направлении: параметры обновляются так, чтобы «спуститься» по поверхности функции потерь

  4. Итерации: процесс повторяется, шаги становятся все меньше по мере приближения к минимуму

Визуальная интерпретация#

Представьте, что вы стоите на холмистой поверхности, где:

  • Высота - это значение функции потерь

  • Координаты - это значения параметров \(\beta_1, \beta_2, \beta_3, \beta_4\)

  • Градиент - это направление самого крутого подъема

  • Градиентный спуск - это движение в противоположном направлении к дну долины

В анимации красная кривая показывает «ландшафт» функции потерь, а зеленая точка движется по этому ландшафту, постепенно находя оптимальные значения параметров модели.

Итак, главное, что нужно запомнить:

  1. Градиент — это вектор, указывающий направление и скорость самого быстрого роста функции.

  2. Он состоит из частных производных (\(\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}, \dots\)), которые показывают «скорость» вдоль каждой оси.

  3. На карте градиент всегда перпендикулярен линиям уровня.

  4. Антиградиент (-∇f) указывает направление самого быстрого спуска.