Авторы: Харшит Шарма, Саураб Мишра

Генеративные модели - это подмножество обучения без учителя, в котором с учетом некоторых обучающих данных мы генерируем новые выборки / данные из того же распределения. Есть два способа моделирования этого распределения, наиболее эффективными и популярными из которых являются авторегрессивные модели, автокодировщики и сети GAN.

Основное различие между генерирующими состязательными сетями (GAN) и авторегрессивными моделями заключается в том, что GAN изучают неявное распределение данных, тогда как последние изучают явное распределение, управляемое априорной структурой модели. Распределение может быть любым, например ярлык класса, изображения машин или кошек. Проще говоря, априор означает вероятностное распределение количества.

Некоторые из преимуществ авторегрессивных моделей перед GAN:

1. Предоставляет способ расчета вероятности: эти модели имеют то преимущество, что они возвращают явные плотности вероятности (в отличие от GAN), что упрощает их применение в таких областях, как сжатие и вероятностное планирование и исследование.

2. Обучение более стабильно, чем GAN: обучение GAN требует нахождения равновесия по Нэшу. Поскольку алгоритм, который бы это делал, отсутствует, обучение GAN нестабильно по сравнению с PixelRNN или PixelCNN.

3. Он работает как для дискретных, так и для непрерывных данных. Трудно научиться генерировать дискретные данные для GAN, например текст.

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

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

Чтобы решить эту проблему, нам нужна управляемая и масштабируемая модель. PixelRNN и PixelCNN являются частью класса авторегрессивных моделей, которые удовлетворяют обоим этим условиям.

Такие модели предпочтительно использовать для завершения изображения. Причина того же в том, что она работает лучше, чем другие генеративные модели для такого рода проблем.

ПИКСЕЛЬ RNN

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

Чтобы обработать эти нелинейные и долгосрочные зависимости между значениями пикселей и распределениями, нам нужна выразительная модель последовательности, такая как рекуррентная нейронная сеть (RNN). Было показано, что RNN чрезвычайно эффективны при решении проблем последовательности.

Условная независимость

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

Цель здесь состоит в том, чтобы присвоить вероятность p (x) каждому пикселю изображения (n x n). Это можно сделать, записав вероятность пикселя xi как:

Это вероятность i-го пикселя с учетом вероятности всех ранее сгенерированных пикселей. Генерация идет строка за строкой и пиксель за пикселем. Также каждый пиксель xi совместно определяется всеми тремя цветовыми каналами: красным, зеленым и синим (RGB). Условная вероятность i-го пикселя становится:

Таким образом, каждый цвет зависит от других цветов, а также от ранее созданных пикселей.

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

Архитектура модели:

Можно использовать четыре различных архитектуры, а именно:

Row LSTM, Diagonal BiLSTM, полностью сверточная сеть и многомасштабная сеть.

Сеть состоит из 12 уровней двухмерных LSTM. Используются два типа слоев LSTM:

  1. Строка LSTM: первый слой представляет собой свертку 7x7, использующую маску типа A. За ним следует вход для слоя состояния, который представляет собой свертку 3x1, которая использует маску типа B и состояние 3x1 для состояние сверточного слоя, который не замаскирован. Затем карта характеристик проходит через пару сверточных слоев 1x1, состоящих из ReLU и маски типа B. Последний уровень архитектуры - это 256-полосный слой softmax.
  2. Диагональный BiLSTM. Единственное различие между его архитектурой и Row LSTM заключается во входных данных для слоев состояния и состоянии для слоев состояния. Он имеет вход свертки 1x1 для состояния слоя с типом маски B и состояние свертки 1x2 для состояния слоя без маски.

Строка LSTM

Скрытое состояние (i, j) = Скрытое состояние (i-1, j-1) + Скрытое состояние (i-1, j + 1) + Скрытое состояние (i-1, j) + p (i, j)

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

Диагональ BiLSTM

пиксель (i, j) = пиксель (i, j-1) + пиксель (i-1, j).

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

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

Маскированные свертки:

Функции для каждой позиции ввода в каждом слое разделены на три части, каждая из которых соответствует цвету (RGB). Для вычисления значений канала G нам нужно значение канала R вместе со значениями всех предыдущих пикселей. Точно так же канал B требует информации как о R, так и о G-каналах. Чтобы ограничить сеть соблюдением этих ограничений, мы применяем маски к сверткам.

Мы используем два типа масок:

  1. Тип A: эта маска применяется только к первому сверточному слою и ограничивает соединения теми цветами в текущих пикселях, которые уже были предсказаны.
  2. Тип B: эта маска применяется к другим слоям и позволяет подключаться к прогнозируемым цветам в текущих пикселях.

Маски - важная часть сети, которая поддерживает количество каналов в сети.

Функция потерь и показатель оценки

Здесь отрицательное логарифмическое правдоподобие (NLL) используется в качестве метрики потерь и оценки, поскольку сеть предсказывает (классифицирует) значения пикселя из значений 0–255.

Пиксель CNN

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

Первый слой представляет собой свертку 7x7, которая использует маску A, а остальные слои используют свертку 3x3 и маску B. Затем карта характеристик проходит через пару слоев, состоящих из активации ReLU и свертки 1x1. Последний уровень этой архитектуры - это 256-полосный слой softmax.

PixelCNN значительно снижает время обучения по сравнению с PixelRNN. Однако создание изображения по-прежнему осуществляется последовательно, поскольку каждый пиксель должен быть возвращен в качестве входных данных в сеть для вычисления следующего пикселя. Главный недостаток PixelCNN заключается в том, что его производительность хуже, чем у PixelRNN. Еще один недостаток - наличие слепого пятна в рецептивном поле. Захват рецептивного поля CNN происходит в треугольной форме. Это приводит к тому, что несколько пикселей остаются за пределами воспринимающего поля, как показано на рисунке ниже. Поскольку сверточные сети захватывают ограниченное воспринимающее поле (в отличие от BiLSTM) и вычисляют характеристики для всех пикселей сразу, эти пиксели не зависят от всех предыдущих пикселей, что нежелательно. Сверточные слои не могут полностью обработать рецептивные поля, что приводит к небольшому просчету значений пикселей. Пропущенные пиксели составляют слепое пятно.

Gated PixelCNN

Он улучшает архитектуру PixelCNN, при этом совпадая с логической вероятностью PixelRNN.

Основная идея того, почему PixelRNN превосходит PixelCNN, заключается в том, что он использует слои LSTM. Приемное поле LSTM охватывает все соседние пиксели в сети, в то время как оно увеличивается с глубиной в PixelCNN. Основное улучшение или изменение, внесенное в этот метод, - это использование следующей активации вместо ReLU:

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

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

Результаты показывают, что Gated PixelCNN (3,03 бит / дим) превосходит PixelCNN (3,14 бит / дим) на 0,11 бит / дим, и его производительность сравнима с PixelRNN (3,00 бит / дим), при этом требуется меньше половины времени обучения.

Пиксель CNN ++

Эта модель OpenAI вносит некоторые изменения для повышения производительности PixelCNN, сохраняя при этом его вычислительную эффективность. Известные модификации включают:

  1. Вероятность дискретной логистической смеси: слой softmax, который используется для вычисления условного распределения пикселя, хотя эффективность требует очень больших затрат памяти. Кроме того, это делает градиенты разреженными на ранних этапах обучения. Чтобы противостоять этому, мы предполагаем интенсивность скрытого цвета, аналогичную той, которая используется в вариационных автокодировщиках, с непрерывным распределением. Он округляется до ближайшего 8-битного представления, чтобы получить значение в пикселях. Распределение интенсивности является логистическим, поэтому значения пикселей можно легко определить. Этот метод эффективен с точки зрения памяти, выходные данные имеют меньшие размеры, что обеспечивает более плотные градиенты, таким образом решая обе проблемы.
  2. Условие для целых пикселей: PixelCNN разлагает модель на 3 субпикселя в соответствии с цветом (RGB), что, однако, усложняет модель. Зависимость между цветовыми каналами пикселя относительно проста и не требует глубокого обучения модели. Следовательно, лучше использовать целые пиксели, а не отдельные цвета, а затем выводить совместные распределения по всем 3 каналам прогнозируемого пикселя.
  3. Даунсэмплинг: PixelCNN не может вычислять зависимости на большом расстоянии. Это один из недостатков PixelCNN, почему он не может сравниться с производительностью PixelRNN. Чтобы преодолеть это, мы понижаем дискретизацию слоев, используя свертки шага 2. Пониженная дискретизация уменьшает размер ввода и, таким образом, улучшает относительный размер воспринимающего поля, что приводит к некоторой потере информации, но ее можно компенсировать добавлением дополнительных сокращенных соединений.
  4. Кратковременные соединения: моделируют структуру кодировщика-декодера U-net. Для слоев 2 и 3 выполняется субдискретизация, а затем для слоев 5 и 6 повышается дискретизация. Существует остаточное соединение кодеров с декодерами для предоставления локализованной информации.
  5. Исключение: поскольку модели для PixelCNN и PixelCNN ++ очень эффективны, они, скорее всего, переоценивают данные, если их не упорядочить. Итак, применяем отсев на остаточном пути после первой свертки.

PixelCNN ++ с большим отрывом превосходит PixelRNN и PixelCNN. При обучении на CIFAR-10 лучшая правдоподобность журнала тестов составляет 2,92 бит / пиксель по сравнению с 3,0 для PixelRNN и 3,03 для стробированных PixelCNN. Также, если какая-либо из модификаций не используется, производительность падает, и модель обучается медленно или в некоторых случаях не может обучаться полностью. Подробнее об этих экспериментах можно прочитать в статье.

Заключение

Эксперименты показали, что PixelCNN ++ можно использовать в качестве декодера в вариационных автоэнкодерах (VAE), что находит применение в текущих исследованиях, что можно увидеть в нескольких исследовательских работах, таких как PixelGAN. PixelCNN заставляет кодировщик изучать функции более высокого уровня, поскольку сеть может сама позаботиться о функциях более низкого уровня. Совместное использование VAE, GAN и авторегрессионных моделей является активной областью исследований. Эти модели вместе с методами подкрепления могут улучшить современные методы и привести исследования в области обучения без учителя / частично с учителем, чтобы соответствовать уровню исследований, проводимых в обучении с учителем.

Ссылки

  1. Https://allenlu2007.wordpress.com/2017/08/19/pixelrnn-vs-gan-for-probabilistic-generative-model/
  2. Http://sergeiturukin.com/2017/02/22/pixelcnn.html
  3. Пиксельные рекуррентные нейронные сети (Ван дер Оорд и др.), 2016 г. (https://arxiv.org/pdf/1601.06759.pdf)
  4. Генерация условного изображения с помощью декодеров PixelCNN (Ван дер Оорд и др.), 2016 г. (https://arxiv.org/pdf/1606.05328.pdf)
  5. PixelCNN ++: улучшение PixelCNN с помощью дискретной логистической смеси правдоподобия и других модификаций. (Salimans et al.) 2017. (https://arxiv.org/pdf/1701.05517.pdf)
  6. Https://towardsdatascience.com/summary-of-pixelrnn-by-google-deepmind-7-min-read-938d9871d6d9
  7. Https://www.commonlounge.com/discussion/99e291af08e2427b9d961d41bb12c83b
  8. Минимакс - теория игр (https://en.wikipedia.org/wiki/Minimax)

Код

  1. PixelCNN ++: https://github.com/openai/pixel-cnn (Tensorflow)
  2. PixelRNN: https://github.com/carpedm20/pixel-rnn-tensorflow (Tensorflow)