Глава 10. Генеративное глубокое обучение
419
Вопервых, обратите внимание на дополнительный входной сигнал генератора
(класс цифры), позволяющий указывать ему, изображения каких цифр генерировать.
Кроме того, дискриминатор теперь выводит не только предсказание относительно
подлинности изображения, но и предсказание класса цифры. В результате необхо
димо обучать обе выходные верхушки дискриминатора. Обучение части, предсказы
вающей реальность изображения, остается таким же, как и раньше (см. рис. 10.10);
обучение части, предсказывающей класс цифры, основывается на том, что нам из
вестно, к каким классам цифр относятся сгенерированные, а к каким — настоящие
изображения. Эти две верхушки модели компилируются с различными функциями
потерь, отражающими разную сущность предсказаний. Для предсказания подлин
ности мы используем в качестве функции потерь бинарную перекрестную энтропию,
а для предсказания класса цифры — разреженную категориальную перекрестную
энтропию. Это видно в следующей
строке кода из файла
mnist-acgan/gan.js
:
discriminator.compile({
optimizer: tf.train.adam(args.learningRate, args.adamBeta1),
loss: ['binaryCrossentropy', 'sparseCategoricalCrossentropy']
});
Как демонстрируют две изогнутые стрелки на рис. 10.13, распространяющиеся
обратно градиенты для обеих функций потерь прибавляются друг к другу при об
новлении весовых коэффициентов дискриминатора. Рисунок 10.14 представляет
собой расширенную версию рис. 10.11, на нем приведена подробная схема обучения
генератора ACGAN. Эта схема показывает, как генератор обучается генерировать
правильные изображения для конкретных классов цифр, помимо того, что обуча
ется генерировать правдоподобные изображения. Как и на рис. 10.13, новые части
выделены, а уже присутствовавшие на рис. 10.11 части отображены серым цветом.
Из выделенных частей видно, что метки, подаваемые на вход шага обучения, теперь
включают не только метки реальности изображений, но и метки классов цифр. Как
и ранее, все метки реальности специально сделаны равными 1. Добавленные же
новые метки классов цифр более «правдивы» в том смысле, что мы действительно
пропустили их через генератор.
Ранее мы видели, как в результате любых расхождений между фиктивными
метками реальности изображений и выходными значениями вероятностей дис
криминатора генератор ACGAN обновляется так, что совершенствует свое умение
«обманывать» дискриминатор. Метки классов цифр здесь играют схожую роль.
Например, если мы сказали генератору сгенерировать изображение для цифры 8,
но дискриминатор классифицировал его как изображение цифры 9, значение раз
реженной категориальной перекрестной энтропии будет высоким, как и значения
соответствующих градиентов. В результате весовые коэффициенты генератора
обновятся таким образом, что генератор в следующий раз сгенерирует изображе
ние, более напоминающее цифру 8 (с точки зрения дискриминатора). Разумеется,
такое обучение генератора сработает, только если дискриминатор уже достаточно
хорошо умеет классифицировать изображения по десяти классам цифр MNIST.
Это помогает обеспечить вышеописанный шаг обучения дискриминатора. Опять же
мы видим, как дискриминатор и генератор сплетаются, подобно инь и ян, во время
обучения ACGAN.