Часть III • Продвинутые возможности глубокого обучения с TensorFlow.js
батч сгенерированных (генератором) изображений и батч настоящих изображе
ний. Но генератор не может брать изображения «с потолка», в качестве входного
сигнала ему необходим какойто вектор. Латентные векторы, по сути, аналогичны
использовавшимся для VAE в разделе 10.2. Латентный вектор для каждого сгене
рированного генератором изображения представляет собой одномерный тензор
формы
[latentSize]
. Но, как и в большинстве процедур обучения в книге, данный
шаг выполняется над батчем изображений за раз. Поэтому форма латентного векто
ра:
[batchSize,
latentSize]
. А настоящие изображения мы берем непосредственно
из самого набора данных MNIST. Ради симметрии на каждом шаге обучения мы
выбираем
batchSize
настоящих изображений (ровно столько же, сколько и сгене
рированных).
Сгенерированные и настоящие изображения объединяются в один батч изобра
жений, представленный в виде тензора формы
[2
*
batchSize,
28,
28,
1]
. К этому
объединенному батчу изображений применяется дискриминатор, выдающий на
выходе предсказанные оценки вероятности реальности отдельных изображений,
которые легко можно сверить с контрольными значениями (мы знаем, какие изо
бражения настоящие, а какие — сгенерированные!) с помощью функции потерь на
основе бинарной перекрестной энтропии. Далее в дело вступает уже привычный
нам алгоритм обратного распространения ошибки, который обновляет весовые
параметры дискриминатора с помощью оптимизатора (не показанного на рисунке),
немного подталкивая дискриминатор в сторону правильных предсказаний. Учтите,
что единственный вклад генератора в этот шаг обучения состоит в предоставлении
сгенерированных примеров данных, но в процессе обратного распространения
ошибки он не обновляется. Обновление генератора происходит на следующем шаге
обучения (рис. 10.11).
Рисунок 10.11 иллюстрирует шаг обучения генератора. Генератор получает воз
можность сделать еще один батч сгенерированных изображений. Но в отличие от
обучения дискриминатора никакие настоящие изображения MNIST нам не нужны.
Дискриминатор получает на входе этот батч сгенерированных изображений вместе
с батчем бинарных меток реальности изображений. Задавая значения всех меток
реальности равными 1, мы
притворяемся
, что сгенерированные изображения на
стоящие. Конечно, изображения сгенерированные (ненастоящие), но пусть метки
реальности все равно указывают, что они настоящие. Дискриминатор может (совер
шенно правильно) присвоить низкие значения вероятностей реальности некоторым
из входных изображений, но при этом значение функции потерь на основе бинарной
перекрестной энтропии будет большим благодаря фальшивым меткам реальности,
и в результате обратного распространения ошибки генератор будет обновлен так, что
метки реальности дискриминатора чутьчуть увеличатся. Обратите внимание, что
процесс обратного распространения ошибки обновляет
только
генератор, оставляя
дискриминатор без изменений. Это еще одна важная хитрость, благодаря которой
не дискриминатор снижает планку реалистичности изображений, а генератор
создает чуть более реалистичные изображения. Такой эффект достигается за счет
блокирования дискриминатора модели — эта операция применялась при переносе
обучения в главе 5.
Do'stlaringiz bilan baham: |