Adversarial Autoencoders: порождение дискретных объектов | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
iOS Developer. Professional Kotlin Backend Developer Flutter Mobile Developer Symfony Framework C++ Developer. Basic Unity Game Developer. Basic Java Developer. Professional
-35%
Highload Architect Unity Game Developer. Professional React.js Developer Специализация Java-разработчик
-25%
Алгоритмы и структуры данных
-16%
Scala-разработчик C# Developer. Professional
-23%
Разработчик голосовых ассистентов и чат-ботов Team Lead Архитектура и шаблоны проектирования NoSQL Web-разработчик на Python Golang Developer. Professional PostgreSQL Vue.js разработчик Супер-практикум по использованию и настройке GIT Разработчик IoT Подготовка к сертификации Oracle Java Programmer (OCAJP) Программист С HTML/CSS
Инфраструктура
Инфраструктурная платформа на основе Kubernetes Microservice Architecture Базы данных Highload Architect Reverse-Engineering. Professional
-8%
Network engineer. Basic Administrator Linux.Basic MongoDB Infrastructure as a code MS SQL Server Developer Cloud Solution Architecture Мониторинг и логирование: Zabbix, Prometheus, ELK Супер-практикум по использованию и настройке GIT Разработчик IoT Экcпресс-курс «ELK» Супер-интенсив "Tarantool" Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» Экспресс-курс «Введение в непрерывную поставку на базе Docker»
Корпоративные курсы
Безопасность веб-приложений Экосистема Hadoop, Spark, Hive Пентест. Практика тестирования на проникновение Node.js Developer Java QA Engineer. Basic
-18%
Reverse-Engineering. Professional
-8%
DevOps практики и инструменты NoSQL Reverse-Engineering. Basic Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Game QA Engineer Супер - интенсив по Kubernetes Дизайн сетей ЦОД Экспресс-курс «IaC Ansible» Экспресс-курс по управлению миграциями (DBVC) Экспресс-курс "Версионирование и командная работа с помощью Git" Основы Windows Server
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Adversarial Autoencoders: порождение дискретных объектов

ML_Deep_20.06_3_SIte.png

У базовой архитектуры GANs есть одно существенное фундаментальное ограничение – подход не работает, если данные дискретные. 3.pngЧтобы эффективно обновлять «веса», мы должны уметь пропускать градиент от Дискриминатора через примеры, порождённые Генератором. Понятно, что если данные представляют из себя бинарные вектора (например, bag of words или целые предложения), то ни о каком градиенте не может идти речи. Даже если выходом Генератора будет набор некоторых вероятностей, а не конкретный пример, то Дискриминатор, конечно же, легко отличит такой вектор от строгих нулей и единиц. В итоге Генератору не останется ничего, кроме как сойтись к какому-то конкретному бинарному решению (локальному минимуму), из которого он уже не выберется.

Какое же есть решение?

К счастью для нас, обойти такое ограничение можно с помощью старых добрых автоэнкодеров. 4.pngДавайте инвертируем задачу и заставим Генератор отображать реальные данные в шум, а Дискриминатор пытаться отличить этот шум от какого-нибудь заданного приорного распределения (как всегда N(0,1) очень хорошо подходит).

Фактически эта задача не отличается от исходной, но остаётся вопрос: как же нам генерировать новые примеры? Для этого достаточно наложить дополнительное ограничение на Генератор – он должен выдавать не совсем случайный шум, а такой, из которого потом было бы возможно восстановить исходный пример, например, с помощью дополнительной сети – Декодеровщика.

Понятно, что в новой схеме мы не ограничены непрерывностью данных, так как сами данные появляются только на внешних слоях автоэнкодера. А градиент от Дискриминатора свободно течёт через непрерывное распределение внутреннего слоя. Теперь чтобы получить новый пример из данных, мы как и раньше сэмплируем из заданного приорного распределения, но для порождения используем уже не Генератор, а Декодеровщик.

Этот относительно простой трюк позволяет обучать генеративные модели не только для порождения текстов и естественных языков, но и, например, для порождения молекулярных структур, которые тоже представляют из себя дискретные объекты.

Всем интересующимся я крайне рекомендую подробно ознакомиться с оригинальной статьей Adversarial Autoencoders, в которой помимо новой архитектуры авторы демонстрируют, например, то, как с помощью такого подхода можно научиться порождать изображения рукописных цифр, не только задавая цифру, но и её стиль. 5.pngНа этом изображении авторы генерируют различные цифры, фиксируя при этом «стиль» написания. Как видите это работает довольно неплохо!

Есть вопросы? Напишите в комментариях!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться