Учебный GANs может быть сложной задачей. Это вызвано тем, что генератор и сети различителя конкурируют друг против друга во время обучения. На самом деле, если одна сеть учится слишком быстро, то другая сеть может не учиться. Это может часто приводить к сети, не бывшей способной сходиться. Диагностировать проблемы и монитор по шкале от 0 до 1, как хорошо генератор и различитель достигают их соответствующих целей, можно построить их баллы. Для примера, показывающего, как обучить GAN и построить генератор и баллы различителя, смотрите, Обучают Порождающую соперничающую сеть (GAN).
Различитель учится классифицировать входные изображения как "действительные" или "сгенерированные". Выход различителя соответствует вероятности то, что входные изображения принадлежат классу "действительный".
Счет генератора является средним значением вероятностей, соответствующих различителю выход для сгенерированных изображений:
где содержит вероятности для сгенерированных изображений.
Учитывая, что вероятность изображения, принадлежащего классу "сгенерированный", счет различителя является средним значением вероятностей входных изображений, принадлежащих правильному классу:
где содержит различитель, выходные вероятности для действительных изображений и количеств действительных и сгенерированных изображений, переданных различителю, равны.
В идеальном случае оба баллов были бы 0.5. Это вызвано тем, что различитель не может сказать различие между действительными и поддельными изображениями. Однако на практике этот сценарий не является единственным случаем, в котором можно достигнуть успешного GAN.
Чтобы контролировать процесс обучения, можно визуально смотреть изображения в зависимости от времени и проверять, улучшаются ли они. Если изображения не улучшаются, то можно использовать график счета помочь вам диагностировать некоторые проблемы. В некоторых случаях график счета может сказать вам, что нет никакого смысла продолжающего обучение, и необходимо остановиться, потому что тип отказа произошел, с которого не может восстановиться обучение. Следующие разделы говорят вам, что искать в графике счета и в сгенерированных изображениях, чтобы диагностировать некоторые общие типы отказа (отказ сходимости и коллапс режима), и предлагают возможные меры, которые можно принять, чтобы улучшить обучение.
Отказ сходимости происходит, когда генератор и различитель не достигают баланса во время обучения.
Этот сценарий происходит, когда счет генератора достигает нуля или около нуля, и счет различителя достигает один или около одного.
Этот график показывает пример различителя, пересиливающего генератор. Заметьте, что подходы счета генератора обнуляют, и не восстанавливается. В этом случае различитель классифицирует большинство изображений правильно. В свою очередь генератор не может произвести изображения, которые дурачат различитель, и таким образом не удается учиться.
Если счет не восстанавливается с этих значений для многих итераций, то лучше остановить обучение. Если это происходит, то попытайтесь балансировать эффективность генератора и различителя:
Повреждение различителя путем случайного предоставления лжи помечает к действительным изображениям (одностороннее зеркальное отражение метки)
Повреждение различителя путем добавления слоев уволенного
Улучшение способности генератора создать больше функций путем увеличения числа просачивается свои слои свертки
Повреждение различителя путем сокращения его количества фильтров
Для примера, показывающего, как инвертировать метки действительных изображений, смотрите, Обучают Порождающую соперничающую сеть (GAN).
Этот сценарий происходит, когда счет генератора достигает один или около одного.
Этот график показывает пример генератора, пересиливающего различитель. Заметьте, что счет генератора переходит к одному для многих итераций. В этом случае генератор изучает, как дурачить различитель почти всегда. Когда это произойдет очень рано в учебном процессе, генератор, вероятно, изучит очень простое представление функции, которое дурачит различитель легко. Это означает, что сгенерированные изображения могут быть очень плохими, несмотря на наличие рекордов. Обратите внимание на то, что в этом примере, счет различителя не идет очень близко к нулю, потому что это все еще может классифицировать правильно некоторые действительные изображения.
Если счет не восстанавливается с этих значений для многих итераций, то лучше остановить обучение. Если это происходит, то попытайтесь балансировать эффективность генератора и различителя:
Улучшение способности различителя узнать больше функции путем увеличения числа фильтров
Повреждение генератора путем добавления слоев уволенного
Повреждение генератора путем сокращения его количества фильтров
Коллапс режима - когда GAN производит маленькое множество изображений со многими копиями (режимы). Это происходит, когда генератор не может изучить богатое представление функции, потому что он учится сопоставлять подобные выходные параметры к нескольким различным входным параметрам. Чтобы проверять на коллапс режима, смотрите сгенерированные изображения. Если существует мало разнообразия в выходе, и некоторые из них почти идентичны, то существует вероятный коллапс режима.
Этот график показывает пример коллапса режима. Заметьте, что сгенерированный график изображений содержит много почти идентичных изображений, даже при том, что входные параметры к генератору отличались и были случайны.
Если вы наблюдаете этот случай, то попытайтесь увеличить способность генератора создать более разнообразные выходные параметры:
Увеличение размерностей входных данных к генератору
Увеличение числа фильтров генератора, чтобы позволить ему генерировать более широкое множество признаков
Повреждение различителя путем случайного предоставления лжи помечает к действительным изображениям (одностороннее зеркальное отражение метки)
Для примера, показывающего, как инвертировать метки действительных изображений, смотрите, Обучают Порождающую соперничающую сеть (GAN).
dlnetwork
| forward
| predict
| dlarray
| dlgradient
| dlfeval
| adamupdate