Кслера8

Введение в диффузионные модели для машинного обучения

Эта статья изначально была опубликована в СборкаAI и повторно опубликовано в TOPBOTS с разрешения автора.

Диффузионные модели — это генеративные модели, которые за последние несколько лет приобрели значительную популярность, и на то есть веские причины. Несколько основополагающих статей, выпущенных в 2020-х годах в одиночестве показали миру, на что способны модели Diffusion, например, обыграть GAN.[6] по синтезу изображений. Совсем недавно специалисты-практики видели, как диффузионные модели используются в ДАЛЛ-Э 2, модель генерации изображений OpenAI, выпущенная в прошлом месяце.

Различные изображения, созданные DALL-E 2 (источник).

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

Если этот подробный образовательный контент вам полезен, подпишитесь на нашу рассылку AI быть предупрежденным, когда мы выпустим новый материал. 

Диффузионные модели – Введение

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

Модели рассеяния можно использовать для создания изображений из шума (адаптировано из источник)

В частности, модель диффузии — это модель со скрытой переменной, которая отображается в скрытое пространство с помощью фиксированной цепи Маркова. Эта цепочка постепенно добавляет шум к данным, чтобы получить приблизительную апостериорную оценку q(x1:Т|x0), где х1, ..., хT - скрытые переменные той же размерности, что и x0. На рисунке ниже мы видим такую ​​цепь Маркова, проявленную для данных изображения.

В конечном итоге изображение асимптотически преобразуется в чистый гауссов шум.  цель обучения диффузионной модели заключается в изучении обратный процесс – т.е. обучение pθ(xт-1|xt). Проходя назад по этой цепочке, мы можем генерировать новые данные.

Преимущества диффузионных моделей

Как упоминалось выше, в последние годы резко возросло количество исследований диффузионных моделей. Вдохновленный неравновесной термодинамикой[1], Диффузионные модели в настоящее время производят Высочайшее качество изображения, примеры которых можно увидеть ниже:

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

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

Модели распространения — глубокое погружение

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

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

Математическая заметка

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

Эти два утверждения эквивалентны. То есть

Чтобы понять почему, мы немного злоупотребим обозначениями, утверждая, что

Где окончательный вывод проистекает из математической эквивалентности между суммой случайных величин и сверткой их распределений - см. эта страница в Википедии чтобы получить больше информации.

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

Где β1,…,βT представляет собой график отклонений (либо изученный, либо фиксированный), который, если он хорошо себя ведет, гарантирует, что xT является почти изотропным гауссианом для достаточно больших T.

Учитывая предположение Маркова, совместное распределение скрытых переменных является произведением гауссовских условных цепных переходов (модифицированных из источник).

Как упоминалось ранее, «волшебство» диффузионных моделей проявляется в обратный процесс. Во время обучения модель учится обращать этот процесс распространения, чтобы генерировать новые данные. Начиная с чистого гауссовского шума p(xT):=N(хT,0,I) модель изучает совместное распределение pθ(x0:Т) в качестве

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

Обучение

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

Обозначение Деталь

Обратите внимание, что ЛVLB технически является верхний ограниченный (отрицательный ELBO), который мы пытаемся минимизировать, но мы называем его LVLB для соответствия литературным данным.

Мы стремимся переписать LVLB в пересчете на Расхождения Кульбака-Лейблера (КЛ). Дивергенция KL — это асимметричная статистическая мера расстояния того, насколько одно распределение вероятностей P отличается от эталонного дистрибутива Q. Нас интересует формулировка LVLB в терминах KL-расхождений, потому что переходные распределения в нашей цепи Маркова являются гауссовыми, и KL-расхождение между гауссианами имеет замкнутый вид.

Что такое KL-дивергенция?

Математическая форма расходимости KL для непрерывных распределений:

Двойные черты указывают на то, что функция несимметрична относительно своих аргументов.

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

Кастинг Lvlb с точки зрения расхождений KL

Как упоминалось ранее, возможно [1] переписать LVLB почти полностью в терминах KL-расхождений:

в котором

Детали происхождения

Вариационная граница равна

Заменяя распределения их определениями с учетом нашего марковского предположения, мы получаем

Мы используем правила журнала, чтобы преобразовать выражение в сумму журналов, а затем вытащить первый член

Используя теорему Байеса и наше предположение Маркова, это выражение принимает вид

Затем мы разделяем средний термин, используя правила журнала.

Выделив второй член, мы видим

Подключив это обратно к нашему уравнению для LVLB, у нас есть

Используя правила журнала, мы переставляем

d8

Далее отметим следующую эквивалентность KL-дивергенции для любых двух распределений:

Наконец, применяя эту эквивалентность к предыдущему выражению, мы приходим к

Обусловление прямого процесса апостериорно по x0 в лт-1 приводит к податливой форме, которая приводит к все расхождения KL являются сравнениями между гауссианами. Это означает, что расхождения можно точно вычислить с помощью выражений в закрытой форме, а не с помощью оценок Монте-Карло.[3].

Выбор модели

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

Для обратного процесса мы выбираем архитектуру параметризации/модели распределения Гаусса. Обратите внимание высокая степень гибкости что позволяют модели диффузии – только Требование к нашей архитектуре состоит в том, чтобы ее вход и выход имели одинаковую размерность.

Мы рассмотрим детали этих вариантов более подробно ниже.

Прямой процесс и LT

Как отмечалось выше, в отношении прямого процесса мы должны определить график отклонений. В частности, мы установили их как константы, зависящие от времени, игнорируя тот факт, что им можно научиться. Например[3], линейный график из β1= 10-4 к βTМожно использовать =0.2 или, возможно, геометрическую серию.

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

Обратный процесс и L1:Т-1

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

Теперь мы должны определить функциональные формы µθ или Σθ. Хотя есть более сложные способы параметризации Σθ[5], мы просто устанавливаем

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

Учитывая эту новую формулировку Σθ, у нас есть

что позволяет нам трансформировать

в

где первый член разности представляет собой линейную комбинацию xt и х0 который зависит от графика отклонения βt. Точный вид этой функции для наших целей не важен, но его можно найти в [3].

Значение приведенной выше пропорции состоит в том, что самая простая параметризация µθ просто предсказывает диффузионное апостериорное среднее. Важно отметить, что авторы [3] на самом деле обнаружил, что обучение μθ предсказать шум компонент на любом заданном временном шаге дает лучшие результаты. В частности, пусть

в котором

Это приводит к следующей альтернативной функции потерь, что авторы [3] приводит к более стабильной тренировке и лучшим результатам:

Авторы [3] также обратите внимание на связи этой формулировки диффузионных моделей с генеративными моделями сопоставления результатов, основанными на динамике Ланжевена. Действительно, оказывается, что модели диффузии и модели, основанные на количественных показателях, могут быть двумя сторонами одной медали, подобно независимому и одновременному развитию квантовой механики на основе волн и квантовой механики на основе матриц, раскрывающих две эквивалентные формулировки одного и того же явления.[2].

Сетевая архитектура

В то время как наша упрощенная функция потерь стремится обучить модель ϵθ, мы еще не определили архитектуру этой модели. Обратите внимание, что только Требование к модели состоит в том, чтобы ее входная и выходная размерности были идентичными.

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

Декодер обратного процесса и L0

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

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

где D — размерность данных, а верхний индекс i указывает на извлечение одной координаты. Теперь цель состоит в том, чтобы определить, насколько вероятно каждое целочисленное значение для данного пикселя. данный распределение по возможным значениям для соответствующего пикселя на слегка зашумленном изображении в момент времени t=1:

где распределения пикселей для t = 1 получены из приведенного ниже многомерного гауссиана, чья диагональная ковариационная матрица позволяет нам разделить распределение на произведение одномерных гауссианов, по одному для каждого измерения данных:

Мы предполагаем, что изображения состоят из целых чисел 0,1,…,255 (как это делают стандартные изображения RGB), которые были линейно масштабированы до [−1,1]. Затем мы разбиваем реальную линию на небольшие «сегменты», где для данного масштабированного значения пикселя x, сегмент для этого диапазона равен [x−1/255, x+1/255]. Вероятность значения пикселя x, учитывая одномерное гауссово распределение соответствующего пикселя в x1, это площадь под этим одномерным гауссовым распределением внутри ведра с центром в x.

Ниже вы можете увидеть область для каждого из этих сегментов с их вероятностями для среднего значения 0 по Гауссу, что в этом контексте соответствует распределению со средним значением пикселя 255/2 (половина яркости). Красная кривая представляет распределение определенного пикселя в т = 1 изображение, а области дают вероятность соответствующего значения пикселя в т = 0 изображения.

Техническое примечание

Первое и последнее сегменты расширяются до -inf и +inf, чтобы сохранить общую вероятность.

Учитывая т = 0 значение пикселя для каждого пикселя, значение pθ(x0|x1) просто их продукт. Этот процесс кратко описывается следующим уравнением:

в котором

и

Учитывая это уравнение для pθ(x0|x1), мы можем вычислить окончательный член LVLB которая не формулируется как дивергенция KL:

Конечная цель

Как упоминалось в последнем разделе, авторы [3] обнаружил, что прогнозирование шумового компонента изображения на заданном временном шаге дает наилучшие результаты. В конечном итоге они используют следующую цель:

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

Краткое изложение теории диффузионной модели

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

  1. Наша диффузионная модель параметризована как Марковская цепь, что означает, что наши скрытые переменные x1, ..., хT зависят только от предыдущего (или последующего) временного шага.
  2. Ассоциация переходные распределения в цепи Маркова есть Гауссовым, где для прямого процесса требуется график отклонений, а параметры обратного процесса изучаются.
  3. Процесс диффузии гарантирует, что xT is асимптотически распределен как изотропный гауссиан при достаточно больших Т.
  4. В нашем случае график отклонений был исправлен, но этому тоже можно научиться. Для фиксированных графиков следование геометрической прогрессии может дать лучшие результаты, чем линейная прогрессия. В любом случае дисперсии ряда обычно увеличиваются со временем (т. е. βij для меня
  5. Диффузионные модели очень гибкий и позволяют любой архитектура, размерность ввода и вывода которой одинакова для использования. Многие реализации используют U-Net-подобный архитектуры.
  6. Ассоциация цель обучения состоит в том, чтобы максимизировать вероятность обучающих данных. Это проявляется в настройке параметров модели на минимизировать вариационную верхнюю границу отрицательной логарифмической вероятности данных.
  7. Почти все члены целевой функции можно представить как КЛ Дивергенции в результате нашего марковского предположения. Эти значения стать пригодным для расчета учитывая, что мы используем гауссианы, что исключает необходимость выполнения аппроксимации Монте-Карло.
  8. В конечном итоге, используя упрощенная цель обучения обучение функции, которая предсказывает шумовую составляющую данной скрытой переменной, дает наилучшие и наиболее стабильные результаты.
  9. дискретный декодер используется для получения логарифмических правдоподобий по значениям пикселей в качестве последнего шага в процессе обратной диффузии.

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

Модели распространения в PyTorch

Хотя диффузионные модели еще не демократизированы в той же степени, что и другие более старые архитектуры/подходы в машинном обучении, все еще существуют реализации, доступные для использования. Самый простой способ использовать диффузионную модель в PyTorch — использовать denoising-diffusion-pytorch package, который реализует модель распространения изображений, подобную той, что обсуждается в этой статье. Чтобы установить пакет, просто введите в терминале следующую команду:

pip install denoising_diffusion_pytorch

Минимальный пример

Чтобы обучить модель и сгенерировать изображения, мы сначала импортируем необходимые пакеты:

import torch
from denoising_diffusion_pytorch import Unet, GaussianDiffusion

Затем мы определяем нашу сетевую архитектуру, в данном случае U-Net.  dim Параметр указывает количество карт объектов перед первой субдискретизацией, а dim_mults Параметр предоставляет множители для этого значения и последовательного понижения частоты дискретизации:

model = Unet(
 dim = 64,
 dim_mults = (1, 2, 4, 8)
)

Теперь, когда наша сетевая архитектура определена, нам нужно определить саму модель распространения. Мы передаем модель U-Net, которую мы только что определили, вместе с несколькими параметрами — размером генерируемых изображений, количеством временных шагов в процессе распространения и выбором между нормами L1 и L2.

diffusion = GaussianDiffusion(
 model,
 image_size = 128,
 timesteps = 1000, # number of steps
 loss_type = 'l1' # L1 or L2
)

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

training_images = torch.randn(8, 3, 128, 128)
loss = diffusion(training_images)
loss.backward()

Как только модель обучена, мы можем, наконец, генерировать изображения, используя sample() метод diffusion объект. Здесь мы генерируем 4 изображения, которые являются только шумом, учитывая, что наши обучающие данные были случайными:

sampled_images = diffusion.sample(batch_size = 4)

Обучение работе с пользовательскими данными

Ассоциация denoising-diffusion-pytorch Пакет также позволяет обучать модель распространения на конкретном наборе данных. Просто замените 'path/to/your/images' строка с путем к каталогу набора данных в Trainer() объект ниже и изменить image_size до соответствующего значения. После этого просто запустите код для обучения модели, а затем попробуйте, как и раньше. Обратите внимание, что PyTorch должен быть скомпилирован с включенным CUDA, чтобы использовать Trainer учебный класс:

from denoising_diffusion_pytorch import Unet, GaussianDiffusion, Trainer
model = Unet(
 dim = 64,
 dim_mults = (1, 2, 4, 8)
).cuda()
diffusion = GaussianDiffusion(
 model,
 image_size = 128,
 timesteps = 1000, # number of steps
 loss_type = 'l1' # L1 or L2
).cuda()
trainer = Trainer(
 diffusion,
 'path/to/your/images',
 train_batch_size = 32,
 train_lr = 2e-5,
 train_num_steps = 700000, # total training steps
 gradient_accumulate_every = 2, # gradient accumulation steps
 ema_decay = 0.995, # exponential moving average decay
 amp = True # turn on mixed precision
)
trainer.train()

Ниже вы можете увидеть прогрессивное шумоподавление от многомерного гауссовского шума до цифр MNIST, похожее на обратную диффузию:

Выводы

Диффузионные модели — это концептуально простой и элегантный подход к проблеме генерации данных. Их передовые результаты в сочетании с непротиворечивой подготовкой продвинули их к большим высотам, и в ближайшие годы можно ожидать дальнейших улучшений, учитывая их зарождающийся статус. В частности, было обнаружено, что диффузионные модели необходимы для работы передовых моделей, таких как ДАЛЛ-Э 2.

Рекомендации

[1] Глубокое обучение без учителя с использованием неравновесной термодинамики

[2] Генеративное моделирование путем оценки градиентов распределения данных

[3] Шумоподавление вероятностных моделей диффузии

[4] Усовершенствованные методы обучения генеративных моделей на основе оценок

[5] Улучшенные вероятностные модели диффузии шумоподавления

[6] Диффузионные модели превосходят GAN при синтезе изображений

[7] GLIDE: на пути к созданию и редактированию фотореалистичных изображений с помощью текстовых диффузионных моделей

[8] Генерация иерархического текстового условного изображения с латентными данными CLIP

Наслаждайтесь этой статьей? Подпишитесь на дополнительные исследования ИИ исследований.

Мы сообщим вам, когда мы выпустим больше кратких статей, подобных этой.

Чат с нами

Всем привет! Могу я чем-нибудь помочь?