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

Курсы

Программирование
Разработчик на Spring Framework
-5%
iOS Developer. Professional
-8%
Golang Developer. Professional
-6%
Базы данных
-12%
Agile Project Manager
-5%
C# ASP.NET Core разработчик
-6%
Android Developer. Basic
-10%
React.js Developer
-4%
MS SQL Server Developer
-8%
Scala-разработчик
-8%
Java Developer. Basic
-8%
Алгоритмы и структуры данных
-9%
Разработчик IoT
-13%
PostgreSQL
-8%
Подготовка к сертификации Oracle Java Programmer (OCAJP) Python Developer. Professional Разработчик программных роботов (RPA) на базе UiPath и PIX Unity Game Developer. Basic Разработчик голосовых ассистентов и чат-ботов Node.js Developer Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes iOS Developer. Basic Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool"
Инфраструктура
DevOps практики и инструменты
-12%
Базы данных
-12%
Network engineer. Basic
-10%
Network engineer
-4%
Инфраструктурная платформа на основе Kubernetes
-6%
Экспресс-курс по управлению миграциями (DBVC)
-10%
Мониторинг и логирование: Zabbix, Prometheus, ELK
-10%
Administrator Linux. Professional
-6%
Разработчик IoT
-13%
Основы Windows Server Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов VOIP инженер Супер-практикум по работе с протоколом BGP NoSQL Супер-практикум по использованию и настройке GIT Супер-интенсив «СУБД в высоконагруженных системах» Экспресс-курс «IaC Ansible»
Специализации Курсы в разработке Подготовительные курсы
+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 комментариев
Для комментирования необходимо авторизоваться