Модуль II·Статья II·~4 мин чтения
Сопряжённые функции Фенхеля
Двойственность и условия оптимальности
Превратить статью в подкаст
Выберите голоса, формат и длину — AI запишет аудио
Сопряжённые функции Фенхеля
Идея преобразования Лежандра-Фенхеля
Представьте, что вы хотите охарактеризовать выпуклую функцию не через её значения в точках, а через поддерживающие её гиперплоскости. Каждая касательная линия к выпуклой функции задаётся своим наклоном y и «точкой перехвата». Сопряжённая функция f*(y) фиксирует это «пересечение» для гиперплоскости с наклоном y. Это двойственное представление чрезвычайно полезно: оно преобразует умножение в сложение, превращает сложные ограничения в простые, и появляется в двойственных задачах оптимизации.
Определение сопряжённой функции
Сопряжённая функция Фенхеля (или Лежандра-Фенхеля):
f*(y) = sup_{x ∈ dom(f)} {yᵀx − f(x)}
Смысл каждого символа:
- y — «двойственная переменная», направление (наклон гиперплоскости)
- yᵀx — скалярное произведение (линейная функция x)
- f(x) — «вычитаем» функцию
- sup — берём наибольшее значение по всем x
Геометрически: f*(y) — максимальный «зазор» между линейной функцией yᵀx и f(x).
Ключевое свойство: f* — всегда выпуклая функция, даже если исходная f — невыпуклая! (Как супремум аффинных функций по y.)
Неравенство Фенхеля-Юнга
Из определения немедленно следует:
f*(y) ≥ yᵀx − f(x) для всех x, y
что эквивалентно неравенству Фенхеля-Юнга:
f(x) + f*(y) ≥ yᵀx
Биполярная теорема: если f — замкнутая выпуклая функция, то f** = f (двойная сопряжённая совпадает с исходной). Для невыпуклых f: f** = cl(conv(f)) — замыкание выпуклой оболочки.
Примеры вычисления
Квадратичная функция f(x) = (1/2)‖x‖² (при n=1: f(x) = x²/2):
f*(y) = sup_x {yx − x²/2} = sup_x {−(x − y)²/2 + y²/2} = y²/2
Результат: f*(y) = (1/2)‖y‖² — самосопряжённая! Максимум достигается при x = y.
L1-норма f(x) = ‖x‖₁ = Σᵢ|xᵢ|:
f*(y) = sup_x {yᵀx − ‖x‖₁} = δ_{‖y‖_∞ ≤ 1}(y)
(0 если ‖y‖_∞ = max|yᵢ| ≤ 1, иначе +∞)
Вычисление: если |yᵢ| > 1 для некоторого i, берём xᵢ → ±∞ → супремум = +∞. Если |yᵢ| ≤ 1 для всех i, то yᵀx ≤ ‖y‖_∞ ‖x‖₁ ≤ ‖x‖₁ → yᵀx − ‖x‖₁ ≤ 0, максимум = 0 (при x = 0).
Экспонента f(x) = eˣ (n=1):
f*(y) = sup_x {yx − eˣ}. Производная: y − eˣ = 0 → x = log y (при y > 0). Значение: y·log y − e^{log y} = y·log y − y. Для y ≤ 0: супремум = +∞.
Результат: f*(y) = y log y − y при y > 0, +∞ при y ≤ 0.
Отрицательная энтропия f(x) = Σᵢ xᵢ log xᵢ (при xᵢ > 0):
f*(y) = log(Σᵢ eʸⁱ) — это log-sum-exp! Мягкая аппроксимация максимума.
Двойственность через сопряжённые функции
Двойственная задача для min_x {f(x) + g(Bx)}:
Через сопряжённые: max_y {−f*(−Bᵀy) − g*(y)}.
Задача LASSO: min_x {(1/2)‖Ax−b‖² + λ‖x‖₁}
Сопряжённые: ((1/2)‖·‖²)* = (1/2)‖·‖², (λ‖·‖₁)* = λ δ_{‖·‖_∞ ≤ 1}.
Двойственная: max_y {bᵀy − (1/2)‖y‖²} при ‖Aᵀy‖_∞ ≤ λ — это QP с L∞-ограничением.
Полный разбор примера: вычисление f* для log-барьера
Задача: найти сопряжённую для f(x) = −log x (x > 0).
f*(y) = sup_{x > 0} {yx − (−log x)} = sup_{x > 0} {yx + log x}
Шаг 1: Производная по x: y + 1/x = 0 → x* = −1/y (только при y < 0).
Шаг 2: При y ≥ 0: yx + log x → +∞ при x → +∞ (для y > 0) или x → +∞ при y = 0 → супремум = +∞.
Шаг 3: При y < 0: f*(y) = y·(−1/y) + log(−1/y) = −1 + log(−1/y) = −1 − log(−y).
Результат: f*(y) = −1 − log(−y) при y < 0, +∞ при y ≥ 0.
Применения
Двойственность в оптимизации: сопряжённая функция автоматически порождает двойственную задачу. Это используется в расчёте оптимальных портфелей (двойственность задачи Марковица), SVM (ядровой трюк через двойственность), и в методе ADMM.
Прокс-оператор через сопряжённую: по теореме Моро, prox_{τf}(x) + τ prox_{f*/τ}(x/τ) = x. Если вычислить prox одной функции трудно, вычисляем прокс сопряжённой.
Свойства преобразования Фенхеля
Сопряжённое преобразование обладает замечательными свойствами:
- Сопряжённая функция всегда выпуклая (даже если 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) (индикатор симплекса)
Применения
Преобразование Фенхеля — основа двойственности Фенхеля-Рокафеллара, обобщающей лагранжеву двойственность. В термодинамике сопряжение Лежандра связывает свободную энергию Гельмгольца и Гиббса, внутреннюю энергию и энтальпию. В выпуклом анализе образа Фенхеля используется для построения «двойственных» алгоритмов: проксимальное расщепление, primal-dual hybrid gradient, Chambolle-Pock — все они оперируют сопряжёнными функциями для эффективного решения задач с неразделимыми членами.
§ Акт · что дальше