Фаза 01 · урок 18

Выпуклая оптимизация

Цель урока: У выпуклых задач одна долина. У нейронных сетей — миллионы. Важно знать разницу.

Текущий релиз AlexBred.com: первые 100 уроков русскоязычной программы.

Курс
AI Engineering from Scratch
Фаза
Математические основы
Чтение
21 мин.
Проверено
Содержание урока
  1. Цели обучения
  2. Задача
  3. Концепция
  4. Выпуклые множества
  5. Выпуклые функции
  6. Проверка выпуклости
  7. Почему выпуклость важна
  8. Выпуклые и невыпуклые задачи в ML
  9. Матрица Гессиана
  10. Метод Ньютона
  11. Оптимизация с ограничениями
  12. Множители Лагранжа
  13. Условия KKT
  14. Регуляризация как оптимизация с ограничениями
  15. Двойственность
  16. Почему глубокое обучение работает, несмотря на невыпуклость
  17. Методы второго порядка на практике
  18. Соберите это
  19. Шаг 1: проверка выпуклости
  20. Шаг 2: метод Ньютона для 2D
  21. Шаг 3: решатель с множителем Лагранжа
  22. Шаг 4: сравните первый и второй порядок
  23. Используйте это
  24. Упражнения
  25. Ключевые термины
  26. Дополнительное чтение

У выпуклых задач одна долина. У нейронных сетей — миллионы. Важно знать разницу.

Тип: Сборка Язык: Python Предварительные требования: Фаза 1, уроки 04 (Исчисление для машинного обучения), 08 (Оптимизация) Время: ~90 минут

Цели обучения

  • Проверять выпуклость функции по определению, второй производной и критериям Гессиана
  • Реализовать метод Ньютона и сравнить его квадратичную сходимость с градиентным спуском
  • Решать задачи оптимизации с ограничениями при помощи множителей Лагранжа и интерпретировать условия KKT
  • Объяснять, почему ландшафты функции потерь нейронных сетей невыпуклы, но SGD всё равно находит хорошие решения

Задача

В уроке 08 вы изучили градиентный спуск, момент и Adam. Эти оптимизаторы спускаются вниз по любой поверхности. Но они ничего не гарантируют. На невыпуклом ландшафте градиентный спуск может прийти в плохой локальный минимум, застрять в седловой точке или колебаться бесконечно. Вы всё равно его использовали, потому что нейронные сети невыпуклы и альтернативы нет.

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

Понимание выпуклости даёт три вещи. Во-первых, оно позволяет понять, когда задача проста (выпукла), а когда трудна (невыпукла). Во-вторых, оно предоставляет более быстрые инструменты, такие как метод Ньютона, для выпуклых задач. В-третьих, оно объясняет понятия, которые встречаются во всём ML: регуляризацию как ограничение, двойственность в SVM и то, почему глубокое обучение работает, хотя нарушает все приятные свойства, которые даёт выпуклость.

Концепция

Выпуклые множества

Множество S выпукло, если для любых двух точек из S отрезок между ними также целиком лежит в S.

Выпуклые множества Невыпуклые множества
Прямоугольник: любые две внутренние точки можно соединить отрезком, который остаётся внутри Звезда / полумесяц: линия между двумя внутренними точками может пройти вне множества
Треугольник: то же свойство выполняется для всех внутренних точек Бублик / кольцо: из-за отверстия некоторые отрезки выходят из множества
Отрезок между любыми двумя точками остаётся в множестве Отрезок между некоторыми парами точек выходит из множества

Формальная проверка: для любых точек x, y в S и любого t из [0, 1] точка tx + (1-t)y тоже принадлежит S.

Примеры выпуклых множеств:

  • Прямая, плоскость, всё R^n
  • Шар (окружность, сфера, гиперсфера)
  • Полупространство: {x : a^T x <= b}
  • Пересечение любого числа выпуклых множеств

Примеры невыпуклых множеств:

  • Бублик (кольцо)
  • Объединение двух непересекающихся окружностей
  • Любое множество с «вмятиной» или «дырой»

Выпуклые функции

Функция f выпукла, если её область определения — выпуклое множество и для любых двух точек x, y в области определения и любого t из [0, 1]:

f(tx + (1-t)y) <= t*f(x) + (1-t)*f(y)

Геометрически: отрезок между любыми двумя точками графика лежит выше графика или на нём.

Свойство Выпуклая функция Невыпуклая функция
Проверка отрезком Линия между любыми двумя точками графика лежит выше кривой или на ней Линия между некоторыми точками графика опускается ниже кривой
Форма Одна чаша / долина, изгибающаяся вверх Несколько пиков и долин со смешанной кривизной
Локальные минимумы Каждый локальный минимум — глобальный Может быть несколько локальных минимумов на разных высотах

Распространённые выпуклые функции:

  • f(x) = x^2 (парабола)
  • f(x) = |x| (абсолютная величина)
  • f(x) = e^x (экспонента)
  • f(x) = max(0, x) (ReLU, хотя она кусочно-линейная)
  • f(x) = -log(x) при x > 0 (отрицательный логарифм)
  • Любая линейная функция f(x) = a^T x + b (одновременно выпуклая и вогнутая)

Проверка выпуклости

Три практических теста — от самого простого к самому строгому.

Тест 1: критерий второй производной (1D). Если f’’(x) >= 0 для всех x, то f выпукла.

  • f(x) = x^2: f’’(x) = 2 >= 0. Выпуклая.
  • f(x) = x^3: f’’(x) = 6x. Отрицательна при x < 0. Не выпуклая.
  • f(x) = e^x: f’’(x) = e^x > 0. Выпуклая.

Тест 2: критерий Гессиана (многомерный случай). Если матрица Гессиана H(x) положительно полуопределена для всех x, то f выпукла. Гессиан — это матрица вторых частных производных.

Тест 3: проверка по определению. Напрямую проверьте неравенство f(tx + (1-t)y) <= t*f(x) + (1-t)*f(y). Полезно для функций, производные которых трудно вычислить.

Почему выпуклость важна

Центральная теорема выпуклой оптимизации:

Для выпуклой функции каждый локальный минимум является глобальным минимумом.

Это означает, что градиентный спуск не может застрять. Любой путь вниз ведёт к одному и тому же ответу. Алгоритм гарантированно сойдётся к оптимальному решению.

Диаграмма к уроку «Выпуклая оптимизация»

Следствия:

  • Не нужны случайные перезапуски
  • Не нужны сложные расписания скорости обучения
  • Возможны доказательства сходимости (скорость зависит от свойств функции)
  • Решение единственно (с точностью до плоских областей)

Выпуклые и невыпуклые задачи в ML

Задача Выпуклая? Почему
Линейная регрессия (MSE) Да Потери квадратичны по весам
Логистическая регрессия Да Лог-потери выпуклы по весам
SVM (шарнирные потери) Да Максимум линейных функций
LASSO (L1-регрессия) Да Сумма выпуклых функций выпукла
Гребневая регрессия (L2) Да Квадратичная + квадратичная = выпуклая
Нейронная сеть (любые потери) Нет Нелинейные активации создают невыпуклый ландшафт
Кластеризация k-means Нет Дискретный шаг назначения
Факторизация матрицы Нет Произведение неизвестных

Линейные модели с выпуклыми функциями потерь выпуклы. Как только вы добавляете скрытые слои с нелинейными активациями, выпуклость нарушается.

Матрица Гессиана

Гессиан H функции f: R^n -> R — это матрица размера n x n из вторых частных производных.

H[i][j] = d^2 f / (dx_i dx_j)

Для f(x, y) = x^2 + 3xy + y^2:

df/dx = 2x + 3y       d^2f/dx^2 = 2      d^2f/dxdy = 3
df/dy = 3x + 2y       d^2f/dydx = 3      d^2f/dy^2 = 2

H = [ 2  3 ]
    [ 3  2 ]

Гессиан сообщает о кривизне:

  • Все собственные значения положительны: функция изгибается вверх в каждом направлении (выпукла в этой точке)
  • Все собственные значения отрицательны: изгибается вниз в каждом направлении (вогнута, локальный максимум)
  • Знаки смешаны: седловая точка (в одних направлениях изгиб вверх, в других — вниз)
  • Нулевое собственное значение: в этом направлении плоскость (вырождение)

Для выпуклости Гессиан должен быть положительно полуопределённым (все собственные значения >= 0) всюду, а не только в одной точке.

Метод Ньютона

Градиентный спуск использует информацию первого порядка (градиент). Метод Ньютона использует информацию второго порядка (Гессиан). Он подгоняет квадратичную аппроксимацию в текущей точке и сразу прыгает к минимуму этой квадратичной функции.

Правило обновления:
  x_new = x - H^(-1) * gradient

Сравнение с градиентным спуском:
  x_new = x - lr * gradient

Метод Ньютона заменяет скалярную скорость обучения обратным Гессианом. Так шаг автоматически настраивает размер и направление согласно локальной кривизне.

Диаграмма к уроку «Выпуклая оптимизация»

Преимущества:

  • Квадратичная сходимость вблизи минимума (ошибка возводится в квадрат на каждом шаге)
  • Не нужно настраивать скорость обучения
  • Инвариантен к масштабу (работает независимо от параметризации задачи)

Недостатки:

  • Вычисление Гессиана требует O(n^2) памяти, а его обращение — O(n^3)
  • Для нейронной сети с 1 миллионом весов это 10^12 элементов и 10^18 операций
  • Непрактичен для глубокого обучения

Оптимизация с ограничениями

Оптимизация без ограничений: минимизировать f(x) по всем x. Оптимизация с ограничениями: минимизировать f(x) при соблюдении ограничений.

У реальных задач есть ограничения. Вы хотите минимизировать стоимость, но бюджет ограничен. Вы хотите минимизировать ошибку, но сложность модели ограничена.

Диаграмма к уроку «Выпуклая оптимизация»

Множители Лагранжа

Метод множителей Лагранжа превращает задачу с ограничениями в задачу без ограничений.

Задача: минимизировать f(x) при условии g(x) = 0.

Решение: введите новую переменную (множитель Лагранжа lambda) и решите задачу без ограничений:

L(x, lambda) = f(x) + lambda * g(x)

В решении градиент L равен нулю:

dL/dx = df/dx + lambda * dg/dx = 0
dL/dlambda = g(x) = 0

Геометрическая интуиция: в минимуме с ограничениями градиент f должен быть параллелен градиенту ограничения g. Если бы они не были параллельны, можно было бы двигаться вдоль поверхности ограничения и ещё уменьшить f.

Диаграмма к уроку «Выпуклая оптимизация»

Пример: минимизировать f(x,y) = x^2 + y^2 при условии x + y = 1.

L = x^2 + y^2 + lambda(x + y - 1)

dL/dx = 2x + lambda = 0  =>  x = -lambda/2
dL/dy = 2y + lambda = 0  =>  y = -lambda/2
dL/dlambda = x + y - 1 = 0

Из первых двух: x = y
Подстановка: 2x = 1, значит x = y = 0.5, lambda = -1

Ближайшая к началу координат точка на прямой x + y = 1 — это (0.5, 0.5).

Условия KKT

Условия Каруша — Куна — Таккера расширяют метод множителей Лагранжа на неравенства-ограничения.

Задача: минимизировать f(x) при условии g_i(x) <= 0 для i = 1, …, m.

Условия KKT (необходимые для оптимальности):

1. Стационарность:    df/dx + sum(lambda_i * dg_i/dx) = 0
2. Допустимость прямой задачи:  g_i(x) <= 0  для всех i
3. Допустимость двойственной задачи:    lambda_i >= 0  для всех i
4. Дополняющая нежёсткость:  lambda_i * g_i(x) = 0  для всех i

Дополняющая нежёсткость — ключевая идея: либо ограничение активно (g_i = 0, решение лежит на границе), либо множитель равен нулю (ограничение не важно). Ограничение, которое не влияет на решение, имеет lambda = 0.

Условия KKT лежат в основе SVM. Опорные векторы — точки данных, в которых ограничение активно (lambda > 0). У всех остальных точек данных lambda = 0, и они не влияют на границу решений.

Регуляризация как оптимизация с ограничениями

L1- и L2-регуляризация — не произвольные приёмы. Это замаскированные задачи оптимизации с ограничениями.

L2-регуляризация (Ridge):

minimize  Loss(w)  subject to  ||w||^2 <= t

Эквивалентная форма без ограничений:
minimize  Loss(w) + lambda * ||w||^2

Ограничение ||w||^2 <= t задаёт шар (окружность в 2D, сферу в 3D). Решение находится там, где линии уровня потерь впервые касаются этого шара.

L1-регуляризация (LASSO):

minimize  Loss(w)  subject to  ||w||_1 <= t

Эквивалентная форма без ограничений:
minimize  Loss(w) + lambda * ||w||_1

Ограничение ||w||_1 <= t задаёт ромб (повёрнутый квадрат в 2D).

Свойство L2-ограничение (окружность) L1-ограничение (ромб)
Форма ограничения Окружность (сфера в большей размерности) Ромб (повёрнутый квадрат в 2D)
Где касается линия уровня потерь Гладкая граница — любая точка окружности Угол — выровнен с осью
Поведение решения Веса малы, но ненулевые Некоторые веса в точности равны нулю (разреженность)
Результат Сжатие весов Отбор признаков

Это объясняет, почему L1 создаёт разреженные модели (отбор признаков), тогда как L2 лишь сжимает веса. У ромба есть углы, выровненные с осями. Линии уровня потерь с большей вероятностью коснутся угла, установив один или несколько весов точно в ноль.

Двойственность

У каждой задачи оптимизации с ограничениями (прямой, primal) есть задача-компаньон (двойственная, dual). Для выпуклых задач у прямой и двойственной задач одинаковое оптимальное значение. Это называется сильной двойственностью.

Двойственная функция Лагранжа:

Прямая задача: минимизировать f(x) при условии g(x) <= 0
Лагранжиан: L(x, lambda) = f(x) + lambda * g(x)
Двойственная функция: d(lambda) = min_x L(x, lambda)
Двойственная задача: максимизировать d(lambda) при условии lambda >= 0

Почему двойственность важна:

  • Двойственную задачу иногда легче решить, чем прямую
  • SVM решают в двойственной форме, где задача зависит от скалярных произведений между точками данных (что позволяет применить ядерный трюк)
  • Двойственная задача даёт нижнюю границу оптимума прямой, полезную для проверки качества решения

В частности, для SVM:

Прямая задача: найти w, b, максимизирующие отступ 2/||w||, при условии
        y_i(w^T x_i + b) >= 1 для всех i

Двойственная: максимизировать sum(alpha_i) - 0.5 * sum_ij(alpha_i * alpha_j * y_i * y_j * x_i^T x_j)
        при условии alpha_i >= 0 и sum(alpha_i * y_i) = 0

Двойственная задача содержит только скалярные произведения x_i^T x_j.
Замените x_i^T x_j на K(x_i, x_j), чтобы получить ядерный трюк.

Почему глубокое обучение работает, несмотря на невыпуклость

Функции потерь нейронных сетей крайне невыпуклы. По всем классическим меркам их оптимизация должна проваливаться. Но стохастический градиентный спуск надёжно находит хорошие решения. Это объясняют несколько факторов.

Большинство локальных минимумов достаточно хороши. В пространствах большой размерности случайные критические точки (где градиент равен нулю) почти всегда являются седловыми точками, а не локальными минимумами. Немногие существующие локальные минимумы обычно имеют значения потерь, близкие к глобальному минимуму. Застрять в ужасном локальном минимуме крайне маловероятно, когда пространство параметров имеет миллионы измерений.

Реальное препятствие — седловые точки, а не локальные минимумы. В функции с n параметрами седловая точка имеет смесь направлений положительной и отрицательной кривизны. Для случайной критической точки в высокой размерности вероятность того, что все n собственных значений положительны (локальный минимум), приблизительно равна 2^(-n). Почти все критические точки — седловые. Шум SGD помогает из них выйти.

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

Структура ландшафта потерь:

Свойство Пространство малой размерности Пространство большой размерности
Ландшафт Много изолированных пиков и долин Плавно связанные долины
Минимумы Много изолированных локальных минимумов Мало плохих локальных минимумов; большинство близки к оптимуму
Навигация Трудно найти глобальный минимум Много путей ведут к хорошим решениям
Критические точки Смесь локальных минимумов и седловых точек Подавляюще седловые точки, а не локальные минимумы

Стохастический шум выступает неявной регуляризацией. Мини-пакетный SGD добавляет шум, не позволяющий осесть в острых минимумах. Острые минимумы переобучаются; плоские минимумы обобщают. Шум смещает оптимизацию к плоским областям ландшафта потерь.

Методы второго порядка на практике

Чистый метод Ньютона непрактичен для крупных моделей. Несколько приближений делают информацию второго порядка пригодной к использованию.

L-BFGS (Limited-memory BFGS): аппроксимирует обратный Гессиан с помощью последних m разностей градиентов. Требует O(mn) памяти вместо O(n^2). Хорошо работает для задач примерно до 10 000 параметров. Применяется в классическом ML (логистическая регрессия, CRF), но не в глубоком обучении.

Естественный градиент: использует матрицу информации Фишера (ожидаемый Гессиан логарифма правдоподобия) вместо обычного Гессиана. Это учитывает геометрию распределений вероятности. K-FAC (Kronecker-Factored Approximate Curvature) аппроксимирует матрицу Фишера произведением Кронекера, делая метод практичным для нейронных сетей.

Оптимизация без Гессиана: использует сопряжённые градиенты для решения Hx = g, вообще не строя H. Нужны только произведения Гессиана на вектор, которые можно вычислить за O(n) через автоматическое дифференцирование.

Диагональные приближения: второй момент Adam — диагональное приближение диагонали Гессиана. AdaHessian расширяет это, используя фактические диагональные элементы Гессиана через оцениватель Хатчинсона.

Метод Память Стоимость одного шага Когда использовать
Градиентный спуск O(n) O(n) Базовый вариант, большие модели
Метод Ньютона O(n^2) O(n^3) Малые выпуклые задачи
L-BFGS O(mn) O(mn) Средние выпуклые задачи
Adam O(n) O(n) Стандарт глубокого обучения
K-FAC O(n) O(n) на слой Исследования, обучение с большими батчами
convex-vs-nonconvex

Соберите это

Шаг 1: проверка выпуклости

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

import random
import math

def check_convexity(f, dim, bounds=(-5, 5), samples=1000):
    violations = 0
    for _ in range(samples):
        x = [random.uniform(*bounds) for _ in range(dim)]
        y = [random.uniform(*bounds) for _ in range(dim)]
        t = random.uniform(0, 1)
        mid = [t * xi + (1 - t) * yi for xi, yi in zip(x, y)]
        lhs = f(mid)
        rhs = t * f(x) + (1 - t) * f(y)
        if lhs > rhs + 1e-10:
            violations += 1
    return violations == 0, violations

Шаг 2: метод Ньютона для 2D

Реализуйте метод Ньютона с явным Гессианом. Сравните скорость сходимости с градиентным спуском.

def newtons_method(f, grad_f, hessian_f, x0, steps=50, tol=1e-12):
    x = list(x0)
    history = [x[:]]
    for _ in range(steps):
        g = grad_f(x)
        H = hessian_f(x)
        det = H[0][0] * H[1][1] - H[0][1] * H[1][0]
        if abs(det) < 1e-15:
            break
        H_inv = [
            [H[1][1] / det, -H[0][1] / det],
            [-H[1][0] / det, H[0][0] / det],
        ]
        dx = [
            H_inv[0][0] * g[0] + H_inv[0][1] * g[1],
            H_inv[1][0] * g[0] + H_inv[1][1] * g[1],
        ]
        x = [x[0] - dx[0], x[1] - dx[1]]
        history.append(x[:])
        if sum(gi ** 2 for gi in g) < tol:
            break
    return history

Шаг 3: решатель с множителем Лагранжа

Решите задачу оптимизации с ограничением, применив градиентный спуск к лагранжиану.

def lagrange_solve(f_grad, g_val, g_grad, x0, lr=0.01,
                   lr_lambda=0.01, steps=5000):
    x = list(x0)
    lam = 0.0
    history = []
    for _ in range(steps):
        fg = f_grad(x)
        gv = g_val(x)
        gg = g_grad(x)
        x = [
            xi - lr * (fgi + lam * ggi)
            for xi, fgi, ggi in zip(x, fg, gg)
        ]
        lam = lam + lr_lambda * gv
        history.append((x[:], lam, gv))
    return history

Шаг 4: сравните первый и второй порядок

Запустите градиентный спуск и метод Ньютона на одной квадратичной функции. Подсчитайте шаги до сходимости.

def quadratic(x):
    return 5 * x[0] ** 2 + x[1] ** 2

def quadratic_grad(x):
    return [10 * x[0], 2 * x[1]]

def quadratic_hessian(x):
    return [[10, 0], [0, 2]]

Метод Ньютона сойдётся за 1 шаг (он точен для квадратичных функций). Градиентному спуску потребуются сотни шагов, поскольку собственные значения Гессиана различаются в 5 раз, создавая вытянутую долину.

Используйте это

Анализ выпуклости напрямую применяется при выборе ML-моделей и решателей.

Для выпуклых задач (логистическая регрессия, SVM, LASSO):

  • Используйте специализированные решатели (liblinear, CVXPY, scipy.optimize.minimize with method=‘L-BFGS-B’)
  • Ожидайте единственного глобального решения
  • Методы второго порядка практичны и быстры

Для невыпуклых задач (нейронные сети):

  • Используйте методы первого порядка (SGD, Adam)
  • Примите, что решение зависит от инициализации и случайности
  • Используйте избыточную параметризацию, шум и расписания скорости обучения как неявную регуляризацию
  • Не тратьте время на поиск глобального минимума. Достаточно хорошего локального минимума.
from scipy.optimize import minimize

result = minimize(
    fun=lambda w: sum((y - X @ w) ** 2) + 0.1 * sum(w ** 2),
    x0=np.zeros(d),
    method='L-BFGS-B',
    jac=lambda w: -2 * X.T @ (y - X @ w) + 0.2 * w,
)

Для SVM двойственная формулировка позволяет использовать ядерный трюк:

from sklearn.svm import SVC

svm = SVC(kernel='rbf', C=1.0)
svm.fit(X_train, y_train)
print(f"Support vectors: {svm.n_support_}")

Упражнения

  1. Галерея выпуклости. Проверьте эти функции на выпуклость с помощью проверяющей функции: f(x) = x^4, f(x) = sin(x), f(x,y) = x^2 + y^2, f(x,y) = x*y, f(x) = max(x, 0). Объясните, почему каждый результат имеет смысл.

  2. Гонка: Ньютон против градиентного спуска. Запустите оба метода на f(x,y) = 50*x^2 + y^2 из начальной точки (10, 10). Сколько шагов нужно каждому, чтобы достичь loss < 1e-10? Что происходит с градиентным спуском при росте числа обусловленности (отношения наибольшего к наименьшему собственному значению Гессиана)?

  3. Геометрия множителя Лагранжа. Минимизируйте f(x,y) = (x-3)^2 + (y-3)^2 при условии x + 2y = 4. Проверьте решение, убедившись, что в нём градиент f параллелен градиенту g.

  4. Ограничение регуляризации. Реализуйте L1-ограниченную оптимизацию: минимизируйте (x-3)^2 + (y-2)^2 при условии |x| + |y| <= 1. Покажите, что у решения одна координата равна нулю (разреженность из-за ромбовидного ограничения).

  5. Анализ собственных значений Гессиана. Вычислите Гессиан функции Розенброка в точках (1,1) и (-1,1). Вычислите собственные значения в обеих точках. Что они говорят о кривизне в минимуме по сравнению с областью вдали от него?

Ключевые термины

Термин Что он означает
Выпуклое множество Множество, в котором отрезок между любыми двумя его точками остаётся внутри множества
Выпуклая функция Функция, у которой линия между любыми двумя точками графика лежит выше графика или на нём. Эквивалентно: Гессиан всюду положительно полуопределён
Локальный минимум Точка ниже всех близлежащих точек. У выпуклых функций любой локальный минимум — глобальный
Глобальный минимум Самая низкая точка функции на всей области определения
Матрица Гессиана Матрица всех вторых частных производных. Кодирует информацию о кривизне
Положительно полуопределённая Матрица, все собственные значения которой неотрицательны. Многомерный аналог «вторая производная >= 0»
Число обусловленности Отношение наибольшего к наименьшему собственному значению Гессиана. Большое число означает вытянутые долины и медленный градиентный спуск
Метод Ньютона Оптимизатор второго порядка, использующий обратный Гессиан для выбора направления и размера шага. Вблизи минимума имеет квадратичную сходимость
Множитель Лагранжа Переменная, введённая для превращения задачи оптимизации с ограничениями в задачу без ограничений
Условия KKT Необходимые условия оптимальности при неравенствах-ограничениях. Обобщают множители Лагранжа
Дополняющая нежёсткость В решении либо ограничение активно, либо его множитель равен нулю. Ненулевыми не могут быть оба
Двойственность У каждой задачи с ограничениями есть двойственная задача-компаньон. У выпуклых задач оптимальные значения совпадают
Сильная двойственность Оптимальные значения прямой и двойственной задач равны. Выполняется для выпуклых задач, удовлетворяющих условию Слейтера
L-BFGS Приближённый метод второго порядка, который хранит последние m разностей градиентов вместо полного Гессиана
Седловая точка Точка, где градиент равен нулю, но в одних направлениях это минимум, а в других — максимум
Избыточная параметризация Использование большего числа параметров, чем обучающих примеров. Сглаживает ландшафт потерь и сокращает число плохих локальных минимумов

Дополнительное чтение


Источник: оригинальный урок на GitHub Навигация: 01.17 — Линейные системы · Фаза 1 — Математические основы · Полный каталог · 01.19 — Комплексные числа для AI