Магическое ускорение работы моделей с помощью самогонного аппарата

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Вы когда-нибудь задумывались о том, что у человеческого мозга есть ограниченная емкость и вы можете выучить этот чертов английский просто потому что в детстве запомнили слишком много покемонов? Или почему обучение с учителем гораздо эффективнее, чем самостоятельное?

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

Ответ - да. Есть простой трюк, который мы можем использовать - дистилляция модели.

Чтобы понять, как это работает, давайте сначала посмотрим на обычный процесс обучения модели.

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

Обычно происходит что-то вроде этого:

  • мы берем кучу маркированных изображений и постепенно добавляем к ним шум в соответствии с графиком шума

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

Во время вывода:

  • мы генерируем начальное изображение с чистым случайным шумом

  • модель предсказывает шум

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

Более подробное описание можно найти здесь.

Визуально это выглядит следующим образом:

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

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

Почему мы делаем это таким образом? Ну, мы не можем просто перейти от шума к согласованному изображению, это привело бы к абстрактным сюрреалистическим результатам. Шум случаен и не содержит изображение как таковое (как правило). Постепенное удаление шума позволяет раскрыть общий контур изображения, который затем может быть детализирован шаг за шагом, используя предыдущие шаги в качестве базы. То же самое с людьми – вы не можете написать целое приложение на Python за один раз – обычно вы пишете код по частям, и он как бы эволюционирует.

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

Вот как это было постулировано:

forward-diffusion
forward-diffusion

Изображение из статьи Denoising Diffusion Probabilistic Models.

Прямой процесс или процесс диффузии фиксируется в Марковской цепи, которая постепенно добавляет гауссовский шум к данным в соответствии с графиком дисперсии β1,...,βT. Учитывая точку данных x0​, выбранную из реального распределения данных q(x) (x0​∼q(x)), мы можем определить прямой процесс диффузии, добавляя шум. Конкретно, на каждом шаге мы добавляем гауссовский шум с дисперсией βt​ к xt−1​, создавая новую скрытую переменную xt​ с распределением q(xt​∣xt−1​). Этот процесс диффузии может быть сформулирован следующим образом:

Этот процесс требует множества шагов для работы.

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

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

Источник: https://habr.com/ru/companies/raft/articles/795749/


Интересные статьи

Интересные статьи

Всем привет! Одна из моих рутинных задач - это подъем новых проектов и микросервисов в облаках. Для этого практически всегда нужны домены и поддомены с наличием SSL сертификата. У меня выработался под...
В октябре у нас в Росбанке прошел CX Camp — офлайн-мероприятие на целый день с приглашенными экспертами, дискуссиями, воркшопами и, конечно же, тимбилдингом под вечер. Темой кэмпа стал клиентский опыт...
Процесс развертывания и управления облачной инфраструктурой может осуществляться в одном из двух режимов. Инфраструктура может быть развернута либо с помощью интерактивных опций, называемых на слэ...
В iOS есть такая фича - scrolls to top.Посмотрим, может ли Flutter предоставить нам такую функциональность из коробки? Читать далее
Источник Существует множество мест, где потребность в звукоизоляции особенно высока: офис, музыкальная студия, коворкинг, домашний кабинет. Последний вариант особенно актуален в условиях...