Как интерпретировать потерю дискриминатора и потерю генератора в Generative Adversarial Nets?

Я читаю реализацию DCGAN, особенно эту в тензорном потоке.

В этой реализации автор рисует потери дискриминатора и генератора, как показано ниже (изображения взяты из https://github.com/carpedm20/DCGAN-tensorflow):

введите описание изображения здесь

введите описание изображения здесь

И потери дискриминатора, и генератора, похоже, не подчиняются какой-либо закономерности. В отличие от обычных нейронных сетей, потери которых снижаются с увеличением итераций обучения. Как интерпретировать потерю при обучении GAN?


person shapeare    schedule 09.03.2017    source источник
comment
Я думаю, вы имеете в виду дискриминатор, а не определитель.   -  person Dr. Snoopy    schedule 09.03.2017
comment
@MatiasValdenegro Спасибо, что указали.   -  person shapeare    schedule 09.03.2017


Ответы (1)


К сожалению, как вы сказали для GAN, потери очень не интуитивны. В основном это происходит из-за того, что генератор и дискриминатор конкурируют друг с другом, следовательно, улучшение одного означает более высокие потери для другого, пока этот другой лучше не узнает о полученных потерях, что облажает его конкурента и т. Д.

Одна вещь, которая должна происходить достаточно часто (в зависимости от ваших данных и инициализации), - это то, что потери дискриминатора и генератора сходятся к некоторым постоянным числам, например:  (потеря немного отскакивает - это просто свидетельство того, что модель пытается себя улучшить)

Эта конвергенция потерь обычно означает, что модель GAN нашла некоторый оптимум, в котором она не может улучшить больше, что также должно означать, что она усвоила достаточно хорошо. (Также обратите внимание, что сами числа обычно не очень информативны.)

Вот несколько примечаний, которые, я надеюсь, помогут:

  • если потери не совпадают очень хорошо, это не обязательно означает, что модель ничему не научилась - проверьте сгенерированные примеры, иногда они получаются достаточно хорошими. В качестве альтернативы можно попробовать изменить скорость обучения и другие параметры.
  • если модель хорошо сходилась, все же проверьте сгенерированные примеры - иногда генератор находит один / несколько примеров, которые дискриминатор не может отличить от настоящих данных. Проблема в том, что он всегда выдает эти немногие, не создавая ничего нового, это называется коллапсом режима. Обычно помогает внесение некоторого разнообразия в ваши данные.
  • поскольку обычные сети GAN довольно нестабильны, я бы предложил использовать некоторую версию моделей DCGAN, поскольку они содержат некоторые функции, такие как сверточные слои и пакетная нормализация, которые, как предполагается, помогают обеспечить стабильность сходимости. (изображение выше является результатом DCGAN, а не ванильного GAN)
  • Это некоторый здравый смысл, но все же: как и в случае с большинством структур нейронных сетей, настраивающих модель, то есть изменение ее параметров и / или архитектуры в соответствии с вашими определенными потребностями / данными может улучшить модель или испортить ее.
person Massyanya    schedule 17.06.2017
comment
В документе GAN Гудфеллоу говорится о вероятности, а не о потерях. Не могли бы вы упомянуть, что именно изображает сюжет? Другими словами, что именно означает потеря? Любое уравнение или описание будут полезны. - person Ameet Deshpande; 04.09.2018
comment
Код DCGAN можно найти в следующем каталоге github: github.com/carpedm20/DCGAN-tensorflow вы сможете найти потери, определенные в model.py там. Для общей формулы потерь обратитесь к разделу 3.1 следующего документа: arxiv.org/pdf/1611.04076 .pdf В зависимости от того, какой тип GAN используется, он может определяться по-разному. - person Massyanya; 05.09.2018