Справочная информация:
Я получал необычные потери и неточности при обучении GAN с пакетными слоями нормализации в дискриминаторе с использованием tf.keras. GAN имеют оптимальное значение целевой функции log (4), которое возникает, когда дискриминатор совершенно не способен отличить реальные выборки от подделок и, следовательно, прогнозирует 0,5 для всех выборок. Когда я включаю слои BatchNormalization в свой дискриминатор, и генератор, и дискриминатор достигают почти идеальных оценок (высокая точность, низкие потери), что невозможно в состязательной обстановке.
Без BatchNorm:
Этот рисунок показывает потери (y) за эпоху (x), когда BN не используется. Обратите внимание, что случайные значения ниже теоретического минимума связаны с тем, что обучение является итеративным процессом. Эта цифра показывает точность, когда BN не используется, которая составляет около 50% каждая. Обе эти цифры показывают разумные значения.
С BatchNorm:
Эта цифра показывает потери (y) за эпоху (x) при использовании BN. Посмотрите, как цель GAN, которая не должна опускаться ниже log (4), приближается к 0. На этом рисунке показана точность при использовании BN, причем оба значения приближаются к 100%. GAN являются состязательными; генератор и дискриминатор не могут иметь точность 100%.
Вопрос:
Код для построения и обучения GAN можно найти здесь . Я что-то упустил, или я допустил ошибку в своей реализации, или есть ошибка в tf.keras? Я почти уверен, что это техническая проблема, а не теоретическая проблема, которую могут решить «GAN-хаки». Обратите внимание, что это включает в себя только использование слоев BatchNormalization в дискриминаторе; использование их в генераторе не вызывает этой проблемы.