Шум превращает оптимизацию в генерацию

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

От спуска к блужданию

Обычный градиентный спуск делает шаг против градиента минимизируемой функции U (её удобно считать энергией ландшафта): x \leftarrow x - \nabla U(x)\,\Delta t. Динамика Ланжевена добавляет к нему гауссов толчок: x \leftarrow x - \nabla U(x)\,\Delta t + \sqrt{2T\,\Delta t}\;\xi,\qquad \xi\sim\mathcal N(0,I). Параметр T — температура. При T=0 это в точности спуск: частица скатывается в ближайший минимум и остаётся там. При T>0 толчки позволяют выбираться из ям и переходить через барьеры.

У этой динамики есть стационарное распределение — больцмановское p(x)\propto e^{-U(x)/T}: после долгого блуждания частица оказывается в точке тем чаще, чем ниже там энергия. Глубокие ямы населены плотнее мелких, а T задаёт, насколько резок этот контраст.

Строго это верно для непрерывной динамики: конечный шаг \Delta t даёт лишь приближение к p, и чем шаг крупнее, тем заметнее смещение. Поэтому шаг либо делают мелким, либо добавляют поправку Метрополиса — предложенный шаг принимают или отвергают, и тогда распределение получается точным; этот вариант и называют MALA.

Посмотрите на облако

Все частицы выходят из одного угла. Двигайте температуру:

  • T=0 — чистая оптимизация: всё облако стекает в одну ближайшую яму и замирает.
  • малое T — переходы через барьеры редки, частицы почти заперты.
  • большое T — частицы заселяют все ямы; в самой глубокой их больше всего.

Слева — ландшафт энергии U и облако частиц, справа — столбики заселённости трёх ям и доля частиц, застрявших на барьерах. Двигайте T и смотрите, как меняются доли: при T=0 занята одна яма, с ростом T заселяются все три, и в самой глубокой частиц больше всего.

При чём тут диффузионные модели

Поле -\nabla U — это, с точностью до множителя T, градиент логарифма плотности \nabla \log p; в машинном обучении его называют score. Отсюда главное: чтобы получать случайные точки из распределения, не нужно знать саму плотность p — достаточно знать этот градиент, остальное сделает Ланжевен. Score-based и диффузионные модели устроены ровно так: нейросеть учится предсказывать градиент лог-плотности для зашумлённых данных, а генерация — это запуск Ланжевена, который ведёт шум обратно к данным.

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

Связи

  • GD, momentum, Adam — Ланжевен это ровно градиентный спуск плюс шум
  • Глобальная оптимизация — имитация отжига тот же приём, только температуру снижают, чтобы найти минимум, а не обойти всё распределение
  • Ландшафт функции потерь — откуда берутся ямы, барьеры и моды в задачах обучения и как они выглядят в высокой размерности
  • Тяжёлые хвосты — форма распределения решает, значит ли что-нибудь «среднее» по выборке
Наверх