Генеративные модели от OpenAI

в 16:49, , рубрики: deep learning, GAN, generative models, machine learning, OpenAI, wunder fund, wunderfund, Алгоритмы, Блог компании Wunder Fund, машинное обучение

Генеративные модели от OpenAI - 1

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

Одним из основных направлений деятельности специалистов OpenAI является разработка алгоритмов и методов, которые наделяют компьютеры способностью понимать наш мир.
 
Мы редко задумываемся о том, как много мы знаем о мире, в котором живем. Мы знаем, что он состоит из трехмерных сред, из объектов, которые перемещаются, сталкиваются и взаимодействуют, из людей, которые ходят, разговаривают и думают, из животных, которые пасутся, летают, бегают или лают, из мониторов, отображающих информацию, закодированную с помощью определенного языка. Мы знаем, какая сейчас погода, кто выиграл баскетбольный матч, и что произошло в 1970 году.
 
Это огромный объем информации, к которому, в общем-то, несложно найти путь в физическом мире атомов или в цифровом мире битов. Остается только разработать модели и алгоритмы, способные анализировать и понимать это несметное множество данных.
 
Один из наиболее перспективных способов достижения этой цели — разработка генеративных моделей. Процесс обучения генеративной модели выглядит так: собирается достаточно большой массив данных из какой-либо области (например, миллионы изображений, предложений или звуков и т. д.), а затем модель обучается генерировать такие данные самостоятельно. В основе этого подхода — интуитивно найденная идея, которую можно выразить знаменитой цитатой Ричарда Фейнмана:
 

«Чего не могу воссоздать, того не понимаю».

Ричард Фейнман

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

Создание изображений


Рассмотрим конкретный пример. Предположим, что у нас имеется большая коллекция изображений: например 1,2 миллиона изображений в наборе данных ImageNet. Следует, однако, иметь в виду, что в будущем это может быть обширная коллекция изображений или видеороликов, полученных из Интернета или от поисковых роботов. Если мы изменим размер каждого изображения так, чтобы его ширина и высота равнялись 256 (номинальный размер), наш набор данных будет представлять собой один большой блок пикселей размером 1.200.000x256x256x3 (примерно 200 Гб). Ниже приведены несколько примеров изображений из этого набора данных:

Генеративные модели от OpenAI - 2

Эти изображения являются примерами того, как выглядит наш визуальный мир, и мы называем их «образцами из истинного распределения данных». Теперь нужно создать генеративную модель, которую можно было бы обучать генерировать подобные изображения с нуля. В частности, генеративной моделью в этом случае может быть одна большая нейронная сеть, выводящая изображения, которые мы называем «образцами из модели».

DCGAN

Одной из таких новейших моделей является сеть DCGAN, разработанная учеными во главе с А. Рэдфором (модель показана на рисунке ниже). Эта сеть принимает в качестве входных данных 100 случайных чисел, полученных из равномерного распределения (мы называем их кодом или скрытыми переменными, на схеме они обозначены красным цветом) и выводит изображение (в данном случае изображения размером 64x64x3 справа, обозначенные зеленым цветом). Пошаговое изменение кода влечет за собой соответствующие изменения генерируемых изображений. Это означает, что модель достаточно изучила свойства изображений, чтобы описать, как выглядит мир, а не просто запомнить некоторые примеры.
 
Сеть (отмечена желтым) состоит из таких стандартных компонентов сверточной нейронной сети, как слои деконволюции (результат разворачивания сверточных слоев), полносвязные слои и т. д .:
 Генеративные модели от OpenAI - 3

DCGAN инициализируется случайными весами, поэтому случайный код, подключенный к сети, генерирует полностью случайное изображение. Однако очевидно, что в сети миллионы параметров, которые мы можем изменить, и наша цель — научиться задавать эти параметры так, чтобы образцы, создаваемые сетью из случайных кодов, были похожими на данные, использовавшиеся для ее обучения. Иначе говоря, мы хотим, чтобы распределение модели соответствовало истинному распределению данных в пространстве изображений.

Обучение генеративной модели

Предположим, что мы использовали только что инициализированную сеть для генерации 200 изображений, начиная каждый раз с нового случайного кода. Вопрос в том, как настроить параметры сети, чтобы побудить ее в будущем создавать несколько более правдоподобных образцов? Причем речь идет не о простой контролируемой настройке. Для этих 200 генерируемых изображений у нас нет никаких явных желаемых требований, кроме того, чтобы они выглядели как настоящие. Один из удачных подходов к решению этой задачи — следовать алгоритму генеративно-состязательной сети (Generative adversarial network, GAN). Для этого нужно ввести вторую сеть-дискриминатор (как правило, это стандартная сверточная нейронная сеть), которая попытается определить, является ли входное изображение настоящим или сгенерированным.

Например, можно вводить в сеть-дискриминатор 200 сгенерированных и 200 реальных изображений и обучать ее подобно стандартному классификатору различать два вида изображений по источнику. Хитрость в том, чтобы помимо этого применить метод обратного распространения ошибки к обеим сетям, дискриминатору и генератору, и таким образом узнать, как изменить параметры генератора, чтобы он мог усложнить дискриминатору распознавание своих 200 образцов. Таким образом, эти две сети вступают в противоборство: дискриминатор пытается отличить реальные изображения от поддельных, а генератор пытается создать образы, которые дискриминатор примет за реальные. В итоге сеть-генератор научится выводить изображения, неотличимые для дискриминатора от настоящих.

К сопоставлению этих распределений существует еще несколько подходов, о которых мы кратко расскажем ниже. Но перед этим мы бы хотели визуально представить суть процесса обучения на примере следующей анимации, демонстрирующей образцы из генеративной модели.
В обоих случаях сеть-генератор начинает с шумных и хаотичных образцов, но со временем сосредотачивается и получает более правдоподобную статистику изображения:
 
 Генеративные модели от OpenAI - 4
VAE учится генерировать изображения (логарифмическое время)
 Генеративные модели от OpenAI - 5
GAN учится генерировать изображения (линейное время)

Удивительное зрелище: нейронные сети изучают, как выглядит визуальный мир! Такие модели обычно имеют всего около ста миллионов параметров, поэтому сеть, обучаемая на ImageNet, должна сжимать (с потерями) 200 Гб пиксельных данных до 100 Мб весов. С этой целью модель стремится выявить наиболее характерные особенности данных: например, она может узнать, что пиксели, находящиеся рядом, могут быть одного цвета, или что мир состоит из горизонтальных или вертикальных рядов пикселей или разноцветных пятен. С течением времени модель может обнаружить множество более сложных закономерностей: определенные типы фонов, объектов, текстур, встречающихся в определенных прогнозируемых сочетаниях, или постепенно трансформирующихся в видео, и т. д.

Более общая формулировка

В математическом смысле это может быть набор данных примеров $x1,…,xn$ в качестве образцов из истинного распределения данных. В приведенном ниже примере синяя область показывает часть пространства изображения, которое с высокой вероятностью (при превышении некоторого порога) содержит реальные изображения, а черными точками обозначены точки наших данных (каждая из них является одним изображением в нашем наборе данных). Теперь наша модель уже описывает распределение ^p(x) (зеленый цвет), определяемое имплицитно путем импорта точек из нормального (гауссовского) распределения с нулевым средним значением (красный) и их мэппинга в нейронной (детерминированной) сети, т.е. в нашей генеративной модели (желтый).

Наша сеть — это функция с параметрами $θ$, и изменение этих параметров будет менять и настраивать генерируемое распределение изображений. Следующая наша цель — найти параметры $θ$, создающие распределение близко соответствующие истинному распределению данных (например, характеризующееся небольшой потерей данных (дивергенцией Кульбака–Лейблера). Таким образом, можно представить, что зеленое распределение начинается со случайных значений, а затем в процессе обучения итеративно меняет параметры $θ$ и стремится растянуть и сжать его, чтобы добиться более точного соответствия синему распределению.
 Генеративные модели от OpenAI - 10

Три подхода к обучению генеративных моделей

Большинство генеративных моделей основаны на описанном выше базовом принципе, но имеют множество частных различий. Далее мы покажем эти различия на трех известных примерах методов обучения генеративных моделей.
 
В генеративно-состязательных сетях (GAN), уже упомянутых выше, процесс обучения представляет собой игру между двумя отдельными сетями: сетью-генератором (см. выше) и сетью-дискриминатором, стремящейся определить, являются ли объекты примерами из истинного распределения p(x) или распределения модели ^p(x). Каждый раз, когда дискриминатор замечает разницу между двумя распределениями, генератор немного корректирует свои параметры, чтобы разница стала менее заметной. В итоге (теоретически), генератор научится точно воспроизводить истинное распределение данных, а дискриминатор, проверяя случайные образцы из двух распределений, не их сможет отличить.

Вариационные автокодеры (VAE) позволяют формализовать эту проблему в рамках вероятностных графических моделей, где мы максимизируем нижнюю границу логарифмического правдоподобия данных.

В то же время авторегрессионные модели, такие как PixelRNN, учат сеть моделировать условное распределение каждого отдельного пикселя с учетом предыдущих пикселей (по направлению влево и вверх). Этот процесс аналогичен включению пикселей изображения в многослойную рекуррентную сеть char-rnn, но рекуррентные нейрсети (RNN) работают с изображением не в одном направлении, а в двух — по горизонтали и по вертикали.

Все эти подходы имеют свои плюсы и минусы. В частности, вариационные автокодеры позволяют не только осуществить обучение, но и эффективно выполнить байесовский вывод в сложных вероятностных графических моделях со скрытыми переменными (в качестве примеров относительно сложных из недавно разработанных моделей можно рассмотреть DRAW или Attend Infer Repeat). Однако образцы, сгенерированные этими моделями, часто оказываются слегка размытыми. Самые четкие изображения в данный момент удается получить с помощью сетей GAN, но их сложнее оптимизировать из-за неустойчивой динамики обучения. PixelRNNs отличаются довольно простым и стабильным процессом обучения (softmax loss) и позволяют добиться самого высокого на сегодняшний день логарифмического правдоподобия (т.е. правдоподобия генерируемых данных). Но эти системы оказываются относительно неэффективными в процессе выборки (сэмплинга) и испытывают сложности при предоставлении кодов в низком разрешении для изображений. Каждая из этих моделей представляет перспективную область научных исследований, и нам бы хотелось проследить, как далеко зайдут эти исследования в будущем.

 

Разработки OpenAI

Генеративные модели представляют особый интерес для коллектива исследователей OpenAI. Совсем недавно нами были разработаны четыре проекта, призванные внести вклад в развитие этой области знаний. Результаты каждого проекта сопровождаются исходным кодом и подробным техническим отчетом.
 
Усовершенствование GAN (код). Как уже упоминалось выше, GAN — весьма многообещающее семейство генеративных моделей, так как GAN, в отличие от других методов, способны генерировать очень чистые и четкие изображения и осваивать коды, содержащие ценную информацию о текстурах этих изображений. Однако главный принцип GAN — игра, которую ведут две сети, и это важное (и непростое) условие их равновесия. Например, обе сети могут испытывать трудности в выборе между двумя решениями, а сеть-генератор может перестать выполнять свои задачи. В настоящей работе Тим Салиманс, Иэн Гудфеллоу, Войцех Заремба и их коллеги представили ряд новых методов повышения эффективности обучения GAN. Эти методы позволяют нам масштабировать GAN и получать удачные образцы размером 128x128 из ImageNet:

 Генеративные модели от OpenAI - 11
Настоящие изображения (ImageNet)

 Генеративные модели от OpenAI - 12
Сгенерированные изображения

Наши образцы из набора данных CIFAR-10 также отличаются большой четкостью. Операторы Amazon Mechanical Turk отличают наши образцы от настоящих с частотой ошибок 21,3% (для случайного угадывания вероятность ошибки — 50%):

Генеративные модели от OpenAI - 13 
Настоящие изображения (CIFAR-10)

 Генеративные модели от OpenAI - 14
Сгенерированные изображения

Мы не только генерируем красивые изображения, но и реализуем новый подход полуконтролируемого обучения GAN, согласно которому дискриминатор производит дополнительный вывод, определяя образцы, отмеченные на входе. Этот подход позволяет нам получить результаты высочайшего уровня изображений из наборов данных MNIST, SVHN и CIFAR-10, используя настройки с очень небольшим количеством маркированных примеров. Например, для изображений MNIST, мы достигаем точности 99,14%, используя всего 10 маркированных примеров для каждого класса для полносвязной нейронной сети. Этот результат очень близок к самым известным результатам применения полностью контролируемых методов обучения сетей, в которых используя все 60 000 маркированных примеров. Это очень многообещающе достижение, если учесть, что получение маркированных примеров практическим путем может оказаться довольно дорогостоящим.

Генеративно-состязательная сеть — относительно новая модель (ей всего два года), и мы надеемся, что теперь такие сети будут развиваться быстрее повышения и станут более стабильными в обучении.
 
Усовершенствование VAE (код). В этой разработке Дерк Кингма и Тим Салиманс представляют гибкий и масштабируемый путем вычислений метод повышения точности вариационного вывода. До сих пор большинство автоэнкодеров обучались с использованием приближенных апостериорных вероятностей, в которых каждая скрытая переменная независима. В недавних расширениях были предприняты попытки решить эту проблему обуславливая каждую скрытую переменную другими переменными, предваряющими ее в цепи. Однако этот способ представляется вычислительно неэффективным из-за введенных последовательных зависимостей. Основной научный вклад этой работы называется обратным авторегрессионным потоком (англ. Inverse Autoregressive Flow, сокращенно IAF). Это новый подход, который, в отличие от предыдущей разработки, позволяет нам распараллелить вычисления обширных приближенных апостериорных вероятностей и сделать их почти произвольно гибкими.
 
Во второй таблице ниже собраны примеры изображений из модели размером 32х32. В первой таблице для сравнения приведены более ранние образцы из модели DRAW (образцы из ванильных версий VAE выглядели еще хуже и более размытыми). Тот факт, что модель DRAW вышла в свет всего год назад, можно считать еще одним подтверждением быстрого развития исследований в области обучения генеративных моделей.
 
Генеративные модели от OpenAI - 15
Сгенерировано из модели DRAW

 Генеративные модели от OpenAI - 16
Сгенерировано из VAE, прошедшего обучение методом IAF

InfoGAN (код). Питер Чен и его коллеги представили InfoGAN — расширение GAN, которое изучает разделенные (disentangled) и интерпретируемые представления для изображений. Обычная сеть GAN справляется с задачей воспроизведения распределения данных в модели, но структура и организация пространства кода не определяются. Существует множество возможных решений для сопоставления (мэппинга) нормального гауссовского распределения с изображениями, и то которое вы итоге получим мы, может оказаться сложным и слишком запутанным. InfoGAN снабжает пространство кода дополнительной структурой, добавляя новые цели, которые предполагают максимизацию взаимного обмена информацией между малыми подмножествами переменных представления и наблюдателем.

Этот подход дает примечательные результаты. Например, в изображениях трехмерных граней, приведенных ниже, мы меняем один непрерывный параметр кода, оставляя остальные неизменными. Из пяти приведенных примеров (на протяжении каждой строки) видно, что результирующие параметры в коде учитывают интерпретируемые размеры, и что модель, возможно, уже сознает существование различных углов съемки, выражений лиц и т. д., хотя ей никто не сообщал о существовании и важности этих различий:
 
Генеративные модели от OpenAI - 17

Следует также отметить, что четкие, разделенные представления изображений удавалось получить и ранее (например, в модели DC-IGN Т. Кулкарни и др.). Но эти подходы основаны на дополнительном наблюдении, в то время как наш подход реализуется как полностью неконтролируемый.

Два других новых проекта посвящены еще одной сфере пристального внимания коллектива исследователей OpenAI — обучению с подкреплением (англ. reinforcement learning) и объединены общим интересом к генеративным моделям.

Исследовательский процесс, основанный на любознательности, в методах глубокого обучения с подкреплением посредством байесовских нейронных сетей (код). Успешный исследовательский процесс в многомерных и непрерывных пространствах сегодня остается одной из нерешенных задач в обучении с подкреплением. Без эффективных методов исследования агенты наших сетей суетятся впустую до тех пор, пока они случайно не сталкиваются с ситуациями, ведущими к вознаграждению. Для многих простых «игрушечных» задач этого достаточно. Но если мы хотим применить эти алгоритмы к сложным настройкам в реальных многомерных пространствах, как принято в робототехнике, этого мало. В этой статье Рейн Хутхоуфт и его коллеги предлагают VIME, практический подход к исследованию с использованием неопределенности в генеративных моделях. VIME позволяет агенту мотивировать себя самостоятельно и активно искать удивительные варианты состояния-действия. Мы демонстрируем, как VIME может улучшить целый ряд методов поиска стратегии (policy search methods) и получить значительные результаты в решении более реалистичных задач с более редким вознаграждением (например, в сценариях, в которых агент должен изучать основные способы передвижения, не получая каких-либо указаний).

Генеративные модели от OpenAI - 18
Обучение стратегиям с помощью VIME
 
Обучение стратегиям через «наивный» исследовательский процесс

И в заключение мы хотели бы представить дополнительный пятый проект: Генеративное состязательное имитационное обучение (Generative Adversarial Imitation Learning) (код), в котором Джонатан Хо и его коллеги представляют новый подход к имитационному обучению. Джонатан Хо принял предложение поработать в коллективе OpenAI в качестве летней стажировки. Большую часть этой работы он выполнил во время учебы в Стэнфордском университете, однако мы приводим результаты его исследования здесь в качестве близкого по теме и очень творческого применения GAN в обучении с подкреплением. Стандартная схема обучения с подкреплением обычно требует разработки функции вознаграждения, которая описывает желаемое поведение агента. Однако на практике это может оказаться довольно дорогостоящим процессом и на пути к правильному результату будет множество проб и ошибок. В то же время при имитационном обучении агент учится путем демонстрации примеров (например, посредством телеоперацией в робототехнике), что устраняет необходимость разработки функции вознаграждения.
 
 Генеративные модели от OpenAI - 19

Генеративные модели от OpenAI - 20
 
Наиболее популярные методы имитационного обучения включают в себя двухступенчатый процесс, первым шагом которого будет изучение функции вознаграждения, а вторым — собственно обучение с подкреплением в виде этого вознаграждения. Такой процесс может занимать много времени, и, из-за его опосредованного характера, трудно гарантировать, что принятая в итоге стратегия принесет нужные результаты. В исследовании, о котором идет речь, доказано, что стратегии можно напрямую извлекать из данных посредством объединения с GAN. Таким образом, новый метод можно использовать для изучения стратегий по демонстрациям работы экспертов (без вознаграждений) в таких «жестких» средах OpenAI Gym, как «Муравей» и «https://gym.openai.com/envs/Humanoid-v1».

Что дальше

Генеративные модели — быстро развивающаяся область исследований. Совершенствуя эти модели, расширяя возможности обучения и увеличивая наборы данных, мы, вероятно, сможем создать образцы, отображающие полностью правдоподобные изображения или видео. Такие модели могут найти самые разные применения: создавать картины по заданным параметрам или выполнять новые команды в Photoshop ++, (например, «сделать мою улыбку шире»). Другие известные в настоящее время применения генеративных моделей: удаление «шума» изображений, инпейтинг, суперразрешение, структурированное прогнозирование, исследовательский процесс в обучении с подкреплением и предварительное обучение нейронной сети в тех случаях, когда применение маркированных данных (labeled data) является дорогостоящим.
 
Однако более важный потенциал этой работы заключается в том, что в процессе обучения генеративным моделям мы наделяем компьютер пониманием нашего мира и того, из чего он состоит.
 

Автор: mr-pickles

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js