До сих пор все веса двигались к одной цели — вниз по склону потери. Но что, если целей две и они враждебны: один игрок уменьшает функцию, другой её увеличивает? Тогда обычный спуск перестаёт работать, а на сцену выходит седловая точка — равновесие противоположных сил. Из неё растут и адверсариальные атаки, и состязательные сети.
Две цели, направленные друг против друга
В прошлых уроках спуск искал минимум — точку, где вокруг всё идёт вверх. Но многие задачи устроены иначе. Классификатор хочет отвечать верно; атакующий хочет незаметно его обмануть. Генератор подделок хочет обмануть эксперта; эксперт хочет отличить подделку. Это не минимизация, а игра двух сторон с противоположными целями, и её короткая запись —
Один игрок выбирает , чтобы уменьшить ; другой выбирает , чтобы её увеличить. Ни один не управляет обоими рычагами. Решение такой задачи — не дно ямы, а особая точка, где интересы уравновешены.
Седловая точка
Представьте поверхность в форме седла: вдоль одной оси — низина, вдоль другой — гребень. В центре обе кривизны встречаются. Такая точка — минимум по и одновременно максимум по . Простейший пример —
По оси это парабола вверх (минимум в нуле), по оси — парабола вниз (максимум в нуле). В начале координат градиент нулевой, но это не минимум и не максимум: шаг вдоль повышает , шаг вдоль — понижает.

Слева — седловая поверхность : по одной оси низина, по другой гребень. Справа — как ведёт себя одновременный спуск-подъём (об этом ниже): на седле он сходится к равновесию, а на игре раскручивается в спираль и расходится.
В многомерии сёдла — не экзотика, а норма. У функции многих переменных случайная стационарная точка почти наверняка окажется седлом, а не минимумом: чтобы быть минимумом, все направления должны идти вверх, а это тем маловероятнее, чем больше измерений. У выпуклой функции сёдел нет вовсе, но потеря настоящей сети далеко не выпукла. Оттого спуск по потере сети чаще застревает и замедляется на сёдлах, чем в настоящих ямах: на плоском гребне седла градиент почти исчезает, и обычный спуск еле ползёт, пока не найдёт спускающееся направление.
Минимакс: равновесие противников
У игры двух сторон с нулевой суммой есть замечательное свойство, доказанное Джоном фон Нейманом в году. Оказывается, порядок ходов не важен: результат осторожного игрока, который минимизирует, приготовившись к худшему ответу противника, совпадает с результатом того, кто максимизирует, ожидая худшего для себя. Формально
Это общее значение и есть цена игры, а точка, где оно достигается, — равновесие: ни одному игроку не выгодно менять свой ход в одиночку. Для гладкой функции такое равновесие как раз и есть седловая точка.
Равенство порядка не даётся даром: оно верно для игр с нулевой суммой и подходящей выпуклостью-вогнутостью. В общем случае осторожный минимизатор оказывается в невыгоде — тот, кто ходит вторым, всегда может подстроиться, поэтому . Разрыв между этими величинами измеряет, насколько игра «нечестна» к тому, кто раскрывает ход первым.
Спуск-подъём: почему игру трудно решить
Раз равновесие — седло, нельзя ли дойти до него градиентом? Простейшая идея: пусть минимизирующий игрок делает шаг спуска, а максимизирующий — шаг подъёма, одновременно. Это метод спуска-подъёма. Беда в том, что он часто не сходится. На игре шаги закручивают траекторию по спирали и уводят её всё дальше от равновесия, а не к нему. На седле спуск-подъём сходится, но стоит осям связаться — и он начинает кружить.
Откуда берётся вращение, видно из самих шагов. В обычном спуске сила всегда направлена к минимуму, и точка неуклонно к нему сползает. В игре же минимизатор тянет по одной оси, максимизатор — по другой, и вместе их шаги дают не движение к цели, а поворот вокруг неё, как две руки, крутящие руль в разные стороны. При дискретных шагах этот поворот ещё и понемногу раскручивается наружу. Оттого равновесие игры притягивает куда слабее, чем дно ямы.
Это не мелкая неприятность, а сердце проблемы обучения состязательных систем. Там, где обычный спуск катится к минимуму почти всегда, спуск-подъём в игре легко зацикливается, и приходится изобретать хитрые поправки — усреднение ходов, разные шаги у игроков, заглядывание вперёд, — чтобы утихомирить вращение.
Атака на классификатор
Самое наглядное применение седловых задач — адверсариальные атаки. Обучив классификатор, мы решали задачу минимизации: подобрать веса, уменьшающие потерю. Атакующий решает противоположную: не трогая веса, чуть-чуть сдвинуть вход, чтобы ту же потерю увеличить и ответ испортить. Веса и вход меняются местами: раньше вход был дан, а веса подбирались, — теперь веса заморожены, а свободен вход. Формально это и есть внешний максимум в игре , только атакующий работает с уже обученной моделью.
Сдвигать нужно с умом. Градиент потери по входу указывает, куда толкнуть , чтобы потеря росла быстрее всего. Метод быстрого знака (FGSM) делает шаг фиксированного размера в эту сторону:
Здесь — бюджет искажения: насколько сильно позволено менять каждый признак. Проверим на реальном классификаторе ирисов, обученном до точности. Будем понемногу растить и считать, сколько верных ответов ломает атака.

Классификатор точен на , но легко ломается. Уже при (треть стандартного отклонения) атака портит верных ответов, при — больше половины, при — почти все. Точность на честных данных ничего не говорит об устойчивости к искажению.
Один цветок, уверенная ошибка
Кривая — это статистика. Заглянем в один случай, чтобы почувствовать масштаб искажения.

Один цветок вида versicolor, который модель узнавала с уверенностью . Атака при сдвинула четыре измерения на доли сантиметра — столько же наберётся от неточности линейки. Но этого хватило: модель уверенно назвала цветок virginica. Искажение, невидимое человеку, переломило ответ.
Вот что тревожит в адверсариальных примерах. Дело не в том, что модель плоха, — она точна. Дело в том, что её решение опирается на комбинации признаков, к которым человеческое зрение нечувствительно, и потому её можно обмануть сдвигом, которого мы даже не заметим. Для распознавания дорожных знаков или лиц это уже вопрос безопасности.
Робастное обучение
Если атака — это максимизация потери по входу, то защита — минимизация уже с учётом худшего искажения. Получается вложенная игра: обучать веса, которые хороши даже против наилучшей атаки. Это снова минимакс,
На практике внутренний максимум приближают той же атакой FGSM, добавляя искажённые примеры в обучение. Модель становится устойчивее, но обычно ценой небольшой потери точности на честных данных — плата за то, чтобы не рассыпаться от лёгкого толчка. Здесь виден общий закон седловых задач: защита от худшего случая почти всегда стоит немного среднего качества, и инженер сам выбирает точку на этом обмене под свою задачу. Для игры в шахматы хрупкость безобидна, для системы, узнающей дорожные знаки, — уже нет. Идеальной защиты пока нет; это живой край исследований, и всякая новая атака рождает новую защиту, а та — новую атаку, в бесконечной той же игре.
Состязательные сети
Та же игра лежит в основе генеративных состязательных сетей. Одна сеть, генератор, учится подделывать данные; другая, дискриминатор, — отличать подделку от настоящего. Генератор минимизирует свою потерю, дискриминатор максимизирует — снова седло, снова спуск-подъём, снова риск бесконечного кружения. Оттого GAN славятся капризностью обучения: два игрока то догоняют друг друга, то срываются в осцилляции.
Русская линия: игры в движении
Классическая теория игр фон Неймана рассматривала один ход. Но что, если игроки движутся во времени — один убегает, другой преследует? Такие задачи изучал советский математик Лев Понтрягин, создатель теории дифференциальных игр. В его задаче преследования две стороны непрерывно меняют курс, каждая по своей цели, и вопрос — сможет ли преследователь настичь убегающего.
Между минимаксом фон Неймана, дифференциальными играми Понтрягина и адверсариальным обучением нейросетей — прямая линия: всюду две противоположные цели ищут равновесие, и всюду это равновесие оказывается седловой точкой. Что роднит настольную игру, погоню и обман нейросети — единый математический костяк, и, увидев его однажды, вы будете узнавать седло всюду, где сталкиваются интересы.
Лаборатория атаки
Порядок опытов. Перед вами настоящий классификатор ирисов и три цветка, которые он узнаёт верно. Выберите цветок и медленно растите бюджет искажения . Слева видно, как крошечно сдвигаются четыре признака (и на сколько сантиметров), справа — как перестраивается уверенность модели. Поймайте момент, когда столбец верного класса уступает первенство чужому: ответ перевернулся. Обратите внимание, что для одних цветков хватает совсем малого бюджета, а для других нужен побольше — устойчивость зависит от того, насколько близко к границе между классами лежит пример.
Сборка: равновесие вместо дна
Седловая задача — это оптимизация с двумя враждебными целями, . Её решение не дно ямы, а седловая точка равновесия, где одному игроку невыгодно менять ход в одиночку; теорема фон Неймана о минимаксе гарантирует, что такое равновесие существует. Дойти до него градиентом трудно: одновременный спуск-подъём легко срывается в кружение, как на игре . Эта же математика правит адверсариальными атаками — мы своими руками сломали точный на классификатор сдвигом входа на доли сантиметра, — и обучением состязательных сетей, и уходит корнями к дифференциальным играм Понтрягина. Устойчивость, а не только точность, становится отдельной целью. На этом мы закрываем блок оптимизации и обучения: дальше — как из обученных сетей строят системы, которые видят изображения и понимают язык.