Ссылка на мои блоги по глубокому обучению: https://rakshithv-deeplearning.blogspot.com/

На прошлой неделе OpenAI выпустила DALL-E2 https://twitter.com/OpenAI/status/1511707245536428034?s=20&t=iYtfg3SC-WPupM4IkTeQfA. Эта система в основном имеет возможность генерировать изображение из текстового описания. Ниже в твиттере есть несколько примеров, сгенерированных из DALL-E2 https://twitter.com/OpenAI/status/1511714511673126914?s=20&t=4iYWQtFoQ326tSzOyGZcUA. Ниже приведен мой любимый пример:

В этом блоге я хочу обсудить технические детали DALL-E (версия 1), выпущенного почти год назад. Лично я считаю, что эта статья богаче по содержанию, чем предыдущая. Эта работа захватывающая, потому что система, обученная на парах изображение-текст, способна генерировать очень значимое изображение из текста, который, вероятно, не видел (больше похоже на OOD), конечно, это утверждение могло бы быть более заметным, если бы больше прозрачности в отношении используемых данных обучения, хотя это выглядит как удивительный прогресс, почти как по волшебству.

Отныне я имею в виду только DALL-E (Версия 1), эта система в основном состоит из 2 компонентов. Первым компонентом является d-VAE (дискретно-вариационный автоматический кодировщик) и авторегрессионный преобразователь. Я расскажу о d-VAE в этой части-1 и напишу отдельный блог о компоненте трансформатора, результатах и ​​различных инженерных деталях при обучении модели в части-2.

Основная идея состоит в том, чтобы сгенерировать дискретный вектор (токен) для данного изображения и соединить его с токеном, сгенерированным из BPE для ввода текста, и передать его в авторегрессионный преобразователь и обучить распределение соединения, как показано в приведенном ниже уравнении.

x-›изображение, y-›заголовок и z-› токен. Это уравнение создает впечатление, что оба компонента тренируются вместе, но это не так. Его обучали отдельно, но для математической корректности уравнение представили в приведенном выше формате, это подтвердил сам первый автор Адитья Рамеш в одном из своих интервью (https://youtu.be/PtdpWC7Sr98).

Итак, почему им нужно дискретное представление токенов для изображения?

Если мы возьмем каждый пиксель изображения в качестве одного из токенов, то для изображения размером 256x256x3 объем памяти, необходимый для обработки, будет огромным — следовательно, изображение 256x256x3 представлено сеткой 32x32, где каждая сетка представлена ​​значением одного из 8192. токены (8192 можно рассматривать как словарный запас в НЛП). Таким образом, одно изображение может быть представлено 1024 токенами и объединено с 256 токенами BPE текстовых данных.

Теперь мы получаем мотивацию, почему важно генерировать дискретный вектор для изображения. Теперь, как мы сгенерируем это? ну, в этом направлении уже была проведена некоторая предварительная работа, VAE (Variational Auto Encoder) — почти идеальный рецепт для такого рода приложений.

(Если вас устраивает VAE и формулировка ELBO, вы можете пропустить этот абзац). Прежде чем говорить о VAE, я кратко расскажу об AE (автоматическом кодировщике). AE имеет архитектуру кодировщик-декодер, в которой кодировщик принимает входные данные X в N-мерном пространстве и представляет их в скрытом пространстве в D-измерении, где D ‹‹ N. Теперь декодер принимает D в качестве входных данных и пытается воспроизвести X^. В идеале мы хотим, чтобы X^ было как можно ближе к X. Но этот AE может столкнуться с переобучением из-за скрытого отображения с ограничениями. Итак, есть гораздо лучшая идея — VAE. Его архитектура будет похожа на AE, но разница в том, что теперь мы пытаемся смоделировать распределение скрытого пространства по-другому. Кодер VAE предсказывает среднее значение и дисперсию распределения, а скрытый ввод, который выбирается из этого распределения, будет подаваться в декодер, чтобы он имел лучшие возможности обобщения. Если вам интересно понять эту концепцию с помощью дополнительной визуализации, вы можете посетить этот https://atcold.github.io/pytorch-Deep-Learning/en/week08/08-3/. Операция выборки VAE недифференцируема, поэтому будет использован прием повторной параметризации. Если вас интересует математический вывод VAE с формулировкой ELBO, см. этот учебник https://arxiv.org/pdf/1907.08956.pdf (это одно из самых чистых математических доказательств). Основной подход этого доказательства состоит в том, чтобы оценить апостериорное распределение скрытого пространства с его истинным распределением. Поскольку истинное распределение будет недоступно, с помощью теоремы Байе и ненулевой границы расхождения KL можно сформулировать ELBO в качестве прокси для оценки истинного распределения.

Теперь, когда у нас есть понимание того, как математически работает VAE, мы можем понять, что вывод или распределение скрытого пространства не является категоричным. В DALL-E ввод изображения 256x256x3 передается через Resnet, и кодировщик генерирует карту функций 32x32x8192. В каждой сетке (32x32) у нас есть дискретное распределение по 8192 токенам. Чтобы смоделировать это - есть несколько подходов, основанных на VQ-VAE (Vector-Quantized VAE) https://arxiv.org/abs/1711.00937. Идея состоит в том, что у вас есть что-то, называемое кодовыми книгами словарной длины V. (Пример: если у меня есть кодовая книга длиной 256, каждая запись в моей кодовой книге в основном представляет собой вектор некоторой размерности d, поэтому матрица кодовой книги будет 256xd -вектор размерности d не является дискретным). Выход кодировщика будет вектором с действительным значением размерности d, и он будет сравниваться со всеми 256 векторами в кодовой книге - тогда наиболее похожий вектор кодовой книги будет передан в декодер вместо вывода кодировщика, эта матрица кодовой книги может быть изучена.

Подобная стратегия кодовой книги также использовалась в DALL-E, но вместо сопоставления аналогичного вектора кодовой книги используется трюк Gumbel Soft-max для выборки из категориального распределения (кодовой книги). Люди, имеющие опыт самостоятельного обучения речи, знают об этом, так как он используется в wav2vec (https://arxiv.org/abs/2006.11477). Здесь нам нужно что-то вроде горячего вектора после его прохождения через Gumbel Soft-max. Мы знаем, что Soft-max не дает горячего распределения, добавление параметра температуры к Soft-max делает распределение более четким, но по-прежнему не дает горячего распределения, поэтому важным шагом является добавление шума Гамбеля с помощью трюка повторной параметризации ( разделение детерминированной и выборочной частей).

Распределение Гамбеля = Onehot(argmax(log p + G)), argmax заменяется на Soft-max с температурой . Подробнее в этой статье (https://arxiv.org/pdf/1611.01144.pdf). Я не совсем понимаю основные характеристики шума Гамбеля, например, почему добавление шума Гамбеля помогает получить однократное . Компонент d-VAE DALL-E использует этот трюк для выборки из категориального распределения.

Потери при реконструкции d-VAE также настраиваются с использованием логита Лапласа. В общем случае значения установочного изображения будут отображаться в диапазоне от 0 до 1, а сигмоид применяется в конце декодера для генерации выходных данных в диапазоне от 0 до 1. Потери L1 или L2 используется в VAE, но это может привести к некоторым проблемам, таким как распределение, создаваемое нейронной сетью, не совсем точно ограничено входным распределением, что приводит к большому количеству аппроксимаций при дальнейшем отображении его обратно в значения пикселей. Чтобы преодолеть это, вместо гауссова определяется лапласиан с привязкой, который поможет отобразить входной пиксель в определенный диапазон, и распределение нейронной сети также может быть ограничено.

вывод декодера d-VAE выводит как значения u, так и b, x здесь представляет вывод декодера. Другие детали обучения включают бета-термин расхождения KL, который был увеличен, что оказалось весьма полезным. Сеть обучается с помощью 64 графических процессоров V100 16 ГБ с размером пакета 8 на графический процессор, оптимизатором AdamW (бета1 = 0,9, бета = 0,99), а скорость обучения снижается с косинусным затуханием.

Про авторегрессионный трансформатор я продолжу в следующей части.