StyleGAN разделяет случайный код и управление масштабами генератора: ранние уровни задают геометрию, поздние уточняют текстуру. Та же чувствительность нейросетей, которая делает редактирование плавным, напоминает о другой стороне — малые направленные возмущения могут резко менять решение. В этом уроке мы доводим оба сюжета до чисел: собственный маленький генератор, у которого можно измерить всё, и классификатор, который ломается от сдвига в шесть сотых шкалы яркости.

Почему исходный шум неудобен

В обычном GAN шум zN(0,I)z\sim\mathcal N(0,I) подаётся прямо в generator. Координаты zz не обязаны соответствовать осмысленным изменениям: путь между двумя кодами может менять позу, фон и идентичность одновременно. Причина проста. Распределение реальных картинок занимает в пространстве пикселей искривлённое множество малой размерности, а N(0,I)\mathcal N(0,I) — идеально круглый шар. Чтобы натянуть шар на кривое множество, генератор вынужден сильно растягивать одни направления и сминать другие, и «прямая» в zz превращается в петляющую траекторию на многообразии.

StyleGAN вводит промежуточное отображение (mapping network):

w=f(z),f:R512R512,w=f(z),\qquad f:\mathbb R^{512}\to\mathbb R^{512},

а affine-преобразования A(w)A_\ell(w) управляют слоями synthesis network:

h+1=Conv(h; θ, s=A(w)).h_{\ell+1}=\mathrm{Conv}_\ell\bigl(h_\ell;\ \theta_\ell,\ s_\ell=A_\ell(w)\bigr).

Mapping может «развернуть» распределение: у ww нет обязанности быть гауссовым, и сеть вольна отдать искривление отображению ff, оставив synthesis более ровным. Generator при этом начинает не с пространственной карты, полученной из zz, а с обучаемой константы h0h_0 размера 4×44\times4; на каждом масштабе style модулирует каналы свёртки, а отдельный случайный noise добавляет мелкие стохастические детали вроде отдельных волосков.

Обратите внимание на слово «возникающему». Разделение не задано формулой и не гарантировано теоремой: это наблюдение, которое надо проверять измерением каждый раз заново. Именно такую проверку мы и построим.

Модуляция и демодуляция

Пусть style даёт коэффициенты sis_i для входных каналов свёртки. Веса модулируются:

wijk=siwijk.w'_{ijk}=s_i\,w_{ijk}.

Затем demodulation нормирует выходной канал:

wijk=wijki,k(wijk)2+ε.w''_{ijk}= \frac{w'_{ijk}} {\sqrt{\sum_{i,k}(w'_{ijk})^2+\varepsilon}}.

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

Var(i,kwijkxik)=i,k(wijk)2,\operatorname{Var}\Bigl(\sum_{i,k}w'_{ijk}x_{ik}\Bigr)=\sum_{i,k}(w'_{ijk})^2,

так что деление на корень из этой суммы возвращает выходу масштаб около единицы при любом style. Style меняет относительный вклад каналов, а не громкость сигнала; сеть не сползает в насыщение и не гаснет.

Path length regularization поощряет одинаковый масштаб изменения изображения при одинаковом шаге в latent:

Ew,y(Jwy2a)2,Jw=G(w)w.\mathbb E_{w,y} \left( \|J_w^\top y\|_2-a \right)^2,\qquad J_w=\frac{\partial G(w)}{\partial w}.

Она делает геометрию более ровной, но не гарантирует независимых семантических осей: ровность длины шага и независимость смыслов — разные требования.

Генератор, у которого можно измерить всё

Проверять заявления про StyleGAN на самом StyleGAN трудно: веса весят гигабайты, а один эксперимент занимает часы. Поэтому дальше мы работаем с честной уменьшенной моделью. Возьмём реальные рукописные цифры (набор load_digits: 17971797 изображений 8×88\times8, значения яркости от 00 до 1616), разделим их на 12571257 обучающих и 540540 тестовых и построим линейный генератор

G(w)=m+j=1Kwjvj=m+Vw,K=20,G(w)=m+\sum_{j=1}^{K}w_j v_j=m+Vw,\qquad K=20,

где mm — средний образ, а vjv_j — главные направления обучающей выборки из урока про PCA. Это не GAN: отображение линейно, и никакой дискриминатор здесь не спорит с генератором. Но два интересующих нас свойства у него настоящие. Во-первых, код входит на разных масштабах: ранние оси несут крупную геометрию, поздние — мелкие детали. Во-вторых, у него есть выученное многообразие, вне которого инверсия не работает. Всё, что ниже, посчитано скриптом на этих данных и заассерчено.

Первые четыре оси объясняют 48,6%48{,}6\% разброса, оси с семнадцатой по двадцатую — всего 4,5%4{,}5\%, а все двадцать вместе — 89,4%89{,}4\%. Это уже подсказывает, кто отвечает за форму, а кто за отделку.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Две строки картинок восемь на восемь: сверху средний образ и он же со сдвигом по осям 1-4, форма меняется целиком; снизу тот же средний образ со сдвигом по осям 17-20, меняется лишь мелкая фактура
Рис. 83.1. Ранние координаты двигают геометрию, поздние правят детали

Слева в каждой строке — средний образ, роль обучаемой константы StyleGAN. Дальше к нему добавлен сдвиг вдоль одной оси латента в масштабе трёх её стандартных отклонений. Верхняя строка (оси 1–4, 48,6%48{,}6\% дисперсии) меняет силуэт целиком; нижняя (оси 17–20, 4,5%4{,}5\%) едва трогает форму и правит фактуру. Это и есть «крупный стиль» против «мелкой текстуры», только измеренный, а не заявленный.

Смешение стилей как измеримый эксперимент

Возьмём два кода wAw_A и wBw_B. До границы cc используем координаты AA, после — координаты BB:

w(c)=(wA,1,,wA,c, wB,c+1,,wB,K).w^{(c)}=\bigl(w_{A,1},\ldots,w_{A,c},\ w_{B,c+1},\ldots,w_{B,K}\bigr).

При c=0c=0 получается ровно BB, при c=Kc=K — ровно AA. Матрица mixing experiment должна показывать не лучшие четыре примера, а фиксированную сетку источников и границу слоёв.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Три строки по восемь картинок цифр: слева источник B, затем смеси при c=0,2,4,6,10,20, справа источник A; крупная форма переключается на A уже к c=4
Рис. 83.2. Смешение кодов: слева всё от B, справа всё от A

Три случайные пары тестовых цифр, границы c=0,2,4,6,10,20c=0,2,4,6,10,20. Крупная форма переходит к источнику A рано: уже при c=4c=4 силуэт похож на правый столбец, хотя четырнадцать из двадцати координат ещё принадлежат B. Мелкая фактура, наоборот, держится за B почти до конца. Ни один столбец не отобран как удачный — это первые три пары из фиксированной перестановки.

Чтобы не спорить впечатлениями, введём измеримые признаки. Все три — линейные функционалы изображения, поэтому доля наследования считается однозначно:

fкрупн(I)=164x,y(x3,5)Ixy,fчернил(I)=164x,yIxy,f_{\text{крупн}}(I)=\frac1{64}\sum_{x,y}(x-3{,}5)\,I_{xy},\qquad f_{\text{чернил}}(I)=\frac1{64}\sum_{x,y}I_{xy}, fмелк(I)=164x,y(1)x+yIxy.f_{\text{мелк}}(I)=\frac1{64}\sum_{x,y}(-1)^{x+y}I_{xy}.

Последний — коэффициент при самой высокой пространственной частоте («шахматная мода»): мельче на решётке 8×88\times8 уже ничего нет. Для каждой границы посчитаем долю признака, унаследованную от A:

Sf(c)=f(G(w(c)))f(G(wB))f(G(wA))f(G(wB)).S_f(c)=\frac{f\bigl(G(w^{(c)})\bigr)-f\bigl(G(w_B)\bigr)} {f\bigl(G(w_A)\bigr)-f\bigl(G(w_B)\bigr)}.

По 200200 парам тестовых цифр берём медиану — она устойчива к парам, у которых знаменатель случайно мал.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Три растущие кривые доли наследования от A против границы смешения: синяя крупный масштаб пересекает половину при c=4, зелёная количество чернил при c=12, красная шахматная мода при c=14
Рис. 83.3. Крупный признак переходит к A рано, мелкий — поздно

Медиана по 200 парам. Крупный признак пересекает отметку 50%50\% при c=4c=4, общее количество чернил — при c=12c=12, шахматная мода — при c=14c=14. На границе c=4c=4 крупный признак уже на 78%78\% принадлежит A, а мелкий — лишь на 4%4\%. Разделение масштабов существует, но оно не ступенька: кривые плавные и пересекаются, поэтому «ранний = поза, поздний = текстура» — тенденция, а не закон.

Чтобы шаг значил одно и то же

У StyleGAN есть неприятность, которую легко увидеть на стенде. Если писать код в «сырых» единицах главных компонент, шаг длины 11 по первой оси двигает картинку в 4,04{,}0 раза сильнее, чем такой же шаг по двадцатой: стандартные отклонения координат различаются во столько же раз. Ползунок в интерфейсе редактора при этом честно показывает «единицу» и там и там, а пользователь видит то землетрясение, то ничего.

G(w+δej)G(w)2=δvj2=δ,ноδjтипичныйλj.\|G(w+\delta e_j)-G(w)\|_2=|\delta|\,\|v_j\|_2=|\delta|, \qquad\text{но}\qquad \delta_j^{\text{типичный}}\propto\sqrt{\lambda_j}.

Отношение крайних масштабов и есть измеренная четвёрка:

λ1λ20=4,0.\frac{\sqrt{\lambda_1}}{\sqrt{\lambda_{20}}}=4{,}0 .

Отсюда рецепт: измерять шаг в единицах разброса самой координаты (δj=αλj\delta_j=\alpha\sqrt{\lambda_j}) либо, как в StyleGAN, штрафовать отклонение Jwy2\|J_w^\top y\|_2 от постоянной. Обе меры — про одно: сделать слово «шаг» осмысленным.

Лаборатория масштаба

Крупный стиль, мелкая текстура и направленное возмущение

Загружается живая иллюстрация…

Первая вкладка: два кода, ползунок границы смешения и два измеримых признака — крупный (горизонтальный момент) и мелкий (шахматная мода). Передвигайте границу и следите не за впечатлением, а за числами в правой колонке: крупный признак уходит к источнику A уже на первых координатах, мелкий держится за B почти до конца. Нажмите «новые источники» несколько раз — порядок сохраняется, а конкретные проценты пляшут: это и есть разница между тенденцией и законом.

Вторая вкладка: к картинке прибавляется возмущение с одинаковым бюджетом на каждый пиксель — один раз вдоль знаков весов линейной оценки, один раз со случайными знаками. Картинки выглядят одинаково зашумлёнными; сдвиг оценки различается в несколько раз. Ползунок ε\varepsilon показывает, что дело не в величине шума, а в его направлении.

Инверсия: найти код существующей картинки

Для реального xx ищут ww:

w=argminw[λpixG(w)x22+λpercϕ(G(w))ϕ(x)22].w^*=\arg\min_w \left[ \lambda_{\mathrm{pix}}\|G(w)-x\|_2^2 +\lambda_{\mathrm{perc}} \|\phi(G(w))-\phi(x)\|_2^2 \right].

Pixel loss хранит точные цвета, perceptual loss — признаки сети ϕ\phi. В линейном стенде с ортонормированным базисом задача решается в одну строку:

w=V(xm),G(w)=m+VV(xm),w^*=V^\top(x-m),\qquad G(w^*)=m+VV^\top(x-m),

то есть инверсия — ортогональная проекция на выученное подпространство, а ошибка равна норме составляющей, которая в него не попала:

xG(w)22=(IVV)(xm)22.\|x-G(w^*)\|_2^2=\|(I-VV^\top)(x-m)\|_2^2.

Отсюда главный вывод про инверсию: она честно восстанавливает только то, что лежит на многообразии. Средняя ошибка на реальных тестовых цифрах при K=20K=20 равна 1,381{,}38 уровня яркости на пиксель (при шкале 0..160..16). Та же процедура на «шахматке» даёт 9,159{,}15, на «рамке» — 8,768{,}76: в 6,66{,}6 раза хуже, чем на цифрах. Генератор не умеет сказать «это не цифра» — он говорит ближайшую цифру.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Слева три пары оригинал-инверсия: цифра восстановлена, шахматка и рамка превращаются в размытые цифроподобные пятна; справа кривые ошибки восстановления против размерности латента, для цифр она падает быстро, для посторонних картинок держится высоко
Рис. 83.4. Что генератор умеет повторить, а что — нет

Реальная цифра восстанавливается почти точно уже при k=20k=20; шахматка и рамка превращаются в размытые цифроподобные пятна. Кривые справа показывают ошибку восстановления в зависимости от размерности латента: для цифр она быстро падает, для посторонних картинок держится высоко и сваливается лишь при k=64k=64, когда «латент» перестаёт быть узким местом и просто копирует все пиксели.

Расширенное пространство W+W^+ разрешает отдельный style каждому слою и реконструирует лучше — в стенде это соответствует росту KK. При k=40k=40 средняя ошибка восстановления 0,450{,}45 против 2,152{,}15 при k=10k=10: почти впятеро точнее. Но за это платят устойчивостью редактирования, и это тоже измеримо.

Некорректная задача и спасительный компакт

Инверсия — типичная обратная задача: по результату xx восстановить причину ww. Такие задачи знамениты своей неустойчивостью.

Стоит нарушиться третьему условию — и малый шум в xx даёт огромное изменение в ww. В нашем стенде это видно на формуле: если бы мы разрешили латенту размерность 6464 и стали приближать пиксели точно, коэффициенты при осях с крошечными λj\lambda_j ловили бы чистый шум и разлетались.

Здесь и вступает советская школа обратных задач, и в этом уроке её представляют двое Лаврентьевых. Михаил Алексеевич Лаврентьев в 1930-е годы построил теорию квазиконформных отображений: он предложил измерять отображение не одной производной, а характеристикой искажения — тем, во сколько раз маленькая окружность превращается в вытянутый эллипс, и в какую сторону этот эллипс наклонён. Это ровно тот язык, на котором сегодня говорят о якобиане генератора: path length regularization требует, чтобы искажение было ограничено, то есть чтобы отображение оставалось «почти конформным» и шаг в латенте значил одно и то же в любой точке.

Михаил Михайлович Лаврентьев (сын) в книге «О некоторых некорректных задачах математической физики» (1962) ввёл понятие условной корректности: задача, неустойчивая на всём пространстве, становится устойчивой, если заранее известно, что решение принадлежит компактному множеству. Оценка условной устойчивости имеет вид

w1w2ω(G(w1)G(w2)),w1,w2M,\|w_1-w_2\|\le\omega\bigl(\|G(w_1)-G(w_2)\|\bigr), \qquad w_1,w_2\in M,

где MM компактно, а ω\omega — модуль непрерывности, стремящийся к нулю. Именно это и делает генератор: он сужает множество допустимых картинок до своего многообразия и тем превращает безнадёжную задачу «найти код по пикселям» в разрешимую. Обратная сторона той же медали — то, что мы уже измерили: всё, что лежит вне MM, будет насильно приведено к ближайшей точке MM, и шахматка станет цифрой.

Редактирование: цель и побочный эффект

После инверсии можно двигать w+αdw^*+\alpha d, где dd — найденное направление признака. Найдём его честно: линейной регрессией предскажем количество чернил по коду. Модель объясняет 95,8%95{,}8\% дисперсии признака, а нормированный вектор коэффициентов и есть направление «жирности».

d=wf^чернил(w)wf^чернил(w),f^(w)=b0+bw.d=\frac{\nabla_w\widehat{f}_{\text{чернил}}(w)} {\|\nabla_w\widehat{f}_{\text{чернил}}(w)\|},\qquad \widehat f(w)=b_0+b^\top w.

Шаг измеряем в единицах разброса самого признака вдоль dd (σd=5,23\sigma_d=5{,}23). Целевой эффект растёт монотонно: при α=3σd\alpha=3\sigma_d чернил становится больше на 1,301{,}30 уровня яркости, при α=8σd\alpha=8\sigma_d — на 3,133{,}13. Побочный эффект тоже виден: доля картинок, у которых классификатор не поменял ответ, падает со 100%100\% при ασd\alpha\le\sigma_d до 98%98\% при 3σd3\sigma_d и 92%92\% при 8σd8\sigma_d. У направления есть рабочий диапазон, и интерфейс редактора обязан его показывать, а не молча экстраполировать.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Слева столбики: обычная модель 97.4 чистой и 32.4 под атакой, обученная на атаках 93.3 и 56.5; справа две кривые: доля сохранённой идентичности падает со 100 до 92 процентов, прирост чернил растёт линейно
Рис. 83.5. Цена устойчивости и рабочий диапазон редактирования

Слева: обучение на атаках поднимает точность под PGD с 32,4%32{,}4\% до 56,5%56{,}5\%, но чистая точность падает с 97,4%97{,}4\% до 93,3%93{,}3\% — устойчивость покупается за четыре процентных пункта. Справа: целевой эффект (прирост чернил) растёт почти линейно, а идентичность разрушается медленно и нелинейно. Пока обе кривые смотрят в нужную сторону, редактирование работает; дальше начинается экстраполяция.

Состязательное возмущение

Теперь вторая половина урока. Тот же вопрос — как реагирует функция на маленький сдвиг входа — но с враждебной целью. Обучим на тех же цифрах многоклассовую логистическую регрессию: чистая точность на тесте 97,4%97{,}4\%. Атакуем в ограничении δε\|\delta\|_\infty\le\varepsilon методом FGSM:

xadv=x+εsignxL(fθ(x),y).x_{\mathrm{adv}}= x+\varepsilon\operatorname{sign} \nabla_x\mathcal L(f_\theta(x),y).

Почему знак, а не сам градиент? Потому что при линейном приближении

L(x+δ)L(x)+δxL,\mathcal L(x+\delta)\approx\mathcal L(x)+\delta^\top\nabla_x\mathcal L,

и максимум линейной функции на кубе δε\|\delta\|_\infty\le\varepsilon достигается в его вершине:

maxδεδg=εg1,δ=εsigng.\max_{\|\delta\|_\infty\le\varepsilon}\delta^\top g =\varepsilon\|g\|_1, \qquad \delta^*=\varepsilon\operatorname{sign}g.

Projected Gradient Descent повторяет маленькие шаги и проецирует обратно:

xk+1=ΠBε(x)(xk+αsignxL(fθ(xk),y)).x^{k+1}= \Pi_{B_\varepsilon(x)} \left(x^k+\alpha\operatorname{sign} \nabla_x\mathcal L(f_\theta(x^k),y)\right).

При ε=0,15\varepsilon=0{,}15 (пятнадцать сотых от полной шкалы яркости) точность падает с 97,4%97{,}4\% до 35,2%35{,}2\% для FGSM и до 32,4%32{,}4\% для PGD в десять шагов. Случайный шум ровно того же бюджета оставляет 94,3%94{,}3\%. Разница между 32%32\% и 94%94\% — это и есть цена слова «направленное».

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Слева цифра семь с уверенностью 0.99, посередине возмущение усиленное в десять раз, справа изображение после атаки распознано как двойка с уверенностью 0.52; правее кривые точности против бюджета: FGSM и PGD падают, случайный шум почти не меняет точность
Рис. 83.6. Малое по норме, большое по решению

Слева: настоящая семёрка с уверенностью 0,990{,}99, возмущение (усиленное вдесятеро для видимости) и результат — двойка с уверенностью 0,520{,}52. Справа: точность против бюджета ε\varepsilon. Красная и фиолетовая кривые (FGSM и PGD) валятся, зелёная (случайный шум той же нормы) держится. Вертикальная линия — режим ε=0,15\varepsilon=0{,}15, о котором идёт речь в тексте.

Две цитаты спорят друг с другом, и спор поучителен. Первая объясняет эффект экзотикой высокой размерности, вторая — самой обыкновенной линейностью. Наш стенд на стороне второй: модель линейна до последнего знака, никаких «карманов низкой вероятности» в ней нет, а атака всё равно работает.

Почему направление важнее нормы

Посчитаем прямо. Для линейной оценки s(x)=vxs(x)=v^\top x направленное возмущение даёт сдвиг

Δsнапр=εv1,\Delta s_{\text{напр}}=\varepsilon\|v\|_1,

а случайные знаки ri=±1r_i=\pm1 — случайную величину со средним нулём и стандартным отклонением

Var(εvr)=εv2.\sqrt{\operatorname{Var}\bigl(\varepsilon v^\top r\bigr)}=\varepsilon\|v\|_2.

Отношение v1/v2\|v\|_1/\|v\|_2 доходит до d\sqrt d и равно ему, когда все координаты весов одинаковы по модулю. При d=64d=64 это восьмикратная разница между «согласованным» и «случайным» сдвигом при абсолютно одинаковой норме \ell_\infty. Наши измерения согласуются: при ε=0,15\varepsilon=0{,}15 каждый пиксель сдвинут не более чем на 0,150{,}15, средняя 2\ell_2-норма возмущения равна 1,011{,}01 при теоретическом потолке 0,1564=1,20{,}15\sqrt{64}=1{,}2 — и этой малости хватает, чтобы уронить точность втрое.

Защита и честная атака

Adversarial training минимизирует worst-case loss:

minθE(x,y)maxδεL(fθ(x+δ),y).\min_\theta \mathbb E_{(x,y)} \max_{\|\delta\|\le\varepsilon} \mathcal L(f_\theta(x+\delta),y).

Это в точности седловая задача из урока про min-max: внешний игрок выбирает веса, внутренний — возмущение. Внутренний максимум приближают несколькими шагами PGD прямо внутри обучающего цикла. Мы это сделали: модель, каждый батч которой атаковали FGSM при ε=0,15\varepsilon=0{,}15, показала 56,5%56{,}5\% под PGD вместо 32,4%32{,}4\% у обычной — плюс 24,124{,}1 процентных пункта устойчивости. И потеряла 4,14{,}1 пункта чистой точности. Robust accuracy почти всегда ниже clean accuracy: устойчивость имеет цену, и её надо называть.

Слабая атака создаёт ложное чувство защиты. Полезный индикатор — сравнение белого ящика с переносом: примеры, построенные на обычной модели и поданные защищённой, оставляют ей 60,0%60{,}0\% — заметно больше, чем прямая атака (56,5%56{,}5\%). Это правильный порядок: белый ящик должен быть сильнее переноса. Если бы вышло наоборот, мы заподозрили бы gradient masking — ситуацию, когда градиент испорчен (обнулён, зашумлён, оборван), атака по нему не находит направления, а модель на самом деле не устойчива. Тогда её ломает чёрный ящик или атака без градиента.

Сравнивать защиты можно лишь при одинаковом бюджете атаки. Число шагов, рестарты, размер шага и доступ к градиенту записывайте рядом с robust accuracy, иначе одна цифра не воспроизводит эксперимент. Здесь работает та же логика честной оценки, что и в уроке про переплату за выбор модели: чем больше защит вы перебрали по одной и той же атаке, тем оптимистичнее лучшая из полученных цифр.

Данные, лица и ответственность

FFHQ содержит 7000070\,000 изображений лиц, собранных из Flickr с проверкой лицензий. Набор разнообразнее ранних celebrity datasets, но не представляет случайную выборку мира: Flickr снимают те, у кого есть камера и привычка публиковать. Генерация лиц создаёт риски для идентичности и согласия и открывает возможность злоупотребления.

Приём truncation, которым улучшают картинку, — тоже вмешательство в распределение:

w=wˉ+ψ(wwˉ),0<ψ<1,w'=\bar w+\psi\,(w-\bar w),\qquad 0<\psi<1,

и при ψ<1\psi<1 выборка стягивается к среднему лицу: качество растёт, разнообразие падает.

Аудит StyleGAN включает: поиск ближайших соседей в обучающей выборке (не запомнил ли генератор конкретных людей); качество по возрастным и визуальным группам; failure cases аксессуаров и фона; provenance выхода; ограничения на распространение весов; проверку редактирования на сохранение identity. Техническая редактируемость не равна этической допустимости применения.

Мини-исследование: редактирование без скрытой подмены

Выберите measurable attribute — например, угол поворота головы — и направление dd в latent. Для 200 исходных кодов примените α[3,3]\alpha\in[-3,3]. Целевой эффект измерьте pose estimator-ом, побочные — identity similarity, фоном, яркостью и другими атрибутами. Покажите среднюю кривую вместе с худшими 10%10\%.

Проведите cycle test: примените +αd+\alpha d, затем αd-\alpha d. В идеальной линейной геометрии вернётся исходник; ошибка возврата обнаруживает нелинейность и обрезку. Сравните WW и W+W^+: второй лучше реконструирует, но может хуже выдерживать цикл — на нашем стенде именно так и вышло. Такой протокол соединяет инверсию VAE и StyleGAN: latent edit оценивается как преобразование с целью и побочными эффектами, а не как галерея удачных лиц.

Мини-исследование: перцептивная и нормативная малость

Для состязательных возмущений вычислите одновременно \ell_\infty, 2\ell_2, LPIPS и результат печать–фото или JPEG. Малое значение одной нормы не означает незаметности в другой. Покажите диаграмму рассеяния «успех атаки против каждой меры».

Добавьте targeted attack: требуется не любой неверный класс, а заданный. Сравните необходимую норму и число шагов с untargeted-режимом; целевая задача обычно труднее и лучше проверяет, управляет ли атака решением. Проверьте физические преобразования: случайные crop, JPEG и небольшую перспективу на каждом шаге PGD через expectation over transformations. Если возмущение сохраняет эффект, угроза серьёзнее. Но по-прежнему не называйте его «незаметным», пока это не проверено людьми и предметными ограничениями.

Не смешивайте robustness и calibration. Модель может сохранить правильный класс под атакой, но выдавать чрезмерную уверенность, либо менять класс и честно снижать confidence. Стройте robust accuracy, отрицательное логарифмическое правдоподобие и кривую отказов от ответа — так же, как при выборе порога решения. При рандомизированной защите атака обязана усреднять градиент по случайности: один forward даёт шумную оценку и завышает защиту.

Геометрия должна выдержать вмешательство

Мы прошли один и тот же вопрос дважды. Сначала дружелюбно: как меняется картинка, если чуть сдвинуть код, — и получили измеримое разделение масштабов (крупный признак наследуется от источника A при c=4c=4, мелкий при c=14c=14), рабочий диапазон редактирования и честную границу инверсии (ошибка 1,381{,}38 на цифрах против 9,159{,}15 на посторонней картинке). Потом враждебно: как меняется решение, если чуть сдвинуть вход, — и получили падение точности с 97,4%97{,}4\% до 32,4%32{,}4\% при возмущении, которое случайным шумом той же нормы не воспроизводится (94,3%94{,}3\%).

Общее у двух половин — предмет изучения: локальная геометрия отображения в многомерном пространстве. Разница — в намерении наблюдателя. И в обоих случаях надёжный вывод требует измерения на фиксированной выборке с заранее объявленной метрикой, а не одной впечатляющей картинки: галерея удачных редактирований и одна цифра robust accuracy без описания бюджета атаки — это свидетельства одинаково малой силы.

Задачи