420
Часть III • Продвинутые возможности глубокого обучения с TensorFlow.js
Рис.
10.14.
Схематическая иллюстрация алгоритма обучения генератора GAN. Дополняет схему с
рис. 10.11 частями, относящимися к
классам
цифр. Прочие части схемы, уже приведенные на рис. 10.11, отображены серым цветом
Глава 10. Генеративное глубокое обучение
421
Обучение GAN: арсенал приемов
Процесс обучения и настройки GAN печально известен своей сложностью. Обуча
ющие сценарии, приведенные в примере mnistacgan, — результат колоссальной
работы исследователей методом проб и ошибок. Как и многое другое в глубоком
обучении, это скорее искусство, а не точная наука — эвристические правила, а не
систематизованная теория. Они подтверждаются определенной степенью интуитив
ного понимания исследуемого феномена и достаточно хорошо работают на практике,
хотя и не всегда.
Вот список заслуживающих упоминания приемов, которые мы использовали
в ACGAN в этом разделе.
z
z
В качестве функции активации последнего слоя conv2dTranspose в генераторе мы
использовали th. В прочих типах моделей активация на основе th встречается реже.
z
z
Повысить устойчивость к ошибкам помогает введение в модель элемента случай
ности. Поскольку обучение GAN порой приводит к динамическому равновесию,
GAN способна завязнуть на одном месте самыми разнообразными способами.
Введение элемента случайности во время обучения помогает предотвратить
подобный исход. Мы будем вводить в модель случайность двумя способами:
с помощью дропаута в дискриминаторе или «слабой единицы» (0,95) в качестве
значений меток реальности в дискриминаторе.
z
z
Создавать проблемы при обучении GAN могут разреженные градиенты (градиен
ты, существенная доля значений которых равна нулю). В прочих разновидностях
глубокого обучения разреженность часто желательна, но не в GAN. Привести
к разреженности градиентов могут субдискретизация с выбором максимального
значения и функции активации ReLU. Поэтому вместо выбора максимального
значения при субдискретизации рекомендуется использовать шаговую свертку
(strided convolution), как мы и делаем в коде создания генератора в листин
ге 10.10. Вместо обычной функции активации ReLU рекомендуется использовать
функцию активации leakyReLU с небольшим отрицательным значением у отри
цательной части вместо нуля. Ее также можно видеть в листинге 10.10.
10.3.4. Обучение ACGAN для набора данных MNIST
и генерация изображений в действии
Пример mnistacgan можно извлечь и подготовить к запуску с помощью следующих
команд:
git clone https://github.com/tensorflow/tfjs-examples.git
cd tfjs-examples/mnist-acgan
yarn
Выполнение примера включает два этапа: обучение в Node.js и генерацию в брау
зере. Для запуска процесса обучения достаточно такой команды:
yarn train
422
Do'stlaringiz bilan baham: |