Математический анализ
Градиент и направленная производная
Градиентный спуск обучает GPT-4 за тысячи часов на тысячах GPU. Каждый шаг - движение против вектора $\nabla L$. Без понимания градиента невозможно объяснить, почему Adam работает лучше SGD, почему batch normalization стабилизирует обучение, и почему vanishing gradient убивает глубокие сети.
- Оптимизация весов нейронных сетей: $w \leftarrow w - \alpha \nabla_w L$
- Навигация дрона: градиент давления воздуха указывает направление подъёма
- Компьютерная графика: нормаль к поверхности $\nabla f / |\nabla f|$ для расчёта освещения
- Медицина: МРТ-томография использует градиентные поля для пространственной кодировки
- Экономика: направление наискорейшего роста прибыли в пространстве параметров
Цели урока
- Вычислять градиент функции и интерпретировать его как вектор наискорейшего возрастания
- Находить производную по направлению через скалярное произведение с единичным вектором
- Анализировать сходимость градиентного спуска через условие Липшица и скорость $O(1/k)$
Предварительные знания
- Частные производные функции нескольких переменных
- Скалярное произведение векторов и угол между ними
- Понятие нормы вектора
Градиент: вектор из частных производных
Градиент $\nabla f = \left(\frac{\partial f}{\partial x_1}, \ldots, \frac{\partial f}{\partial x_n}\right)$ указывает направление наискорейшего возрастания $f$. Его длина $|\nabla f|$ - скорость роста в этом направлении. Перпендикулярно $\nabla f$ функция не меняется - это направление вдоль линии уровня.
Производная по направлению
Производная $f$ по направлению единичного вектора $\mathbf{v}$: $D_{\mathbf{v}} f = \nabla f \cdot \mathbf{v} = |\nabla f|\cos\theta$. Максимум при $\mathbf{v} = \nabla f / |\nabla f|$, нулевая при $\theta = \pi/2$ - вдоль линии уровня.
Сходимость градиентного спуска
При $L$-гладкой функции шаг $\alpha = 1/L$ гарантирует убывание потерь. Скорость сходимости $O(1/k)$ для выпуклых функций: $f(x_k) - f^* \leq \frac{L \|x_0 - x^*\|^2}{2k}$.
Стохастический SGD использует оценку $\nabla f$ по мини-батчу. Для сходимости нужны убывающие шаги $\alpha_k$ с $\sum \alpha_k = \infty$, $\sum \alpha_k^2 < \infty$ (условие Роббинса-Монро).
Градиент как вектор частных производных
Оптимизатор Adam в GPT-4 обновляет 175 миллиардов параметров θ на каждом шаге обучения. Направление обновления определяется градиентом ∇L(θ) - вектором из всех частных производных функции потерь. В пространстве параметров размерности 175B градиент показывает, в каком направлении L растёт быстрее всего. Движение против градиента - gradient descent - основа всего современного глубокого обучения.
Градиент перпендикулярен линиям уровня - фундаментальное свойство. В нейросети loss surface задаётся в пространстве весов, и градиент в каждой точке показывает, в каком направлении функция потерь возрастает быстрее всего. Поэтому обновление весов по −∇L гарантирует локальное убывание потерь.
Функция f(x, y) = 3x² + y². В точке (2, 1) вычислите градиент и его длину.
Градиент указывает направление наибольшего роста функции и является вектором частных производных.
Направленная производная
При обучении нейросети методом SGD выбирается случайный mini-batch, что эффективно добавляет шум к направлению обновления. Реальный шаг происходит не строго вдоль −∇L, а в слегка случайном направлении. Скорость изменения функции в произвольном направлении - это направленная производная, и она полностью определяется проекцией градиента на это направление.
Формула D_u f = ∇f · u показывает: скорость изменения функции в любом направлении - это просто проекция градиента на это направление. Gradient descent выбирает направление −∇f, обеспечивающее максимальную скорость убывания функции потерь. Именно из этого следует оптимальность алгоритма для локального шага.
В направлении какого вектора функция убывает быстрее всего?
Ответ следует непосредственно из определения и свойств рассматриваемого математического объекта.
Gradient Descent: алгоритм и сходимость
Обучение GPT-3 с 175B параметрами заняло около 355 GPU-лет. За это время Adam выполнил порядка 300 000 шагов градиентного спуска. Каждый шаг: θ ← θ − η∇L(θ), где η - learning rate. Выбор η критичен: слишком большой - расходимость, слишком маленький - медленная сходимость. Для выпуклых функций с L-гладким градиентом сходимость гарантирована при η < 2/L.
На практике чистый gradient descent заменяется Adam, RMSprop или другими адаптивными методами. Adam адаптирует learning rate для каждого параметра отдельно: компоненты с большой исторической дисперсией градиента получают меньший шаг. Математически это аппроксимация предобуславливания через диагональ матрицы Гессиана.
При каком learning rate η gradient descent на f(w) = w² гарантированно сходится?
Градиент указывает направление наибольшего роста функции и является вектором частных производных.
Геометрический смысл на поверхности $f(x,y) = x^2 + 4y^2$
$\nabla f = (2x, 8y)$. В точке $(1, 0.5)$: $\nabla f = (2, 4)$ - направление наискорейшего роста. Линии уровня - эллипсы. Градиент всегда перпендикулярен касательной к эллипсу в данной точке.
Итоги
- Градиент $\nabla f$ указывает направление наискорейшего возрастания, его длина равна скорости роста
- Производная по направлению $D_{\mathbf{v}} f = \nabla f \cdot \mathbf{v}$: максимальна вдоль градиента, нулевая вдоль линии уровня
- Градиентный спуск сходится за $O(1/k)$ шагов при шаге $\alpha \leq 1/L$
Связь с другими темами
Градиент - строительный блок для второго порядка: матрица Гессе $H_{ij} = \frac{\partial^2 f}{\partial x_i \partial x_j}$ кодирует кривизну и применяется в методах Ньютона. В векторном анализе градиент обобщается на дивергенцию и ротор, которые появляются в теореме Стокса.
- Связанные темы — развивает
Вопросы для размышления
- Почему Adam и RMSProp быстрее SGD? Что они учитывают о градиенте дополнительно?
- Vanishing gradient: что происходит с $|\nabla f|$ в глубоких сетях и почему это блокирует обучение ранних слоёв?
- Если функция невыпуклая, градиентный спуск найдёт локальный минимум. Почему на практике это достаточно хорошее решение для нейросетей?