23 / 33 · Нормализующие потоки
Архитектуры потоков
Как строить обратимые слои с дешёвыми определителями Якоби: слои связи (NICE, RealNVP), маскированные авторегрессионные слои (MAF, IAF), обратимые свёртки 1×1 из Glow, рационально-квадратичные сплайновые слои связи, ActNorm, многомасштабные потоки на изображениях, а также более ранние планарные и радиальные потоки.
Нормализующие потоки: замена переменных · Определители ↗ · Нейронные сети · Батч-нормализация, градиенты и свёртки
На этой странице 13
Заметка о замене переменных закончилась проблемой вычислительной стоимости. Каждый слой потока вносит в логарифм правдоподобия слагаемое (со знаком плюс, когда — матрица Якоби отображения из данных в латентное пространство). Для произвольной матрицы Якоби размера вычисление этого определителя стоит . Для треугольной матрицы Якоби это просто произведение диагональных элементов, которое стоит . Поэтому вопрос в том, как придать структуру, определитель которой дёшев по построению: треугольную, линейное отображение, хранимое в виде произведения множителей, или единичную матрицу плюс слагаемое малого ранга.
Ответ дают три конструкции: слои связи (coupling layers, часть А) и авторегрессионные слои (часть Б), у которых матрица Якоби треугольная, и обратимые свёртки (invertible 1×1 convolutions, часть В), у которых она блочно-диагональная с плотными блоками, хранимыми как произведения треугольных множителей. Каждая из них сохраняет обратимость слоя и дешевизну его определителя, а основную работу внутри слоя по-прежнему выполняют произвольные нейронные сети. На них опираются ещё три части. Часть Г заменяет аффинное отображение внутри слоя связи монотонным сплайном, часть Д добавляет ActNorm — слой нормализации из Glow, а часть Е собирает всё это в потоки для изображений. Часть Ж показывает более ранний путь к дешёвому определителю, на котором треугольные матрицы вообще не нужны: планарные и радиальные потоки. При первом чтении достаточно частей А, Б, В и Е; части Г и Ж — расширения.
Обозначения. Один слой потока отображает в . Его матрица Якоби — с элементами : строка соответствует выходной координате, а столбец — входной. — поэлементное произведение, а от вектора применяется поэлементно. Здесь неважно, в каком направлении используется слой: из данных в латентное пространство или из латентного пространства в данные. Определитель обратного слоя равен обратной величине определителя прямого, поэтому определитель, дешёвый в одном направлении, дёшев и в другом. Нижний индекс нумерует координаты одного вектора (, ), а не слои потока, как в предыдущей заметке. Тензор-изображение имеет высоту , ширину и каналов.
А. Слои связи (NICE, RealNVP)#
Разобьём вход на две части,
и зададим преобразование
где — произвольные нейронные сети, которые называют сетью масштаба (scale) и сетью сдвига (translation). Конструкция работает благодаря двум фактам:
- вообще не зависит от ;
- зависит от лишь аффинно и к тому же поэлементно: в -ю координату входит только , умноженная на и сдвинутую на .
Аффинный слой связи и обратный к нему
Матрица Якоби. Эти два факта задают блочную структуру :
- Левый верхний блок: , потому что .
- Правый верхний блок: , потому что не зависит от .
- Правый нижний блок: , потому что зависимость от поэлементная с угловым коэффициентом .
- Левый нижний блок: — плотная матрица, в которую входят производные и . Она сложна, но это неважно.
Значит, нижнетреугольная, и её определитель равен произведению диагональных элементов:
Здесь пробегает координат , а — -й выход сети .
Определитель всегда положителен, так что модуль не нужен. Слой обратим при любом выборе сетей и , и не потому, что (само по себе это гарантирует лишь локальную обратимость), а потому, что обратное отображение можно выписать явно, как показано ниже. Плотный блок никогда не входит в определитель: и могут быть сколь угодно глубокими, и от этого не становится дороже.
Почему матрица Якоби слоя связи нижнетреугольная
Например, при и разбиении пусть в некоторой точке . Тогда и . Вблизи этой точки слой уменьшает малые объёмы примерно на 18%, что бы ни содержал плотный блок.
Обратное отображение обращает только поэлементный шаг. Поскольку , сети можно снова вычислить на том же входе:
Ни , ни обращать не нужно. Каждое направление требует одного прохода через обе сети.
Б. Авторегрессионные слои (MAF, IAF)#
Потребуем, чтобы каждая выходная координата зависела только от предыдущих:
Теперь автоматически нижнетреугольная:
- зависимости от координат с номерами нет, поэтому для всех ;
- диагональные элементы равны .
так что
Снова определитель — произведение диагональных элементов. Слой связи — частный случай всего с двумя блоками: служит условием для .
Конкретный слой. В MAF, маскированном авторегрессионном потоке (masked autoregressive flow; Papamakarios, Pavlakou and Murray, 2017) каждое аффинно по своей координате, а масштаб и сдвиг вычисляются по координатам, стоящим строго перед ней:
Здесь . Поскольку и не видят , диагональный элемент равен просто , и слой можно обращать по одной координате за раз. Тот же слой часто записывают как ; это та же форма, что и выше, с и .
Маскирование. Можно было бы дать каждой координате собственную сеть, которая читает , ценой сетей и последовательных проходов. MAF вместо этого использует одну сеть и маскирует её веса, так что
Эта сеть — MADE, маскированный автоэнкодер для оценивания распределений (masked autoencoder for distribution estimation; Germain et al., 2015). Маски строятся по степеням (degrees), которые здесь обозначены , чтобы не путать их с размерностью :
- вход имеет степень ;
- каждый скрытый нейрон получает степень (Germain et al., 2015, §4). Нейрону разрешено зависеть от и ни от чего более позднего. Степень была бы бесполезна: такой нейрон мог бы передавать сигнал только выходам, идущим после , а их нет;
- выходной нейрон, который вычисляет , имеет степень .
В скрытом слое скрытый нейрон может читать нейрон нижележащего слоя, только если степень отправителя не больше степени получателя:
Маска имеет ту же форму, что и матрица весов слоя , и просто обнуляет запрещённые веса. Выходной слой использует строгое неравенство: его маска , если , и иначе, так что выход может читать скрытый нейрон , только если . Именно поэтому зависят от , а не от самого .
Разобранный пример. Возьмём входа, один скрытый слой из четырёх нейронов со степенями и выходы степеней . В обеих масках строки соответствуют принимающим нейронам, а столбцы — отправляющим. Маска скрытого слоя (правило ) и маска выходного слоя (правило ) равны
Элемент их произведения равен числу путей от входа к выходу :
Произведение строго нижнетреугольное. Нелинейность вроде ReLU не может создать путь, который удалили маски, поэтому зависят только от . Затем поэлементный шаг добавляет диагональ Выход 1 вообще не получает связей, так что — обучаемые константы (смещения), как и должно быть: перед ничего нет. Вход никуда не передаётся, потому что ни одной более поздней координате он не нужен.
Маскирование весов делает сеть авторегрессионной
MAF и IAF. Маскированная сеть выдаёт все за один проход, когда известны переменные, от которых они зависят. В MAF они известны в направлении от данных к латентному пространству, поэтому плотность точки данных вычисляется дёшево. При сэмплировании слой приходится обращать координата за координатой: для сначала нужно , что занимает последовательных проходов. IAF, обратный авторегрессионный поток (inverse autoregressive flow; Kingma et al., 2016), меняет два направления местами: его читают латентные координаты с номерами меньше . Сэмплирование занимает один проход, зато вычисление плотности произвольной заданной точки последовательно. При этом IAF может за один проход вычислить плотность собственных сэмплов, потому что их латентные векторы известны, а именно это и нужно вариационному выводу (variational inference). Слои связи дёшевы в обоих направлениях, потому что и читают только , который проходит без изменений и известен в обоих направлениях. Плата за это — каждый слой меняет только половину координат.
В. Обратимые свёртки (Glow)#
В слоях Glow используются обратимые свёртки :
Для тензора-изображения высоты , ширины с каналами свёртка применяет одну и ту же матрицу размера к вектору из значений каналов в каждом пикселе. Она перемешивает каналы и ничего не делает по пространству. Перемешивание каналов — именно то, что нужно между слоями связи: это обучаемое обобщение фиксированной перестановки каналов (например, обращения их порядка), которую RealNVP использует между слоями связи (Kingma and Dhariwal, 2018, §3.2). Матрица Якоби всего слоя блочно-диагональная, на её диагонали стоят копий , поэтому
должна быть обратимой, а вычисление в общем случае стоит . Поэтому обучают через её LU-разложение. Не у всякой обратимой матрицы есть LU-разложение без выбора ведущего элемента (pivoting): у перестановки его нет, потому что должно было бы равняться , и тогда . Поэтому Glow добавляет фиксированную матрицу перестановки :
Элементы и — вещественные числа. остаётся фиксированной; обучаемые параметры — свободные элементы (под её единичной диагональю) и (на её диагонали и выше). Поскольку , и ,
Слой обратим ровно тогда, когда все , а обратная матрица — : перестановка и решение двух треугольных систем. В отличие от , свободный параметр сам по себе ничем не защищён от обращения в ноль.
Обратимая свёртка 1×1 в Glow
Например, возьмём и с
Непосредственное вычисление даёт , что равно . Отсюда . Отрицательный ведущий элемент показывает, зачем нужен модуль: не определён.
Г. Сплайновые слои связи: нейросетевые сплайновые потоки#
Дополнительный материал: более гибкое поэлементное отображение и вывод его обратного. Остальная часть заметки на него не опирается.
Внутри слоя связи или авторегрессионного слоя каждая преобразуемая координата проходит через одномерное отображение, параметры которого выдаёт сеть: в части А. Аффинное отображение может сдвинуть и растянуть условное распределение, но не может изменить его форму: одномодальное условное распределение после одного слоя остаётся одномодальным. Рассуждению о треугольной матрице Якоби не нужно, чтобы отображение было аффинным. Подойдёт любая строго возрастающая дифференцируемая функция с вычислимой обратной. Диагональным элементом становится , а выдаёт сеть того же рода, что и раньше: в слое связи, в авторегрессионном слое.
Рационально-квадратичный сплайн (rational-quadratic spline). Нейросетевые сплайновые потоки (neural spline flows; Durkan et al., 2019, §3.1) используют монотонный сплайн из рационально-квадратичных кусков (отношений двух квадратичных многочленов), построенный по схеме Gregory and Delbourgo (1982). В этой части — скалярный вход отображения, а не точка данных. Сплайн отображает на себя и тождествен вне этого отрезка. Внутри он задаётся бинами (bins) с узлами (knots) , возрастающими от до , и положительными производными в узлах. Две крайние производные фиксированы, , чтобы наклон совпадал с наклоном тождественных хвостов. В бине положим
( — наклон хорды, стягивающей бин, а не сеть масштаба из части А). Сплайн в бине имеет вид
При он даёт , а при дробь равна , так что он даёт : каждый кусок соединяет два соседних узла. Знаменатель можно переписать как , и он положителен. Производная сплайна равна
причём все слагаемые числителя положительны, поэтому строго возрастает. При производная равна , а при — : соседние куски стыкуются с одинаковым наклоном, а с хвостами сплайн стыкуется с наклоном 1. Логарифм определителя слоя равен по преобразуемым координатам; координаты в хвостах дают вклад .
Параметры. Для каждой преобразуемой координаты сеть выдаёт чисел без ограничений (Durkan et al., 2019, §3.1): для ширин бинов и для их высот, которые проходят через softmax и умножаются на , чтобы быть положительными и заполнять отрезок, и для внутренних производных, которые проходят через softplus. Кумулятивные суммы ширин и высот, начиная с , дают узлы.
Обратное отображение — корень квадратного уравнения. Поскольку возрастает, бин выхода находится сравнением со значениями . Приравняв и избавившись от знаменателя, получаем , где
Ровно один корень лежит в (Durkan et al., 2019, приложение A.3):
это обычная формула , переписанная так, чтобы не терять точность при малом . Затем . И вычисление, и обращение стоят одного поиска бина и нескольких арифметических операций, так что сплайновый слой связи, как и аффинный, требует одного прохода сети в каждую сторону.
Монотонный рационально-квадратичный сплайн и его производная
Разобранный пример (игрушечные числа, сплайн с рисунка). бина на с узлами , , , , , внутренними производными и . Вход лежит в бине : , ширина , , высота и . Тогда и
Эта координата добавляет к . Обратим : , поэтому , , , и , что возвращает .
Версии со слоями связи и авторегрессионная. Сплайн заменяет аффинное отображение в любой из двух конструкций. Durkan et al. называют результаты RQ-NSF (C) и RQ-NSF (AR) (§3.2): версия со слоями связи — это Glow, в котором аффинные слои связи заменены сплайновыми, а авторегрессионная — это MAF или IAF, в которых аффинные отображения заменены сплайнами. В их слое связи тождественная половина тоже проходит через поэлементные сплайны, параметры которых обучаются напрямую, а не предсказываются сетью. При достаточном числе бинов монотонный сплайн приближает любую дифференцируемую монотонную функцию на ; на практике авторы фиксируют и , не обнаружив большой разницы при от 1 до 5 (§5).
Д. ActNorm: поканальные масштаб и сдвиг с инициализацией по данным#
Глубокие потоки лучше обучаются со слоем нормализации, а в потоке такой слой должен быть обратимым с известным определителем. RealNVP использует батч-нормализацию (batch normalization; Dinh, Sohl-Dickstein and Bengio, 2017, §3.7): со статистиками батча отображение — покоординатное масштабирование с логарифмом определителя . Эта формула считает и константами, заданными извне примера, как в RealNVP, где они берутся из скользящего среднего по последним мини-батчам (прил. E). Обычная батч-нормализация во время обучения, которую дифференцируют как функцию текущего батча, — другое отображение: каждый выход зависит от всех примеров батча, а стандартизация убирает собственное среднее и масштаб батча, так что по одним выходам входы не восстанавливаются. Батч-нормализация вносит шум через статистики батча, этот шум растёт по мере уменьшения батча на одно устройство, а Glow обучается на больших изображениях по одному изображению на устройство (§3.1). Его слой ActNorm сохраняет аффинную форму и отказывается от статистик батча (Kingma and Dhariwal, 2018, §3.1, таблица 1). С логарифмом масштаба и сдвигом для каждого канала
Матрица Якоби диагональна: элемент повторяется в каждой из позиций канала . Glow записывает сам масштаб и логарифм определителя ; логарифм масштаба автоматически делает масштаб положительным. Обратное отображение — . На плоских векторах у того же слоя своя пара для каждой координаты и ; он обобщает слой диагонального масштабирования, который NICE ставит в конце своего потока (Dinh, Krueger and Bengio, 2015, §3.3).
Инициализация по данным (data-dependent initialization). Параметры задаются по первому мини-батчу так, чтобы каждый канал выхода слоя имел на нём нулевое среднее и единичную дисперсию:
что даёт на этом батче. Дальше и — обычные обучаемые параметры, которые, в отличие от батч-нормализации, не зависят от данных. Поэтому каждый слой нового потока начинает с хорошо отмасштабированных активаций, какой бы ни была глубина.
Например (игрушечные числа), ActNorm с логарифмами масштаба на тензоре даёт ната (nats).
Один шаг Glow — это ActNorm, затем свёртка , затем аффинный слой связи (Kingma and Dhariwal, 2018, §3). Последняя свёртка каждой сети слоя связи инициализируется нулями, так что каждый слой связи начинает как тождественное отображение (§3.3). Обе инициализации преследуют одну цель: глубокая стопка обратимых слоёв должна начинать с отображения, близкого к хорошо отмасштабированному тождественному.
Е. Потоки на изображениях: squeeze, маски и многомасштабность#
RGB-изображение размером пикселя имеет координат. Слои выше работают с любым вектором, но поток для изображений должен использовать в качестве и свёрточные сети, а значит, разбиение на и должно учитывать сетку пикселей.
Маски на сетке пикселей#
RealNVP записывает слой связи с бинарной маской той же формы, что и тензор-изображение (Dinh, Sohl-Dickstein and Bengio, 2017, §3.4):
где сумма берётся по всем элементам тензора. Элементы с проходят без изменений и служат условием для остальных, ровно как в части А, а , — свёрточные сети, отображающие тензор в тензор той же формы. Используются две маски:
- шахматная (checkerboard): там, где нечётно, одинаково во всех каналах, так что четыре непосредственных соседа каждого преобразуемого пикселя входят в число условных пикселей;
- поканальная (channel-wise): на первой половине каналов и на второй.
Последовательные слои чередуют и , чтобы преобразовывался каждый элемент.
Squeeze: обмен пространства на каналы#
Операция squeeze разрезает каждый канал на квадраты и укладывает четыре значения каждого квадрата в четыре канала, превращая тензор в тензор (§3.6). Если канал выхода хранит пиксели со смещением из канала , то вход превращается в
Squeeze лишь переставляет координаты, поэтому её матрица Якоби — матрица перестановки, а логарифм определителя равен . Эта операция объясняет и то, почему две маски дополняют друг друга. С индексами от 0 шахматная маска этого входа равна
и после squeeze её единицы заполняют каналы 1 и 2 (смещения и ), а нули — каналы 0 и 3. Поканальная маска делит каналы после squeeze на и — это другое разбиение: каналы 0 и 3, которые шахматная маска относила к одной стороне, попадают в разные половины, как и каналы 1 и 2, поэтому у слоёв связи после squeeze в условии каждой группы оказываются пиксели, которые шахматные слои связи держали вместе.
Выделение половины переменных на каждом масштабе#
Многомасштабная архитектура (multi-scale architecture) RealNVP (§3.6) повторяет один блок на каждом масштабе: три слоя связи с чередующимися шахматными масками, squeeze и три слоя связи с чередующимися поканальными масками. После каждого блока половина переменных выделяется (factored out): эти переменные покидают поток и становятся частью латентного , а к следующему масштабу переходит только другая половина. В направлении от данных к латентному пространству, где — блок масштаба и ,
На последнем масштабе четыре шахматных слоя связи и нет squeeze, а рекурсия останавливается, когда её вход имеет размер (§4.1). Плотность каждой выделенной части вычисляется по гауссовской базовой плотности сразу, как только часть покидает поток, так что функция потерь распределена по всей сети, а поздние масштабы дешевле, потому что обрабатывают меньше переменных. Для изображения этот рецепт даёт пять масштабов:
| Масштаб | Вход | После squeeze | Выделено | Идёт дальше |
|---|---|---|---|---|
| 1 | 6144 | |||
| 2 | 3072 | |||
| 3 | 1536 | |||
| 4 | 768 | |||
| 5 | нет | 768 |
Выделенные части в сумме дают : многомасштабный поток по-прежнему сохраняет все измерения. Его 28 слоёв связи обрабатывают полных изображений в пересчёте на число переменных, около 41% того, что обработали бы 28 слоёв связи на всех переменных. Переменные, выделенные рано, прошли через меньшее число слоёв, и RealNVP описывает их как более мелкие, более локальные признаки (§3.6, приложение D). В RealNVP сеть масштаба заканчивается , умноженным на обучаемый множитель, а сеть сдвига имеет аффинный выход (§4.1).
Шаг Glow на тензорах-изображениях#
Glow сохраняет многомасштабный каркас с уровнями: каждый уровень — это squeeze, за которым идут шагов из ActNorm, свёртки и аффинного слоя связи, и каждый уровень, кроме последнего, заканчивается разделением (split), которое выделяет половину переменных (Kingma and Dhariwal, 2018, §3, рисунок 2). Его слои связи делят тензор только по каналам — это упрощение по сравнению с RealNVP (§3.3), а обучаемые свёртки заменяют фиксированное обращение порядка каналов между слоями связи. Все три слоя действуют на тензоры с поканальными параметрами, и их логарифмы определителей содержат множитель (части В и Д). Свёртка после одного squeeze RGB-изображения имеет и всего веса. Сети слоёв связи состоят из трёх свёрток (, , ) с 512 скрытыми каналами, а в сравнениях на CIFAR-10 используются и (§5). Лучшие результаты Glow — 3.35 бита на размерность (bits per dimension) на CIFAR-10 против 3.49 у RealNVP и 3.81 против 3.98 на ImageNet (§5, таблица 2). Для лиц CelebA-HQ размером он использует и на 5-битных изображениях (§6).
Альтернатива: развернуть изображение в вектор#
Простейший поток для изображений превращает изображение в вектор из чисел и применяет слои частей А–Г с полносвязными сетями. Это работает и не требует ни масок, ни squeeze, но структура сетки теряется. Разбиение по индексам развёрнутого тензора с каналами на первой оси (channel-first) помещает в весь красный канал и верхнюю половину зелёного; сетям приходится с нуля учиться, какие координаты соседние; а первый слой сети слоя связи с 1024 скрытыми нейронами уже имеет миллиона весов. Обучаемая плотная матрица перемешивания между слоями связи имела бы элементов, поэтому на практике выбирают фиксированную перестановку, например случайную. На CIFAR-10 NICE, слои связи которого — полносвязные сети на развёрнутом изображении, достигает 4.48 бита на размерность против 3.49 у свёрточного многомасштабного RealNVP (таблица). Эти две модели различаются также глубиной и видом слоёв связи (аддитивные или аффинные), так что не весь разрыв объясняется сеткой.
Правдоподобие потоков для изображений сообщают в битах на размерность после отмены всех шагов предобработки, то есть к логарифму определителя самой модели добавляется логарифм определителя предобработки; раздел Изображения: деквантование, масштабирование и биты на размерность разбирает это для распространённых способов масштабирования и для логит-преобразования RealNVP.
Интерполяция и кодирование с точным обратным отображением#
У потока есть точный энкодер: у любого изображения , в том числе не из обучающей выборки, ровно один латентный вектор , и возвращает с точностью до ошибок округления. VAE же кодирует изображение в параметры , и его восстановление точно настолько, насколько точен декодер: распространённый попиксельный гауссовский декодер или декодер с квадратичной ошибкой возвращает среднее , которое обычно размыто, а более выразительное правдоподобие декодера может давать резкие сэмплы (VAE; варианты — в заметке Варианты VAE). Отсюда три применения.
Интерполяция. Закодируем два изображения, пройдём по пути между и и декодируем. Прямая выходит из области, где базовое распределение сосредоточивает свою массу. Для длина сосредоточена около с разбросом около (оболочка гауссианы). Если и ведут себя как независимые сэмплы, длина их середины — около . При это вместо , примерно на 46 разбросов ниже типичной длины. Веса, квадраты которых в сумме дают единицу, сохраняют длину типичной. Пути RealNVP между латентными векторами используют такие веса и (§4.2, формула 19), и середина имеет длину около . Glow интерполирует линейно между латентными векторами настоящих лиц и всё же сообщает о реалистичных промежуточных изображениях (§6).
Температура. Glow сэмплирует из модели с пониженной температурой: он умножает стандартное отклонение базового распределения на , жертвуя разнообразием ради качества (§6). Для потока, сохраняющего объём, даёт плотность — заострённую версию модели (в статье показатель степени записан как ).
Кодирование внешнего изображения. Предобработаем его точно так же, как обучающие данные, вычислим и сравним с латентными векторами обучающих изображений, например по евклидову расстоянию. Здесь две оговорки. Если латентные векторы ведут себя как независимые сэмплы из базового распределения, все попарные расстояния близки к , так что ближайшие соседи лишь немного ближе типичных точек. А точное правдоподобие внешнего изображения не говорит, похоже ли оно на обучающие данные: Glow, обученный на CelebA, даёт номерам домов SVHN — набору данных, которого он никогда не видел, — более высокое правдоподобие, чем лицам CelebA (Nalisnick et al., 2019, §3, рисунок 2).
Ж. Планарные и радиальные потоки: дешёвые определители без треугольных матриц#
Дополнительный материал: более ранний путь к дешёвому определителю через матрицу ранга один. Остальная часть заметки на него не опирается.
Первые потоки из работы Rezende and Mohamed (2015), §4.1, приходят к дешёвому определителю другим путём. Их матрица Якоби — единичная матрица плюс матрица ранга один, и лемма об определителе матрицы (matrix determinant lemma) даёт её определитель за (Papamakarios et al., 2021, §3.3.2): для
Любой вектор, ортогональный , матрица оставляет без изменений, поэтому собственное значение имеет кратность не меньше ; тогда след фиксирует последнее собственное значение равным , а определитель — произведение собственных значений.
Планарные потоки (planar flows). С и скалярным смещением (это не маска из части Е)
Rezende и Mohamed допускают вместо любую гладкую поэлементную нелинейность; условие обратимости ниже относится к .
Отображение сдвигает только вдоль , на величину, которая зависит от знакового расстояния до гиперплоскости , так что оно растягивает или сжимает плотность поперёк этой гиперплоскости.
Когда оно обратимо? Разложим на часть, ортогональную , и часть вдоль него, так что . Умножив слева на , получим скалярное уравнение
а когда известно, . Значит, отображение обратимо ровно тогда, когда обратима функция . Поскольку , причём только при , получаем . Если , то строго возрастает и принимает все значения из , и — биекция (Rezende and Mohamed, 2015, приложение A.1). Если , то , а вдали , так что не монотонна и складывает пространство само на себя. Диффеоморфизму нужно ещё, чтобы всюду, а это выполняется при ; Rezende и Mohamed обеспечивают это, заменяя на , где . Даже у обратимого планарного потока обратное отображение не выписывается в замкнутом виде: для каждого слоя нужен одномерный поиск корня .
Например (игрушечные числа), возьмём , , , , так что . В точке : , и . Для обращения нужен корень уравнения , то есть , а затем . Если же взять , то , и обращается в ноль при и : у каждой точки с три прообраза.
Радиальные потоки (radial flows). С центром , , и
Отображение сохраняет направление от и меняет только расстояние, . Матрица Якоби такого радиального отображения — это плюс слагаемое ранга один вдоль : она растягивает направлений, ортогональных , с коэффициентом , а радиальное направление — с коэффициентом . Определитель — произведение этих коэффициентов растяжения:
Оба множителя положительны при всех , когда , и тогда возрастает от до , так что — биекция; Rezende и Mohamed формулируют условие и обеспечивают его заменой (приложение A.2). В отличие от планарного потока, радиальный поток обращается в замкнутом виде: расстояние выхода удовлетворяет уравнению , квадратному относительно ,
произведение корней которого равно , так что ровно один корень неотрицателен; затем . Например (игрушечные числа), при , , у точки на расстоянии от центра , и она переходит на расстояние ; уравнение имеет неотрицательный корень .
Где они применяются. Каждый слой меняет форму плотности вдоль одного направления или вокруг одной точки, поэтому слоёв нужно много, а обращение планарного слоя итеративно. Ни то ни другое не мешает вариационному выводу, для которого эти потоки и создавались: там берут сэмпл из простого , проводят его вперёд через слоёв до и накапливают , используя только прямые матрицы Якоби, как в IAF. Планарные и радиальные потоки в основном так и применяли — как гибкие апостериорные распределения для VAE (Papamakarios et al., 2021, §3.3.2), тогда как слои частей А–Е создавались для точных плотностей данных.
Как слои деформируют пространство и остаются обратимыми#
Матрица Якоби описывает, как поток деформирует пространство. Каждый из слоёв выше растягивает одни области и сжимает другие, а в точке — локальный множитель, на который слой умножает малые объёмы. Это становится видно, если пропустить регулярную сетку через обученный поток по одному слою за раз и нарисовать изогнутые линии сетки. Рисунок ниже делает это для одного слоя связи с простыми, выбранными вручную и .
Матрица Якоби измеряет, как слой деформирует пространство
Обратимость по построению. Точному методу максимального правдоподобия нужны единственная латентная точка для каждой точки данных и матрица Якоби, которая нигде не схлопывает объём; общее рассуждение приведено в разделе о замене переменных предыдущей заметки, а раздел о треугольной матрице Якоби показывает, когда треугольное отображение обратимо. Для слоёв этой заметки:
- Аффинные слои связи и авторегрессионные слои обратимы при любых и : их диагональные элементы положительны, а обратные отображения выписываются явно.
- Сплайновые слои обратимы при любом выходе сети: каждый кусок строго возрастает, а обратное отображение — корень квадратного уравнения.
- ActNorm обратим, потому что его масштабы положительны; слою, который обучает сам масштаб , как в статье о Glow, нужно .
- Squeeze и фиксированные перестановки каналов лишь переставляют координаты.
- Свёртка обратима, пока все ведущие элементы , что гарантирует параметризация через с фиксированными знаками (часть В). У из статьи о Glow такой страховки нет; там выполняется лишь на практике.
- Планарные и радиальные потоки — диффеоморфизмы только при ограничении или , которое обеспечивается репараметризацией.
Ограничения#
- Нет сжатия. Латентный вектор имеет размерность данных: чисел для изображения , каким бы простым ни было изображение. Многомасштабное выделение упорядочивает латентный вектор, но не уменьшает его.
- Ограниченные слои. Каждый слой должен быть обратимым с легко вычислимым якобианом, поэтому потоку нужно много простых слоёв, и в каждом шаге Glow два слоя из трёх лишь масштабируют или перемешивают каналы. Glow использует до 320 подпреобразований (Papamakarios et al., 2021, §3.4), и на CIFAR-10 его 3.35 бита на размерность всё ещё уступают 2.92 у авторегрессионной модели PixelCNN++.
- Нет «дыр» в плотности. Диффеоморфизм , применённый к гауссиане, даёт плотность, положительную всюду. Данные, лежащие в отдельных кластерах или вблизи поверхности меньшей размерности, можно лишь приблизить, с очень большими якобианами в промежутках.
- Правдоподобие — не качество. Точное правдоподобие измеряет сжатие, а не то, как выглядят сэмплы, и может ставить незнакомые изображения выше знакомых (часть Е).
Итоги#
Нормализующие потоки (normalizing flows) — обратимые нейронные сети, которые перемещают массу вероятности контролируемым образом. Каждый слой через свой определитель Якоби сообщает, насколько он растянул или сжал пространство. Авторегрессионные потоки, у которых поэлементное преобразование — достаточно гибкая монотонная функция (нейросетевые или сплайновые преобразователи, neural or spline transformers), при мягких условиях являются универсальными аппроксиматорами плотности (universal density approximators; Huang et al., 2018, §4, теорема 1; Papamakarios et al., 2021, §3.1). Аффинные слои тоже универсальны, хотя и в более слабом смысле. Композиции аффинных слоёв связи и обратимых линейных отображений (достаточно перестановок) приближают любой -диффеоморфизм в на компактах, если сети и — универсальные аппроксиматоры функций, а образ базовой плотности под действием таких композиций в пределе даёт любое целевое распределение в смысле сходимости по распределению (Teshima et al., 2020, теоремы 2 и 3). Теорема отвечает на вопрос «могут ли аффинные потоки выразить всё?», но практические вопросы оставляет открытыми. Она не оценивает число слоёв; её конструкция преобразует по одной координате в каждом слое связи и относится к плоским векторам, а не прямо к свёрточным сетям Glow; а приближающие потоки могут быть сколь угодно плохо обусловлены. Koehler, Mehta и Risteski (2021) показывают, что неглубокие сети из аффинных слоёв связи универсальны в расстоянии Вассерштейна, если такая плохая обусловленность допускается, а Draxler et al. (2024) доказывают теорему универсальности, в смысле, построенном на KL-дивергенции, для хорошо обусловленных потоков на слоях связи вроде RealNVP.
Слои различаются тем, откуда берётся дешёвый определитель:
| Слой | Почему дёшев | Стоимость двух направлений | |
|---|---|---|---|
| Слой связи (NICE, RealNVP) | ; поэлементно зависит от | (NICE: ) | по одному проходу в каждую сторону |
| Авторегрессионный (MAF) | зависит только от (маски) | плотность: один проход; сэмплирование: проходов | |
| Авторегрессионный (IAF) | то же, но читают латентные координаты с номерами меньше | (от латентных координат с номерами меньше ) | сэмплирование: один проход; плотность: проходов |
| Свёртка (Glow) | , фиксирована, треугольные | одно матричное произведение в каждую сторону | |
| Сплайновый слой связи (NSF) | как у слоя связи, но с монотонным сплайном вместо аффинного отображения | по одному проходу в каждую сторону; обращение решает квадратное уравнение для каждой координаты | |
| ActNorm | диагональная матрица | одно аффинное отображение в каждую сторону | |
| Squeeze, перестановка | переупорядочение координат | бесплатно | |
| Планарный | плюс матрица ранга один (лемма об определителе) | прямое направление: ; обратное: поиск корня скалярного уравнения | |
| Радиальный | с множителем плюс матрица ранга один | прямое направление: ; обратное: квадратное уравнение относительно |
- На изображениях слои связи используют шахматные и поканальные маски, squeeze обменивает пространство на каналы, а на каждом масштабе выделяется половина переменных; шаг Glow — это ActNorm, свёртка и аффинный слой связи.
- Поток точно кодирует любое изображение, что позволяет интерполировать и кодировать внешние изображения; прямые пути между латентными векторами выходят из типичной оболочки базового распределения.
Ноутбук#
Ноутбук о нормализующих потоках и его библиотека nflib (HSE-LAMBDA Deep Generative Models, ветка spring-2025-long) реализуют слои частей А–Д на плоских векторах. Ячейки нумеруются с 1, считая все ячейки подряд, включая текстовые. В ноутбуке нет сохранённых выходов ячеек, поэтому он документирует процедуры, а не результаты. В nflib метод forward каждого слоя идёт в направлении данные → латентное пространство и возвращает выход вместе с логарифмом определителя.
flows.py, слои связи.AffineHalfFlow— это часть А: прямой проход вычисляетx_b * exp(s) + tиlog_det = sum(s), обратный —(z_b - t) * exp(-s)иlog_det = sum(-s). Его флагparityменяет, какая половина служит условием для другой, так что слои в стопке чередуются, аscale=Falseдаёт аддитивный слой связи NICE. При нечётном преобразуется бо́льшая половина.flows.py, авторегрессионные слои.SlowMAFдаёт каждой координате собственный MLP (первой — обучаемую константу,LeafParam) и в обоих направлениях проходит циклом по координатам.MAFиспользует одинARMLP, который за один проход возвращает для всех координат:MAF.forwardработает параллельно, аMAF.inverseпроходит циклом по координатам.IAFпросто меняет эти два метода местами. У обоих классов MAF есть флагparity, который обращает порядок координат на выходе, но с противоположным смыслом:MAFпереворачивает порядок приparity=True(z.flip), аSlowMAF— приparity=False.made.py.MaskedLinearвычисляетF.linear(input, mask * weight, bias), то есть , аMADE.update_masksприменяет правила степеней из части Б:self.m[l-1][:, None] <= self.m[l][None, :]для скрытых слоёв иself.m[L-1][:, None] < self.m[-1][None, :]для выходного слоя. Они строятся как массивы (вход × выход) со степенями, отсчитываемыми от 0, и транспонируются вMaskedLinear.set_mask.nets.py. УMLPтри скрытых слоя шириныnhсLeakyReLU(0.2).ARMLP— это MADE с тремя скрытыми слоями шириныnh, одной маской и естественным порядком координат.PosEncMLPподаёт вMLPпризнаки и на частотах 0.5, 1, 2, 4 и 8; в ноутбуке он нигде не используется.flows.py, слои масштабирования.AffineConstantFlow— покоординатный аффинный слой,z = x * exp(s) + tсlog_det = sum(s), обобщение слоя масштабирования NICE; егоsиtинициализируются сэмплами из стандартного нормального распределения.ActNormнаследует от него и реализует часть Д на плоских векторах: при первом вызове прямого прохода он задаётs = -log(x.std(0))иt = -mean(x * exp(s)), а затем обучает их как обычные параметры. Флагdata_dep_init_done, который за этим следит, — обычный атрибут, не входящий вstate_dict, поэтому модель, заново собранная и загруженная из чекпойнта, при первом прямом проходе снова выполняет инициализацию и перезаписывает загруженныеsиt. После загрузки флаг нужно установить вTrue.flows.py,Invertible1x1Conv. Этот слой следует параметризации из статьи (часть В) и обучает напрямую, без страховки от . Он начинает со случайной ортогональной матрицы, раскладывает её с помощьюtorch.linalg.lu, хранит как фиксированный буфер, обучает , и , применяет матрицу к векторам-строкам (z = x @ W, что не меняет определитель) и возвращаетlog_det = sum(log(abs(S))). Обратное отображение используетtorch.linalg.inv(W).spline_flows.py.unconstrained_RQSиRQSреализуют часть Г: тождественное отображение вне с нулевым логарифмом определителя, крайние производные, равные 1, минимальные ширины и высоты бинов и минимальные производные , поиск бина подсчётом узлов ниже входа и обратное отображение2c / (-b - sqrt(discriminant))с-logabsdet.NSF_CL— сплайновый слой связи с двумя MLP:f1читает первую половину и выдаёт параметров на каждую координату второй половины, которую он преобразует; затемf2читает новую вторую половину и преобразует первую. Таким образом, каждый слой обновляет обе половины, тогда как в слое связи Durkan et al. (2019), формулы 9–11, условная половина получает сплайны с напрямую обучаемыми параметрами. Изменения формы тензоров (reshape) в нём предполагают чётное .NSF_AR— авторегрессионная версия с обучаемым вектором параметров для первой координаты и отдельным MLP для каждой следующей; как иSlowMAF, он проходит циклом по координатам в обоих направлениях.- Две особенности
spline_flows.py.NSF_CLиNSF_ARуже пропускают ширины и высоты через softmax и умножают на , аRQSприменяет softmax ещё раз. Поэтому итоговые ширины пропорциональны , где — вектор вероятностей, и ширины двух бинов могут различаться не более чем в раза при . Производные тоже дважды проходят через softplus, поэтому производная во внутреннем узле никогда не бывает меньше . Сплайн остаётся монотонным и обратимым, но он менее гибок, чем в статье, где каждое преобразование применяется один раз. - Ячейка 2 ноутбука перечисляет планарные и радиальные потоки, RealNVP, MAF (в форме из части Б), свёртку , ActNorm (как с диагональной ) и NSF.
nflibне реализует ни планарные, ни радиальные потоки. Ячейка 3 импортируетAffineConstantFlow,ActNorm,AffineHalfFlow,SlowMAF,MAF,IAF,Invertible1x1Conv,NSF_ARиNSF_CL, но ячейка 7 использует толькоActNorm,Invertible1x1ConvиNSF_CL(, , ширина скрытого слоя 16): три блока из них на двумерных данных с логистическим базовым распределением. Каждый блок — это шаг Glow из части Д со сплайновым слоем связи, то есть слой RQ-NSF (C); при и без пространственной сетки «свёртка» — это обучаемая обратимая матрица перемешивания . - Ячейка 15 пропускает сетку через обученный поток в обратном направлении (
model.inverse) и для каждого слоя рисует перемещения точек и деформацию сетки; именно этот эксперимент рисунок с деформацией сетки имитирует для одного слоя связи. Ячейка 17 готовит ещё 500 шагов обучения с перерисовкой каждые 10 шагов (перемещения точек не более чем для девяти слоёв и деформация сетки одного слоя), но её цикл заканчиваетсяbreakпосле первой перерисовки, так что в нынешнем виде она делает один шаг оптимизатора и рисует один раз.
Ноутбук домашнего задания 03_hw_vapnev из того же репозитория просит построить три модели CelebA и сравнить их. Его единственные сохранённые выходы ячеек — устройство (mps), форма изображения [3, 64, 64] и сетка из 25 обучающих изображений; ячейки с моделями оставлены пустыми.
- Ячейки 3–6: данные.
CelebADatasetиз файла репозиторияseminars/utils/datasets/celeba.pyсResize(64),CenterCrop(64),ToTensor()иx * 2 - 1, то есть и . Шум деквантования этот конвейер не добавляет. Поток, обученный на таких значениях, видит лишь 256 различных значений на координату и может неограниченно повышать правдоподобие, сосредоточивая массу на них. Перед обучением нужно добавить равномерный шум ширины , а к сообщаемому отрицательному логарифму правдоподобия прибавить бита на размерность (откуда берётся этот сдвиг). - Ячейка 10, задание 1: нормализующий поток на CelebA с оценкой качества по FID и отрицательному логарифму правдоподобия. Допускаются любые слои: свёрточные потоки (часть Е) или потоки на развёрнутом изображении, которые, как предполагает текст задания, проще и слабее.
- Ячейка 12, задание 2: VAE на CelebA с оценкой качества по FID.
- Ячейка 14, задание 3: VAPNEV (Agrawal and Dukkipati, 2016) — VAE, правдоподобие которого точно вычисляет real NVP вместо попиксельного гауссовского или бернуллиевского распределения, и его условная версия; см. Варианты VAE.
- Ячейка 16, задание 4: анализ латентного пространства. Какая модель лучше интерполирует, кодирование изображения не из CelebA с поиском ближайших к нему латентных векторов и самый интересный сэмпл. Сторона потоков разобрана в разделе Интерполяция и кодирование с точным обратным отображением.
- Ячейка 18 просит письменно сравнить модели, приведя сэмплы каждой из них.
Дальше#
Потоки получают точное правдоподобие ценой ограничений на архитектуру: каждый слой должен быть обратимым, с дешёвым в вычислении определителем Якоби, а латентный вектор должен сохранять размерность данных. Модель, основанная на энергии (energy-based model), снимает все эти ограничения. Любая сеть , выдающая число, задаёт плотность , если конечна, но сама нормирующая константа неизвестна, поэтому ни сэмплирование, ни градиент правдоподобия нельзя вычислить напрямую. И для того и для другого тогда нужны марковские методы Монте-Карло (MCMC). Следующая заметка, сэмплирование ненормированных плотностей, строит сэмплеры, которым плотность нужна лишь с точностью до константы: MALA, гамильтонов Монте-Карло и NUTS.
Литература#
- L. Dinh, D. Krueger, Y. Bengio. NICE: Non-linear independent components estimation. ICLR Workshop, 2015. §3.3 (слой масштабирования).
- L. Dinh, J. Sohl-Dickstein, S. Bengio. Density estimation using Real NVP. ICLR, 2017. §3.4 (маски), §3.6 (squeeze и многомасштабная архитектура), §3.7 (батч-нормализация), §4.1 (предобработка и архитектура), приложение D. Эталонный код: tensorflow/models,
research/real_nvp. - M. Germain, K. Gregor, I. Murray, H. Larochelle. MADE: Masked autoencoder for distribution estimation. ICML, 2015.
- G. Papamakarios, T. Pavlakou, I. Murray. Masked autoregressive flow for density estimation. NeurIPS, 2017.
- D. P. Kingma, T. Salimans, R. Jozefowicz, X. Chen, I. Sutskever, M. Welling. Improved variational inference with inverse autoregressive flow. NeurIPS, 2016.
- D. P. Kingma, P. Dhariwal. Glow: Generative flow with invertible 1×1 convolutions. NeurIPS, 2018. §3.1 (ActNorm), §3.2 (свёртка 1×1), §3.3 (слой связи, инициализация нулями), §5 (таблица 2), §6 (температура, интерполяция). Эталонный код: openai/glow.
- C. Durkan, A. Bekasov, I. Murray, G. Papamakarios. Neural spline flows. NeurIPS, 2019. §3.1–3.2, §5, приложение A.
- J. A. Gregory, R. Delbourgo. Piecewise rational quadratic interpolation to monotonic data. IMA Journal of Numerical Analysis, 2(2):123–130, 1982.
- D. J. Rezende, S. Mohamed. Variational inference with normalizing flows. ICML, 2015. §4.1 (планарные и радиальные потоки), приложение A (условия обратимости).
- E. Nalisnick, A. Matsukawa, Y. W. Teh, D. Gorur, B. Lakshminarayanan. Do deep generative models know what they don’t know? ICLR, 2019. §3.
- C.-W. Huang, D. Krueger, A. Lacoste, A. Courville. Neural autoregressive flows. ICML, 2018. §4, теорема 1 (универсальная аппроксимация).
- T. Teshima, I. Ishikawa, K. Tojo, K. Oono, M. Ikeda, M. Sugiyama. Coupling-based invertible neural networks are universal diffeomorphism approximators. NeurIPS, 2020. Теоремы 2 и 3 (универсальность потоков на аффинных слоях связи).
- F. Koehler, V. Mehta, A. Risteski. Representational aspects of depth and conditioning in normalizing flows. ICML, 2021.
- F. Draxler, S. Wahl, C. Schnörr, U. Köthe. On the universality of volume-preserving and coupling-based normalizing flows. ICML, 2024. §5.
- G. Papamakarios, E. Nalisnick, D. J. Rezende, S. Mohamed, B. Lakshminarayanan. Normalizing flows for probabilistic modeling and inference. JMLR, 22(57), 2021. §3.2, §3.3.2, §3.4.
- HSE-LAMBDA, репозиторий курса Deep Generative Models:
nf.ipynb,03_hw_vapnev.ipynb.