Шпаргалка
Выпуклый анализ и оптимизация — все темы на одной странице
Выпуклые множества и функции
Основные понятия выпуклого анализа: выпуклые множества, функции и их свойства
Почему выпуклость важна? → Определение выпуклого множества → Классические примеры выпуклых множеств → Операции, сохраняющие выпуклость → Теорема разделяющей гиперплоскости → Проекция на выпуклое множество → Полный разбор примера → Реальные приложения
- •aᵀx ≤ b для всех x ∈ C₁
- •aᵀx ≥ b для всех x ∈ C₂
Представьте, что вы ищете дорогу в горах. Если местность выпуклая (нет впадин и карманов), любая тропа без тупиков приведёт вас к единственной самой низкой точке. Именно эта идея лежит в основе выпуклого анализа: задачи оптимизации на выпуклых множествах имеют единственный глобальный минимум, и е...
Множество C ⊆ ℝⁿ называется выпуклым, если для любых двух точек x, y ∈ C и любого числа θ ∈ [0,1] выполняется:
Что это означает словами? Возьмите любые две точки множества. Соедините их отрезком. Если весь этот отрезок целиком лежит внутри множества — оно выпуклое. Параметр θ «пробегает» от 0 до 1, описывая все точки между x и y: при θ=1 получаем x, при θ=0 — y, при θ=0.5 — середину отрезка.
Геометрический тест: нарисуйте фигуру. Если можно найти две точки внутри неё, соединённые отрезком, частично выходящим за границу — фигура невыпуклая. Буква «C» — невыпуклая. Круг, квадрат, треугольник — выпуклые.
Зачем изучать выпуклые функции? → Определение выпуклой функции → Примеры выпуклых функций → Критерии выпуклости → Подуровневые множества и надграфик → Операции, сохраняющие выпуклость → Полный разбор примера → Применения
- •f(x) = x² — выпуклая (парабола «смотрит вверх»)
- •f(x) = eˣ — выпуклая (экспонента)
- •f(x) = |x| — выпуклая, но не дифференцируемая в 0
- •f(x) = x log x на x > 0 — выпуклая (используется в теории информации)
- •f(x) = log x на x > 0 — вогнутая
- •f(x) = ‖x‖² = x₁² + ... + xₙ² — выпуклая
- •f(x) = max(x₁, ..., xₙ) — выпуклая (максимум из линейных функций)
- •f(x) = log(Σᵢ eˣⁱ) — «мягкий максимум», log-sum-exp, выпуклая и гладкая
- •f(X) = λ_max(X) — максимальное собственное значение симметричной матрицы — выпуклая
- •Сумма: f₁ + f₂ выпуклая, если f₁ и f₂ выпуклые
- •Неотрицательная шкалировка: λf при λ ≥ 0 выпуклая
- •Максимум: max(f₁, f₂, ..., fₘ) выпуклая (максимум выпуклых функций выпуклый)
- •Аффинная подстановка: f(Ax + b) выпуклая (если f выпуклая)
- •Супремум: sup_{y ∈ S} f(x, y) выпуклая по x (если f(·, y) выпуклая для каждого y)
- •Ведущий минор 1×1: 2 > 0 ✓
- •Определитель 2×2: 2·6 − 2·2 = 12 − 4 = 8 > 0 ✓
Главный практический факт: если функция выпуклая, то её любой локальный минимум является глобальным. Это колоссальное преимущество. В невыпуклой задаче у вас могут быть тысячи локальных минимумов, и алгоритм может «застрять» в плохом из них. В выпуклой задаче — только один минимум, и любой метод ...
Функция f: ℝⁿ → ℝ (или f: dom(f) → ℝ, где dom(f) — выпуклое множество) называется выпуклой, если для любых x, y ∈ dom(f) и любого λ ∈ [0,1]:
Геометрический смысл: рассмотрим две точки на графике функции: A = (x, f(x)) и B = (y, f(y)). Правая часть λf(x) + (1−λ)f(y) — это точка на хорде AB, соответствующая параметру λ. Левая часть f(λx + (1−λ)y) — это значение функции в той же точке по горизонтали. Выпуклость означает: график функции л...
Если выполняется строгое неравенство (< вместо ≤) при x ≠ y и λ ∈ (0,1) — функция строго выпуклая. У строго выпуклой функции минимум единственен.
Мотивация: что делать с недифференцируемыми функциями? → Определение субградиента → Примеры субдифференциалов → Условие оптимальности через субдифференциал → Правила субдифференцирования → Прокс-оператор → Полный разбор примера: LASSO → Применения
- •При x > 0: f'(x) = 1, поэтому ∂|x| = {1}
- •При x < 0: f'(x) = −1, поэтому ∂|x| = {−1}
- •При x = 0: субдифференциал ∂|0| = [−1, 1] — весь отрезок
Многие важные выпуклые функции не имеют градиента в каждой точке. Абсолютное значение |x| не дифференцируемо в нуле. L1-норма ‖x‖₁ не дифференцируема, когда хотя бы одна компонента обращается в нуль. Максимум из нескольких функций не дифференцируем на множестве переключения. Если мы хотим решать ...
Интерпретация: субградиент — это вектор, задающий гиперплоскость через точку (x, f(x)), лежащую «ниже» (или касающуюся) графика f. По критерию первого порядка, если f дифференцируема, единственный субградиент — это градиент ∇f(x). Если f недифференцируема, может быть целый «веер» допустимых субгр...
Почему? При x = 0 нужно найти все g такие, что |y| ≥ |0| + g(y−0) = gy для всех y. Это выполняется при |y| ≥ gy для всех y, что означает g ∈ [−1, 1].
где I(x) = {i : fᵢ(x) = max_j fⱼ(x)} — множество «активных» функций, conv — выпуклая оболочка.
Двойственность и условия оптимальности
Лагранжева двойственность, теорема Слэйтера и условия Каруша-Куна-Таккера
Зачем нужна двойственность? → Примальная задача и лагранжиан → Слабая двойственность → Двойственная задача и теорема Слэйтера → Условия ККТ (Каруша-Куна-Таккера) → Экономическая интерпретация → Полный разбор примера → Геометрическая интерпретация двойственности → Седловые точки лагранжиана → Применения двойственности
- •Машины опорных векторов (SVM): двойственная задача имеет меньшую размерность (число опорных векторов вместо размерности признаков) и допускает ядерный трюк
- •Декомпозиция Бендерса в оптимизации больших систем: разделение на «лёгкую» и «трудную» части через двойственность
- •Distributed optimization (ADMM): двойственные переменные служат «координатором» между параллельными решателями
- •Анализ чувствительности: двойственная переменная λᵢ — это «теневая цена» ограничения, показывающая, насколько улучшится оптимум при ослаблении ограничения на единицу
Иногда решить задачу оптимизации напрямую сложно, но существует «переформулировка», которая решается проще. Лагранжева двойственность — это систематический способ построить такую двойственную задачу. Оказывается, у каждой задачи минимизации есть «двойственная задача максимизации», оптимальное зна...
Лагранжиан: «смягчаем» ограничения, перемещая их в целевую функцию со штрафами λᵢ и νⱼ:
где λᵢ ≥ 0 — «двойственные переменные» (множители Лагранжа) для неравенств, νⱼ — для уравнений (могут быть любого знака).
Физический смысл λᵢ: цена нарушения i-го ограничения. Если gᵢ(x) > 0 (нарушение), за это платим λᵢ gᵢ(x) > 0. При λᵢ = 0 — штрафа нет. При больших λᵢ — нарушение «дорогое».
Идея преобразования Лежандра-Фенхеля → Определение сопряжённой функции → Неравенство Фенхеля-Юнга → Примеры вычисления → Двойственность через сопряжённые функции → Полный разбор примера: вычисление f* для log-барьера → Применения → Свойства преобразования Фенхеля → Примеры пар сопряжённых → Применения
- •y — «двойственная переменная», направление (наклон гиперплоскости)
- •yᵀx — скалярное произведение (линейная функция x)
- •f(x) — «вычитаем» функцию
- •sup — берём наибольшее значение по всем x
- •Сопряжённая функция всегда выпуклая (даже если f не выпуклая) — преобразование «выпукливает» функцию
- •Двойное сопряжённое f = f, если f выпуклая и замкнутая; в общем случае f — выпуклая оболочка f
- •Соответствие порядка: f₁ ≤ f₂ → f₂* ≤ f₁*
- •Сопряжённое к сумме: (f₁ + f₂)* = f₁* □ f₂* (инфимальная конволюция)
- •Связь с субдифференциалом: y ∈ ∂f(x) ⟺ x ∈ ∂f*(y) ⟺ f(x) + f*(y) = xᵀy
- •f(x) = (1/2)xᵀPx (квадратичная) ↔ f*(y) = (1/2)yᵀP⁻¹y
- •f(x) = exp(x) ↔ f*(y) = y log y − y (для y > 0)
- •f(x) = log(1 + eˣ) (softplus) ↔ f*(y) = y log y + (1−y) log(1−y) (бинарная энтропия) для y ∈ [0,1]
- •f(x) = ‖x‖_p ↔ f*(y) = δ_{‖·‖_q ≤ 1}(y), где 1/p + 1/q = 1 (двойственные нормы)
- •f(x) = max(x₁,...,xₙ) ↔ f*(y) = δ_Δ(y) (индикатор симплекса)
Представьте, что вы хотите охарактеризовать выпуклую функцию не через её значения в точках, а через поддерживающие её гиперплоскости. Каждая касательная линия к выпуклой функции задаётся своим наклоном y и «точкой перехвата». Сопряжённая функция f*(y) фиксирует это «пересечение» для гиперплоскост...
Ключевое свойство: f* — всегда выпуклая функция, даже если исходная f — невыпуклая! (Как супремум аффинных функций по y.)
Биполярная теорема: если f — замкнутая выпуклая функция, то f = f (двойная сопряжённая совпадает с исходной). Для невыпуклых f: f = cl(conv(f)) — замыкание выпуклой оболочки.
Вычисление: если |yᵢ| > 1 для некоторого i, берём xᵢ → ±∞ → супремум = +∞. Если |yᵢ| ≤ 1 для всех i, то yᵀx ≤ ‖y‖_∞ ‖x‖₁ ≤ ‖x‖₁ → yᵀx − ‖x‖₁ ≤ 0, максимум = 0 (при x = 0).
Иерархия выпуклых задач → Линейное программирование (ЛП) → Квадратичное программирование (КП) → Программирование второго порядка (SOCP) → Полуопределённое программирование (SDP) → Полный разбор: SDP-релаксация задачи MAX-CUT → Решатели → Иерархия классов задач → Промышленные решатели → Современные применения
Определения
Формулы
- •CVXPY (Python): высокоуровневый язык для описания задач
- •MOSEK: коммерческий, очень быстрый для LP/QP/SOCP/SDP
- •SCS: открытый, масштабируемый для больших SDP
- •ECOS: эффективный для встроенных систем
- •LP: Gurobi, CPLEX, MOSEK, HiGHS (open source) — миллионы переменных за секунды
- •QP: OSQP, qpOASES (для управления в реальном времени), Gurobi
- •SOCP: ECOS, MOSEK, SCS — широко используются в финансах для робастных портфелей
- •SDP: SDPT3, SeDuMi, MOSEK, COSMO — для задач до нескольких тысяч переменных
- •Универсальные моделирующие языки: CVXPY, JuMP, YALMIP — позволяют записать задачу в естественной форме и автоматически привести к канонической для решателя
- •LP в авиации: American Airlines решает задачи с миллионами переменных для назначения экипажей
- •QP в робототехнике: квадратурные регуляторы (LQR) и MPC (Model Predictive Control) — основа управления манипуляторами и квадрокоптерами
- •SOCP в финансах: робастные портфели Гольдфарба-Айенгара учитывают неопределённость в оценках доходностей через эллипсоидные множества
- •SDP в квантовых вычислениях: задачи квантовой томографии, оценки квантовых каналов формулируются через SDP
- •SDP в комбинаторике: релаксация Гёманса-Уильямсона для MAX-CUT даёт 0.878-аппроксимацию через SDP — рекордный результат теоретической информатики
Выпуклое программирование — это «семейство» задач оптимизации различной сложности. Линейное программирование (ЛП) — простейшее: линейная цель, линейные ограничения. Квадратичное (КП) — квадратичная цель. Программирование второго порядка (SOCP) — конические ограничения. Полуопределённое (SDP) — ма...
Здесь c ∈ ℝⁿ — вектор коэффициентов цели, A ∈ ℝ^{m×n} — матрица ограничений, b ∈ ℝᵐ — правые части.
Геометрия: область допустимых решений — выпуклый многогранник (политоп). Линейная целевая функция достигает минимума в вершине многогранника. Симплекс-метод (Данциг, 1947) «ходит» по вершинам, пока не найдёт оптимальную. Метод внутренней точки — движется через внутренность.
Двойственность ЛП: примальная задача min cᵀx при Ax ≥ b, x ≥ 0 имеет двойственную max bᵀy при Aᵀy ≤ c, y ≥ 0. Сильная двойственность выполнена всегда (при допустимости обеих задач).
Алгоритмы первого порядка
Градиентный спуск, ускорение Нестерова, прокс-алгоритмы и ADMM
Зачем нужны алгоритмы первого порядка? → Градиентный спуск: базовый алгоритм → Ускорение Нестерова (1983) → Полный разбор примера → Стохастический градиентный спуск (SGD) → Применения в машинном обучении → Связь с современными библиотеками → Сравнение скорости сходимости
- •Градиентный спуск: O(1/k) для гладких функций, O(1/√k) для негладких
- •Ускоренный (Нестеров): O(1/k²) — теоретический оптимум для гладких выпуклых задач
- •Прокс-методы: O(1/k) или O(1/k²) с ускорением (FISTA)
- •Стохастический градиентный спуск (SGD): O(1/√k) для выпуклых, O(1/k) с усреднением
Методы второго порядка (метод Ньютона) очень быстрые, но требуют вычисления и обращения матрицы Гессе — O(n³) операций за шаг. При n = 10⁶ параметров (нейросеть среднего размера) это просто невозможно. Методы первого порядка используют только градиент — O(n) операций. Они медленнее на итерацию, н...
Здесь α > 0 — размер шага (learning rate). При слишком большом α — алгоритм расходится. При слишком малом — очень медленная сходимость.
Класс L-гладких функций: f называется L-гладкой, если ‖∇f(x) − ∇f(y)‖ ≤ L‖x − y‖ для всех x, y. Константа L — «степень гладкости» (наибольшее собственное значение матрицы Гессе).
Это скорость O(1/k): чтобы уменьшить ошибку вдвое, нужно удвоить число итераций.
Мотивация: как работать с недифференцируемыми членами? → Прокс-оператор → Проксимальный градиентный метод (ISTA/FISTA) → Полный разбор LASSO с FISTA → ADMM (Alternating Direction Method of Multipliers) → Применения → Прокс-операторы для типичных регуляризаторов → Применения расщепления операторов
Формулы
- •τ > 0 — размер шага
- •f(y) — «минимизируем» f
- •(1/2τ)‖y − x‖² — «не уходим далеко от x»
- •argmin — возвращаем минимизирующую точку y
- •Для L2-регуляризации τ‖x‖²: prox(x) = x / (1 + 2τ) — простое масштабирование
- •Для группового LASSO τ‖x‖_{2,1}: групповой мягкий порог, обнуляющий целые группы координат
- •Для ядерной нормы ‖X‖_* (сумма сингулярных чисел матрицы): SVD-разложение X = UΣVᵀ, затем мягкий порог сингулярных чисел и обратная сборка
- •Для индикатора симплекса: проекция на симплекс через сортировку — O(n log n)
Задача LASSO: min (1/2)‖Ax−b‖² + λ‖x‖₁. Первый член — гладкий (можно дифференцировать), второй — нет (|x|₁ недифференцируема в нуле). Применить градиентный спуск нельзя напрямую. Субградиентный метод — слишком медленный (O(1/√k)). Прокс-алгоритмы решают эту проблему элегантно: «расщепляют» функци...
Это «мягкий шаг в сторону минимума f». При τ → 0: prox ≈ x (не двигаемся). При τ → ∞: prox → argmin f (идём в минимум).
1. f(x) = ‖x‖₁: prox_{τf}(x) = sign(x) · max(|x| − τ, 0) — мягкое пороговое (soft thresholding)
2. f(x) = δ_C(x) — индикатор выпуклого C: prox_{δ_C}(x) = P_C(x) — проекция на C
Идея: как обойти ограничения? → Логарифмический барьер → Центральный путь → Алгоритм МВТ → Самодвойственные барьеры → Полный разбор: ЛП через МВТ → Применения → Алгоритмическая реализация → Современные пакеты
- •Для ЛП: φ(x) = −Σ log xᵢ, ν = n (ограничения x ≥ 0)
- •Для SDP: φ(X) = −log det X, ν = n (матрица n×n)
- •Для SOCP: φ = −log(t² − ‖x‖²), ν = 2
Задача с ограничениями: min f(x) при gᵢ(x) ≤ 0. Один из подходов — «забыть» про ограничения, но добавить большой штраф за их нарушение. Логарифмический барьер делает это изящно: он уходит в +∞ при приближении x к границе допустимого множества. Метод внутренней точки (МВТ) систематически используе...
Смысл: когда gᵢ(x) → 0 (приближаемся к границе ограничения), −gᵢ(x) → 0⁺ → log → −∞ → φ(x) → +∞. Барьер «отталкивает» от границы.
При gᵢ(x) = −t (x строго внутри, зазор = t): φ(x) = − log t. При удвоении зазора барьер уменьшается на log 2.
Параметр t > 0 — «точность». При t → ∞ барьерный член (1/t)φ(x) → 0, и решение сходится к оригинальному.
Применения в машинном обучении
Регуляризация, SVM, выпуклые нейросети и компрессированное восстановление
Проблема переобучения и зачем нужна регуляризация → Ridge-регрессия (L2-регуляризация) → Lasso (L1-регуляризация) → Elastic Net: лучшее из двух миров → Компрессированное восстановление (Compressed Sensing) → Полный разбор: Lasso на числовом примере → Практические применения
- •Разреженность от L1: некоторые коэффициенты обнуляются
- •Стабильность от L2: при мультиколлинеарности (похожие признаки) L1 выбирает один произвольно, Elastic Net выбирает «группу» вместе
- •Замкнутое решение по сравнению с чистым Lasso (но только итеративное)
- •Градиент: ∇f(x⁰) = Aᵀ(Ax⁰ − b) = Aᵀ(−b) = [[−22], [−28]]
- •Градиентный шаг: z = x⁰ − τ∇f = [0.24, 0.31]
- •Soft threshold с τλ ≈ 0.006: x¹ = [0.234, 0.304]
Представьте, что вы строите модель прогнозирования цен на квартиры по 1000 признакам, имея только 100 наблюдений. Без ограничений модель может «запомнить» обучающие данные (переобучение), показав нулевую ошибку на них, но ужасную — на новых данных. Регуляризация — это добавление штрафного члена к...
Здесь A ∈ ℝ^{m×n} — матрица признаков, b ∈ ℝᵐ — отклики, λ > 0 — параметр регуляризации.
Важно: матрица AᵀA + λI всегда обратима при λ > 0, даже если AᵀA вырождена! Это решает проблему мультиколлинеарности.
Эффект: все коэффициенты сжимаются к нулю пропорционально, но ни один не обнуляется точно. Это хорошо для «стабилизации» (уменьшения дисперсии), но плохо для «отбора признаков».
Идея: максимизировать зазор → Примальная задача SVM → Двойственная задача и kernel trick → Опорные векторы → Мягкая маржа SVM (Soft Margin) → Популярные ядра → Полный разбор примера → Гарантии обобщения → Метод опорных векторов: математическое ядро → Популярные ядра и их свойства
- •∂L/∂w = 0: w = Σᵢ αᵢ yᵢ xᵢ
- •∂L/∂b = 0: Σᵢ αᵢ yᵢ = 0
- •Класс +1: x₁ = (1, 2), x₂ = (2, 1)
- •Класс −1: x₃ = (−1, −2), x₄ = (−2, −1)
- •Линейное: K(x,y) = xᵀy — для линейно разделимых данных
- •Полиномиальное: K(x,y) = (xᵀy + c)^d — для полиномиальной границы степени d
- •RBF (Gaussian): K(x,y) = exp(−γ‖x−y‖²) — бесконечномерное ядро, универсальный аппроксиматор
- •Sigmoid: K(x,y) = tanh(αxᵀy + c) — связан с нейросетями
- •String kernels, graph kernels — для негеометрических данных
- •SMO (Sequential Minimal Optimization, Платт, 1998): итеративно оптимизирует пары множителей Лагранжа
- •Pegasos (Шалев-Шварц): стохастический градиентный спуск для линейных SVM
- •LIBLINEAR, LIBSVM — стандартные библиотеки
Задача классификации: дано N точек (xᵢ, yᵢ), где xᵢ ∈ ℝⁿ и yᵢ ∈ {−1, +1} — метки классов. Нужно найти гиперплоскость, разделяющую два класса. Таких гиперплоскостей бесконечно много — любая разделяющая подойдёт. SVM (Support Vector Machine) выбирает «наилучшую» — ту, которая максимально удалена от...
Зазор (margin) = 2/‖w‖ (расстояние между двумя параллельными гиперплоскостями wᵀx + b = ±1).
Задача SVM (hard margin): максимизировать зазор при правильной классификации:
Это выпуклое квадратичное программирование! Уникальное решение (строго выпуклая цель).
Когда алгоритм обучения «работает»? → VC-размерность → Rademacher-сложность для выпуклых функций → Выпуклость нейросетей при сверхпараметризации → Неявная регуляризация SGD → Двойное убывание (Double Descent) → Полный пример: сравнение алгоритмов → Двойной спуск и переобучение → Современные направления
Формулы
| Метод | Точность | Число параметров | Гарантии |
|---|---|---|---|
| Логистическая регрессия | 92% | 7840 | Выпуклая, глобальный оптимум |
| SVM (RBF) | 98% | ~10000 опорных векторов | Выпуклая двойственная |
| 3-слойная нейросеть | 98.5% | 100000 | Нет строгих гарантий, работает |
| ResNet-50 | 99.7% | 25 млн | Эмпирически надёжно |
- •Линейные классификаторы в ℝⁿ: vc = n+1. В ℝ² линейный классификатор разбивает любые 3 точки (в общем положении), но не любые 4.
- •RBF-ядро: vc = ∞ (может разбить любое число точек). Но SVM с RBF ядром обобщает через маржу!
- •Нейросеть с W параметрами: vc ≈ W log W.
- •Все критические точки (∇L = 0) — либо глобальные минимумы, либо сёдловые точки
- •Нет «плохих» локальных минимумов
- •Зона интерполяции: при M < N — классическое обучение
- •Порог интерполяции: M = N — ошибка максимальна
- •Зона сверхпараметризации: M >> N — ошибка снова убывает
- •Generalization bounds для глубоких сетей: PAC-Bayes даёт нетривиальные оценки для конкретных обученных моделей, основанные на «плоскости» минимума функции потерь
- •Лотерейные билеты (Frankle & Carbin, 2019): крупная сеть содержит малую подсеть, обучаемую до сравнимого качества — связано с выпуклостью локальных бассейнов
- •Безопасное обучение: convex-concave оптимизация для adversarial training гарантирует устойчивость к атакам
Машинное обучение кажется эмпирической дисциплиной: попробовал — получилось. Но за кулисами существует математическая теория, объясняющая, почему и когда обучение даёт обобщение на новые данные. VC-теория и PAC-обучаемость — это строгие рамки. Выпуклые задачи имеют особые гарантии: независящие от...
Разбиение (shattering): набор точек S «разбит» гипотезным классом H, если для любой разметки точек ∈ {−1, +1} существует гипотеза h ∈ H, правильно классифицирующая все точки.
Основная теорема VC: конечная vc(H) ↔ PAC-обучаемость (Probably Approximately Correct). Число примеров для (ε, δ)-обучения: N = O((vc(H) + log(1/δ)) / ε²).
Следствие: обобщение ≤ O(Bρ/√N) — не зависит от размерности пространства! Только маржа (1/B) и норма данных (ρ) имеют значение.