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

Generative Models

Иллюстрация: Людвиг Петтерссон (Ludwig Pettersson)

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

Одна из наших главных целей в OpenAI — разработка алгоритмов и методов, которые наделяют компьютеры пониманием нашего мира.

Легко забыть, как много вы знаете об окружающем мире: вы понимаете, что он состоит из трехмерных пространств, движущихся, сталкивающихся и взаимодействующих объектов; людей, которые ходят, разговаривают и думают; животных, которые пасутся, летают, бегают или лают; мониторов, отображающих информацию, закодированную в языке, — о погоде, о том, кто выиграл баскетбольный матч или что произошло в 1970 году.

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

Генеративные модели — один из наиболее перспективных подходов к достижению этой цели. Чтобы обучить генеративную модель, мы сначала собираем большой объем данных в определенной предметной области (например, миллионы изображений, предложений, звуков и т. д.), а затем обучаем модель генерировать похожие данные. Интуитивная основа этого подхода следует известному высказываниюРичарда Фейнмана (Richard Feynman):

«Чего я не могу создать, того я не понимаю».
Ричард Фейнман

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

У генеративных моделей много краткосрочныхприменений. Но в долгосрочной перспективе они обладают потенциалом автоматического изучения естественных признаков набора данных — будь то категории, измерения или что-то совершенно иное.

Генерация изображений

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

Gen Models

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

DCGAN

Одним из таких недавних примеров являетсясеть DCGAN (разработанная Редфордом (Radford) и др., показана ниже). Эта сеть принимает на вход 100 случайных чисел, взятых изравномерного распределения (мы называем ихкодом илилатентными переменными, отмечены красным) и выдает изображение (в данном случае изображения размером 64×64x3 справа, отмеченные зеленым). При инкрементном изменении кодагенерируемые изображения также меняются — это показывает, что модель выучила признаки для описания того, как устроен мир, а не просто запомнила несколько примеров.

Сеть (выделена желтым цветом) состоит из стандартных компонентовсверточной нейронной сети, таких какдеконволюционные слои (обратные сверточным слоям), полносвязные слои и т. д.:

Gen Models Diag 1

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

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

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

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

Gen Models Anim 1

VAE обучается генерировать изображения (логарифмическое время)

Gen Models Anim 2

GAN обучается генерировать изображения (линейное время)

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

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

С математической точки зрения набор данных примеров x1, …, xn x_1, \ldots, x_n рассматривается как выборка из истинного распределения данных  p (x) p (x) . На изображении ниже синяя область показывает ту часть пространства изображений, которая с высокой вероятностью (выше определенного порога) содержит реальные изображения, а черные точки обозначают наши точки данных (каждая из которых представляет собой одно изображение в нашем наборе данных). Теперь наша модель также описывает распределение p^θ (x) \hat{p}_{\theta}(x) (зеленое), которое определяется неявно путем взятия точек из единичного гауссовского распределения (красного) и их проецирования через (детерминированную) нейронную сеть — нашу генеративную модель (желтую). Наша сеть представляет собой функцию с параметрами θ \theta , и настройка этих параметров будет менять сгенерированное распределение изображений. Наша цель состоит в том, чтобы найти такие параметры θ \theta , которые создают распределение, максимально близкое к истинному распределению данных (например, за счет малой дивергенции Кульбака — Лейблера как функции потерь). Следовательно, вы можете представить себе зеленое распределение, которое сначала является случайным, после чего процесс обучения итеративно изменяет параметры θ \theta , растягивая и сжимая его так, чтобы оно лучше соответствовало синему распределению.

Gen Models Diag 2

Три подхода к генеративным моделям

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

  • Генеративно-состязательные сети (GAN), о которых мы уже упоминали выше, представляют процесс обучения как игру между двумя отдельными сетями: сетью-генератором (как показано выше) и второй, дискриминативной сетью, которая пытается классифицировать образцы либо как происходящие из истинного распределения  p (x) p (x) , либо из распределения модели p^(x) \hat{p}(x) . Каждый раз, когда дискриминатор замечает разницу между двумя распределениями, генератор немного корректирует свои параметры, чтобы устранить её, пока в конце концов (теоретически) генератор точно не воспроизведет истинное распределение данных, а дискриминатор не начнет угадывать случайно, будучи не в состоянии найти различия.
  • Вариационные автоэнкодеры (VAE) позволяют формализовать эту задачу в рамках вероятностных графических моделей, где мы максимизируем нижнюю границу правдоподобия данных в логарифмическом масштабе.
  • Авторегрессионные модели, такие как PixelRNN, вместо этого обучают сеть, которая моделирует условное распределение каждого отдельного пикселя с учетом предыдущих пикселей (слева и сверху). Это похоже на подачу пикселей изображения в char-rnn, но RNN работают по изображению как по горизонтали, так и по вертикали, а не просто по одномерной последовательности символов.

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

Наши недавние разработки

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

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

Gen Models Img 2

Реальные изображения (ImageNet)

Gen Models Img 3

Сгенерированные изображения

Наши CIFAR-10 образцы также выглядят очень четкими — работники Amazon Mechanical Turk могут отличить наши образцы от реальных данных с частотой ошибок 21.3% (50% было бы случайным угадыванием):

Gen Models Img 4

Реальные изображения (CIFAR-10)

Gen Models Img 5

Сгенерированные изображения

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

Генеративно-состязательные сети — это относительно новая модель (представленная всего два года назад), и мы ожидаем дальнейшего быстрого прогресса в повышении стабильности этих моделей в процессе обучения.

Совершенствование VAE (код). В этой работе Дурк Кингма (Durk Kingma) и Тим Салиманс представляют гибкий и масштабируемый с точки зрения вычислений метод повышения точности вариационного вывода. В частности, большинство VAE до сих пор обучались с использованием грубых приближенных апостериорных распределений, где каждая латентная переменная независима. Недавние расширения решали эту проблему путем обуславливания каждой латентной переменной предыдущими в цепочке, но это вычислительно неэффективно из-за возникающих последовательных зависимостей. Основным вкладом этой работы, названной обратным авторегрессионным потоком (inverse autoregressive flow, IAF), является новый подход, который, в отличие от предыдущих работ, позволяет распараллеливать вычисления богатых приближенных апостериорных распределений и делать их практически произвольно гибкими.

Мы показываем примеры 32×32 изображений из модели на изображении ниже, справа. Слева для сравнения представлены более ранние образцы из модели DRAW (образцы стандартного VAE выглядели бы еще хуже и более размытыми). Модель DRAW была опубликована всего год назад, что снова подчеркивает стремительный прогресс в обучении генеративных моделей.

Gen Models Img 6

Сгенерировано моделью DRAW

Gen Models Img 7

Сгенерировано VAE, обученным с помощью IAF

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

Infogan 1

(a) Азимут (поза)

Infogan 2

(b) Угол места (высота)

Infogan 3

© Освещение

Infogan 4

(d) Широкий или узкий

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

Следующие два недавних проекта относятся к области обучения с подкреплением (RL) (еще одно направление внимания в OpenAI), но оба они включают в себя компонент генеративной модели.

Исследование на основе любопытства в глубоком обучении с подкреплением с помощью байесовских нейронных сетей (код). Эффективное исследование в многомерных и непрерывных пространствах в настоящее время остается нерешенной задачей в обучении с подкреплением. Без эффективных методов исследования наши агенты хаотично мечутся, пока случайно не натолкнутся на ситуации, приносящие вознаграждение. Этого достаточно во многих простых учебных задачах, но недостаточно, если мы хотим применять эти алгоритмы к сложным условиям с многомерными пространствами действий, что часто встречается в робототехнике. В этой статье Рейн Хаутхуфт (Rein Houthooft) и коллеги предлагают VIME — практический подход к исследованию с использованием неопределенности в генеративных моделях. VIME делает агента самомотивированным; он активно ищет неожиданные состояния-действия. Мы показываем, что VIME может улучшить ряд методов поиска стратегий и достигает значительного прогресса в более реалистичных задачах с разреженными наградами (например, в сценариях, где агент должен изучать примитивы передвижения без какого-либо руководства).

Policy Search 1

Политика, обученная с помощью VIME

Policy Search 2

Политика, обученная с помощью наивного исследования

Наконец, в качестве бонуса мы хотели бы включить пятый проект:  Генеративно-состязательное обучение с подражанием (код), в котором Джонатан Хо (Jonathan Ho) и его коллеги представляют новый подход к обучению с подражанием. Джонатан Хо присоединяется к OpenAI в качестве летнего стажера. Большую часть этой работы он проделал в Стэнфорде, но мы включаем ее сюда как смежное и высококреативное применение GAN к обучению с подкреплением (RL). Стандартная среда обучения с подкреплением обычно требует разработки функции вознаграждения, которая описывает желаемое поведение агента. Однако на практике это иногда может быть связано с затратным процессом проб и ошибок для достижения правильных деталей. Напротив, при обучении с подражанием агент учится на демонстрациях-примерах (например, обеспечиваемых телеопеработка в робототехнике), устраняя необходимость разработки функции вознаграждения.

Running Human
Running Bug

Популярные подходы к подражанию включают двухэтапный конвейер: сначала обучение функции вознаграждения, а затем запуск обучения с подкреплением на основе этого вознаграждения. Такой конвейер может быть медленным, и поскольку он является косвенным, трудно гарантировать, что полученная политика будет работать хорошо. Эта работа показывает, как можно напрямую извлекать политики из данных через связь с GAN. В результате этот подход можно использовать для обучения политик на основе демонстраций экспертов (без вознаграждений) в сложных средах OpenAI Gym, таких как Ant и Humanoid.

Взгляд в будущее

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

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

Авторы

Андрей Карпаты, Питер Аббил, Грег Брокман, Питер Чен, Вики Чунг, Ян Дуан, Ян Гудфеллоу, Дурк Кингма, Джонатан Хо, Рейн Хаутхуфт, Тим Салиманс, Джон Шульман, Илья Суцкевер, Войцех Заремба

Иллюстрация на обложке

Людвиг Петтерссон

Полный текст статьи читайте на OpenAI