Оценка сгенерированных изображений с помощью предобученного классификатора — уверенные предсказания для каждого изображения и разнообразные в целом — и почему две энтропии объединяются в среднюю KL-дивергенцию.
У GAN нет правдоподобия, нижняя оценка правдоподобия у VAE сопровождается размытыми сэмплами, а оценка W1, которую даёт критик WGAN, зависит от самого критика, поэтому ни одна из функций потерь, используемых при обучении, не позволяет ранжировать готовые генераторы. Нам нужны метрики, которые вычисляются по самим изображениям. Эта заметка и две следующие посвящены трём стандартным метрикам. Inception Score (IS) и Fréchet Inception Distance (FID) оценивают набор сгенерированных изображений; LPIPS — перцептивное расстояние между парами изображений, которое используется как функция потерь и для измерения разнообразия сэмплов. Inception Score (Salimans et al., 2016) использует только сгенерированные изображения, предобученный классификатор, а также энтропию и KL-дивергенцию (KL divergence) из заметки Энтропия, кросс-энтропия и KL-дивергенция.
Обозначения.x — сгенерированное изображение, а y∈{1,…,n} — один из n классов классификатора. p(y∣x) — выход softmax классификатора для изображения x, а Ex — математическое ожидание по изображениям, которые выдаёт генератор. Логарифмы натуральные, если основание не указано.
Разнообразие. Изображения бывают самых разных видов, например много разных пород собак, а не одна и та же порода снова и снова.
Отчётливость. Каждое изображение отчётливо похоже на что-то: классификатор может уверенно сказать, что на нём изображено.
Ни одного из этих свойств по отдельности недостаточно. Генератор, который каждый раз рисует одного и того же чёткого бигля, даёт отчётливые изображения без всякого разнообразия. Генератор, который рисует бесформенные пятна, не даёт ничего, что классификатор мог бы распознать.
Берём много сгенерированных изображений x1,…,xN.
Пропускаем их через предобученный классификатор, обычно Inception v3, обученный на ImageNet (Szegedy et al., 2016). Сеть состоит из модулей Inception (Inception modules) и заканчивается softmax, так что для каждого изображения мы получаем распределение по классам p(y∣x).
Вычисляем по этим выходам две энтропии.
H(p(y∣x)) должна быть низкой: классификатор делает уверенное предсказание, то есть изображение отчётливо похоже на определённый класс. Этот член входит в метрику со знаком минус.
H(p(y)) должна быть высокой: изображения разнообразны, поэтому в среднем классы распределены почти равномерно.
Рисунок
Вычисление Inception Score
Каждое сгенерированное изображение проходит через замороженный классификатор, обученный на ImageNet; его выход softmax p(y | x) должен иметь острый пик (уверенность). Усреднение этих выходов по всем изображениям даёт маргинальное распределение p(y), которое должно быть плоским (разнообразие). Метрика сравнивает каждое p(y | x) с p(y) с помощью KL-дивергенции.
Распределение p(y∣x) с острым пиком (вероятность одного класса близка к 1) имеет энтропию, близкую к 0. У плоского распределения энтропия максимальна и равна logn.
Маргинальное распределение классов — это выход классификатора, усреднённый по сгенерированным изображениям:
p(y)=Ex[p(y∣x)],
а его энтропия равна
H(p(y))=−y∑p(y)logp(y).
Почему маргинальное распределение — это среднее выходов. Пусть X∼Pg — случайное сгенерированное изображение, где Pg — распределение сэмплов генератора, и пусть Y — класс, который приписывает ему классификатор: при условии X=x величина Y имеет распределение p(y∣x).
Шаг 1. По определению p(y)=P(Y=y).
Шаг 2. Обусловим по изображению (формула полной вероятности):
p(y)=EX∼Pg[P(Y=y∣X)].
Если бы изображения принимали конечное число значений, это была бы привычная сумма ∑xP(Y=y∣X=x)Pg(X=x). Для генератора x=G(z) это Ez[P(Y=y∣X=G(z))], среднее по шуму (Salimans et al., 2016, §4). Плотность Pg не нужна, нужны только сэмплы. Это важно, потому что генератор GAN — неявная модель (implicit): из него можно сэмплировать, но нельзя вычислить плотность.
Шаг 3. Условная вероятность — это выход классификатора, P(Y=y∣X=x)=p(y∣x), поэтому
p(y)=Ex[p(y∣x)].
На практике математическое ожидание эмпирическое: распределение X равномерно на N взятых сэмплах, поэтому каждое изображение получает вес 1/N и
Мы хотим, чтобы маргинальная энтропия была большой, а средняя условная энтропия — маленькой, поэтому рассмотрим их разность. Оказывается, это средняя KL-дивергенция: H(p(y))−ExH(p(y∣x))=ExDKL(p(y∣x)∥p(y)). Пять шагов ниже доказывают это, а за ними следует довод о линейности, на который опирается шаг 2. Кто предпочитает сначала числа, может проверить тождество на примере с тремя классами и вернуться к доказательству позже.
2. Заменим p(y) на Ex[p(y∣x)] в весе первой суммы. Величина p(y) под логарифмом остаётся как есть. Множитель logp(y) не зависит от x, поэтому его можно внести под математическое ожидание, а сумму по y можно поменять местами с Ex (см. ниже):
5. Выделим KL-дивергенцию. Внутренняя сумма равна DKL(p(y∣x)∥p(y)), поэтому
H(p(y))−Ex[H(p(y∣x))]=Ex[DKL(p(y∣x)∥p(y))].
Левая часть — это энтропия Y минус её условная энтропия при заданном X, то есть взаимная информация (mutual information) I(X;Y) между сгенерированным изображением и предсказанным для него классом. Значит, logIS=I(X;Y): логарифм метрики измеряет, сколько информации о своей метке несёт сгенерированное изображение (Barratt and Sharma, 2018, §3.3, формулы 2–3 и приложение A).
Почему сумму и математическое ожидание можно поменять местами.Ex[⋅] — линейный оператор, а ∑y — конечная дискретная сумма по классам. Для любого линейного оператора и конечной суммы
y∑Ex[fy(x)]=Ex[y∑fy(x)],
где y — класс, а x — изображение. Это линейность математического ожидания: математическое ожидание суммы равно сумме математических ожиданий. На шаге 2 она применяется при fy(x)=p(y∣x)logp(y).
Рисунок
Что измеряет каждый член тождества
Две энтропии — это две цели метрики: высокая маргинальная энтропия (разнообразие) и низкая условная энтропия (каждое изображение отчётливо похоже на что-то). Их разность — средняя KL-дивергенция, от которой Inception Score берёт экспоненту.
Форма через KL даёт второе прочтение метрики. Мы сравниваем распределение по классам для каждого изображения с усреднённым (маргинальным). Если предсказанное для изображения распределение по классам отличается от среднего, то и его предсказание отличается от предсказаний для остальных изображений. Дивергенция велика, когда p(y∣x) имеет острый пик на классе, на котором маргинальное распределение не сосредоточено.
Чем больше значение, тем лучше: более уверенные предсказания для отдельных изображений и большее разнообразие по всем изображениям.
Дивергенция всегда конечна. KL-дивергенция DKL(p(y∣x)∥p(y)) конечна, только если p(y)>0 везде, где p(y∣x)>0, а здесь это выполнено всегда: p(y) — среднее p(y∣xi), поэтому оно положительно для каждого класса, которому хоть одно изображение даёт положительную вероятность. В арифметике с плавающей точкой выход softmax всё же может обратиться ровно в 0, и тогда код должен применять соглашение 0log0=0, а не вычислять это выражение.
В коде оценка занимает несколько строк. Если собрать выходы классификатора в массив формы (N,n), она воспроизводит разобранный пример ниже (2.02 для генератора A, 1.52 для D). Функция rel_entr из SciPy вычисляет alog(a/b) с соглашением 0log0=0, так что точные нули не дают NaN. Это крошечная оценка для иллюстрации, а не эталонная реализация: опубликованные значения фиксируют ещё веса сети, предобработку изображений, число сэмплов и разбиение на части.
import numpy as npfrom scipy.special import rel_entrdef inception_score(probs): # probs[i] — это p(y | x_i), форма (N, n) assert np.allclose(probs.sum(axis=1), 1) # строки — распределения p_y = probs.mean(axis=0) # маргинальное p(y) # D_KL(p(y | x_i) || p(y)) для каждого i, с 0 log 0 = 0 kl = rel_entr(probs, p_y).sum(axis=1) return np.exp(kl.mean())A = np.array([[0.9, 0.05, 0.05], [0.05, 0.9, 0.05], [0.05, 0.05, 0.9]])print(inception_score(A)) # 2.022...
Основание логарифма может быть любым, если возведение в степень ему соответствует. С loge метрика использует exp(⋅), с log2 — 2(⋅). Оба варианта дают одно и то же значение: значение KL в битах равно значению в натах (nats), делённому на ln2, а 2a/ln2=ea.
Энтропии дискретных распределений неотрицательны, H(p(y∣x))≥0. По доказанному тождеству Ex[DKL]=H(p(y))−Ex[H(p(y∣x))]≤H(p(y)).
Маргинальная энтропия не превосходит logn, причём равенство достигается, только когда p(y) равномерно (неравенство Гиббса относительно равномерного распределения).
Вместе получаем
0≤Ex[DKL]≤H(p(y))≤logn⟹1≤IS≤n.
На языке взаимной информации это 0≤I(X;Y)≤H(Y)≤logn (Barratt and Sharma, 2018, §3.3 и приложение B). Максимум показателя экспоненты равен lnn в натах и log2n в битах.
IS=1 ровно тогда, когда (почти) каждое изображение получает одно и то же распределение по классам, потому что KL-дивергенция равна нулю, только когда два её аргумента совпадают. Это общее распределение может иметь острый пик (коллапс мод, mode collapse) или быть плоским (ни одно изображение не распознаётся). Для IS=n нужно, чтобы все H(p(y∣x))=0, а маргинальное распределение было равномерным, то есть нужны предсказания в виде one-hot-векторов, равномерно распределённые по всем n классам. Softmax никогда не выдаёт точный one-hot-вектор, поэтому метрика лишь приближается к n. Для Inception v3 на ImageNet n=1000.
Возьмём классификатор с n=3 классами (бигль, корги, хаски) и по три сгенерированных изображения на генератор. Столбцы таблицы — выходы для отдельных изображений p(y∣xi) при i=1,2,3, маргинальное распределение p(y), его энтропия H(p(y)), средняя условная энтропия ExH(p(y∣x)), средняя дивергенция ExDKL и значение метрики. Энтропии и дивергенции измеряются в натах; метрика безразмерна.
а маргинальное распределение равномерно, поэтому H(p(y))=ln3≈1.099. Разность равна 0.704, и IS=e0.704≈2.02. Поскольку маргинальное распределение равномерно, дивергенция каждого изображения равна DKL(p(y∣xi)∥p(y))=ln3−H(p(y∣xi))=0.704, поэтому среднее этих дивергенций совпадает с разностью энтропий. В общем случае совпадать обязано только среднее. В D три дивергенции равны 0.245, 0.245 и 0.768 ната, и только их среднее, 0.420, равно 0.814−0.394.
Генераторы B и C оба получают минимальное значение 1, но по противоположным причинам. B уверен, но всегда рисует бигля, поэтому пик у p(y) такой же острый, как у каждого p(y∣x). C «разнообразен» в среднем, но ни одно отдельное изображение ни на что не похоже. Генератор D теряет класс хаски и оказывается посередине. С идеальными one-hot-предсказаниями, равномерно распределёнными по классам, метрика достигла бы своего максимума n=3.
Рисунок
Три класса, четыре генератора
Синие столбцы — выходы классификатора p(y | x) для трёх сгенерированных изображений; зелёные столбцы — их среднее p(y). У генератора A выходы для отдельных изображений имеют острый пик, а маргинальное распределение плоское, и значение метрики у него самое высокое; B (коллапс мод) и C (нераспознаваемые изображения) оба получают минимальное значение 1; D, который никогда не рисует хаски, оказывается посередине. Энтропии H измеряются в натах; б, к, х — бигль, корги, хаски.
У метрики есть хорошо известные слепые пятна (Barratt and Sharma, 2018; номера разделов ниже относятся к этой статье):
Она никогда не смотрит на реальные данные. Генератор, который выдаёт по одному идеальному изображению на класс, получает максимальное значение, игнорируя всё остальное в распределении данных, в том числе разнообразие внутри класса. Генератор, который запоминает обучающие изображения, получает такое же значение, как сами данные (§4.2.3), а распределение данных вовсе не обязано максимизировать метрику: в одномерном примере с двумя перекрывающимися классами несколько других распределений получают более высокое значение, чем истинное (§4).
Её можно обмануть. Оптимизация метрики, напрямую или косвенно через выбор модели (ранняя остановка, подбор гиперпараметров или поиск архитектуры), уводит в сторону состязательных примеров (adversarial examples). Слегка возмущённые сэмплы WGAN достигают IS≈900 из возможных 1000, хотя ничуть не больше похожи на естественные изображения (§4.2.2, рисунок 1).
Она зависит от классификатора. Метрика привязана к 1000 классам ImageNet и к конкретной сети и реализации. Версии Inception v3 для Keras и Torch с почти одинаковой долей правильных ответов (accuracy) дают значения, которые различаются на 3.5% на валидационных изображениях ImageNet и на 11.5% на изображениях CIFAR-10 (§4.1.1). Исходный код и вовсе использует версию сети с 1008 выходами вместо 1000 (сноска 2). Для данных вне домена ImageNet классы не имеют смысла (§4.2.1).
Она зависит от размера выборки и протокола. Обычный протокол использует 50 000 изображений, разбитых на 10 групп по 5000, и сообщает среднее и стандартное отклонение значений по группам. Маргинальное p(y) оценивается отдельно для каждой группы, и значение меняется с числом групп, поэтому значения, вычисленные по-разному, несравнимы (§3.4, §4.1.2).
Ноутбук о метриках из репозитория HSE-LAMBDA Deep Generative Models (закреплённый коммит; ячейки нумеруются с 1, считая все ячейки подряд, в том числе текстовые) вводит IS в ячейках 2–4: назначение метрики, две иллюстрации (уверенные и разнообразные предсказания), эмпирические формулы p(y)≈N1∑ip(y∣xi) и IS≈exp(N1∑iDKL), замечание о том, что метрика зависит от классификатора и на неё может влиять несовпадение доменов, и интерпретацию, при которой распределение по классам для каждого сэмпла сравнивается с усреднённым. Ячейка 6 сводит IS, FID и LPIPS в одну сравнительную таблицу. Ноутбук не вычисляет IS; его практическая часть посвящена LPIPS.
IS оценивает сгенерированные изображения сами по себе. Fréchet Inception Distance использует ту же сеть, но сравнивает сгенерированные изображения с настоящими.
S. Barratt, R. Sharma. A note on the Inception Score. ICML Workshop on Theoretical Foundations and Applications of Deep Generative Models, 2018. §3.3: интерпретация через взаимную информацию; §4: недостатки метрики.
HSE-LAMBDA, репозиторий курса Deep Generative Models: metrics.ipynb.