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