Каково идеальное значение функции потерь для GAN?
GAN, первоначально предложенный IJ Goodfellow, использует следующую функцию потерь,
D_loss = - log[D(X)] - log[1 - D(G(Z))]
G_loss = - log[D(G(Z))]
Таким образом, дискриминатор пытается минимизировать D_loss, а генератор пытается минимизировать G_loss, где X и Z - обучающий вход и шумовой ввод соответственно. D(.) И G(.) Являются картами для дискриминаторных и генераторных нейронных сетей соответственно.
Как говорится в оригинальной статье, когда GAN обучается за несколько шагов, он достигает точки, где ни генератор, ни дискриминатор не могут улучшиться, и D(Y) везде составляет 0,5, Y является некоторым входом для дискриминатора. В этом случае, когда GAN достаточно подготовлен к этому моменту,
D_loss = - log(0.5) - log(1 - 0.5) = 0.693 + 0.693 = 1.386
G_loss = - log(0.5) = 0.693
Итак, почему мы не можем использовать значения D_loss и G_loss в качестве метрики для оценки GAN?
Если две функции потерь отклоняются от этих идеальных значений, то GAN, несомненно, должен быть хорошо обучен или архитектура должна быть хорошо спроектирована. Поскольку теорема 1 в оригинальной статье обсуждает, что это оптимальные значения для D_loss и G_loss, но тогда почему их нельзя использовать в качестве метрики оценки?
1 ответ
Я думаю, что этот вопрос относится к перекрестной проверке, но в любом случае:
Я долго боролся с этим и удивлялся, почему вопрос не был задан. Далее следует, где я сейчас нахожусь. Не уверен, поможет ли это вам, но это часть моей интуиции.
Потери G и D являются хорошими показателями случаев отказов...
Конечно, если потеря G - действительно большое число, а D - ноль, то в вашем GAN ничего хорошего не происходит.
... но не хорошие показатели производительности.
Я обучил группу GAN и почти никогда не видел "случая 0,5/0,5", за исключением очень простых примеров. В большинстве случаев вы довольны, когда выходы D(x) и D(G(z)) (и, следовательно, потери) более или менее стабильны. Так что не принимайте эти значения за "золотой стандарт".
Ключевая интуиция, которую я пропустил, заключалась в одновременном обучении G и D. В начале, конечно, G действительно плохо генерирует вещи, но D также плохо распознает их. Со временем G становится лучше, но D тоже становится лучше. Так что после многих эпох мы можем думать, что D действительно хорош в различении фальшивых и реальных. Следовательно, даже если G "дурачит" D только 5% времени (то есть D(x)=0,95 и D(G(z))=0,05), это может означать, что G на самом деле довольно хорош, потому что иногда дурачит хороший дискриминатор.
Как вы знаете, не существует надежных показателей качества изображения, кроме того, что мы сейчас его рассматриваем, но я обнаружил, что для моих случаев использования G может создавать великолепные изображения, обманывая D только в нескольких% случаев.
Следствием этого одновременного обучения является то, что происходит в начале обучения: вы можете иметь D(X)=0,5 и D(G(Z))=0,5, и при этом G дает почти случайные изображения: просто D пока недостаточно, чтобы отличить их от реальных изображений.
Я вижу, что прошло пару месяцев с тех пор, как вы отправили этот вопрос. Если вы приобрели интуицию, я буду рад это услышать!