
Рисунок 1. Сравнение различных квазислучайных последовательностей с низким расхождением. Заметьте, что предлагаемая мной
Рассматриваемые в статье темы
- Последовательности с низким расхождением в одном измерении
- Методы с низким расхождением в двух измерениях
- Расстояние упаковки
- Множества с многоклассовым низким расхождением
- Квазислучайные последовательности на поверхности сферы
- Квазипериодический тайлинг плоскости
- Маски дизеринга в компьютерной графике
Какое-то время назад этот пост был выложен на главной странице Hacker News. Можете прочитать там его обсуждение.
Введение: случайное против квазислучайного
На рисунке 1 можно заметить, что при простом равномерном случайном сэмплировании точки внутри единичного квадрата наблюдается скапливание точек, а также возникают области совсем без точек («белый шум»). Квазислучайная последовательность с низким расхождением — это метод построения (бесконечных) последовательных точек детерминированным образом, который уменьшает вероятность скапливания (расхождения), в то же время обеспечивая равномерное покрытие всего пространства («синий шум»).
Квазислучайные последовательности в одном измерении
Методы создания полностью детерминированных квазислучайных последовательностей с низким расхождением в одном измерении очень хорошо изучены и в общем виде решены. В этом посте я в основном буду рассматривать открытые (бесконечные) последовательности, сначала в одном измерении, а затем перейду к более высоким размерностям. Фундаментальное преимущество открытых последовательностей (то есть расширяемых в
- иррациональные дроби: Кронекер, Рихтмайер, Рэмшоу
- (взаимно) простые числа: Ван дер Корпут, Холтон, Форе
- Несводимые полиномы: Нидеррайтер
- Примитивные многочлены: Соболь
Ради краткости в этом посте я в основном буду сравнивать новую аддитивную рекурсивную
где
При
Важно заметить, что значение
Интересно заметить, что существует бесконечное количество других значений
Теперь мы сравним этот рекурсивный метод с хорошо известными последовательностями ван дер Корпута с обратным порядком разрядов [ван дер Корпут, 1935]. Последовательности ван дер Корпута на самом деле являются семейством последовательностей, каждая из которых определяется уникальным гиперпараметром
В следующем разделе мы сравним общие характеристики и эффективность каждой из этих последовательностей. Рассмотрим задачу вычисления определённого интеграла
Мы можем аппроксимировать его как:
- Если
равны
, это это формула прямоугольников;
- Если
выбираются случайным образом, то это метод Монте-Карло; а
- Если
являются элементами последовательности с низким расхождением, то это метод квази-Монте-Карло.
На графике ниже показаны типичные кривые погрешностей
Это показывает, что для

Рисунок 2. Сравнение одномерного численного интегрирования с помощью различных квазислучайных методов Монте-Карло. Чем меньше значения, тем лучше. Новая
Здесь стоит упомянуть следующее:
- это соответствует знанию о том, что погрешности для равномерного случайного сэмплирования асимптотически снижаются к
, а погрешность для обеих квазислучайных последовательностей стремится к
.
- Результаты для
-последовательности (синей) и последовательности Соболя (красной) — лучшие.
- График демонстрирует, что последовательность ван дер Корпута обеспечивает хорошие, но невероятно постоянные результаты для задач интегрирования!
- Здесь видно, что для всех значений
последовательность
даёт результаты лучше, чем последовательность ван дер Корпута.
Новая последовательность, которая является последовательностью Кронекера с использованием золотого сечения, является одним из лучших вариантов для одномерных квазислучайных методов интегрирования Монте-Карло (Quasirandom Monte Carlo, QMC).
Стоит также заметить, что хотя
Квазислучайные последовательности в двух измерениях
Большинство современных методов построения низкого расхождения в более высоких измерениях просто комбинирует (покомпонентно)
Последовательность Холтона строится простым использованием
При обобщении до более высоких размерностей рекурсивные методы Кронекера страдают ещё бОльшими трудностями. Хотя при использовании
В предлагаемых решениях используются skipping/burning, leaping/thinning. А для кодирования (скрэмблинга) конечных последовательностей используется другая техника, часто применяемая для преодоления этой проблемы. Скрэмблинг невозможно использовать для создания открытой (бесконечной) последовательности с низким расхождением.

Рисунок 3. (11,13)-последовательность Холтона очевидно не является последовательностью с низким расхождением (слева). Не является ею и аддитивная рекурсивная (11,13)-последовательность (посередине). Некоторые двухмерные аддитивные рекурсивные последовательности, которые используют хорошо известные иррациональные числа, достаточно хороши (справа).
Аналогично, несмотря на в целом лучшие результаты последовательности Соболя, её сложность и, что более важно, необходимость очень тщательного выбора гиперпараметров делает её не такой дружелюбной.
Итак, повторим, в
- типичные последовательности Кронекера требуют выбора
линейно независимых иррациональных чисел;
- последовательность Холтона требует
взаимно-простых попарно целых чисел; а
- последовательность Соболя требует выбора
направляющих чисел.
Новая последовательность— единственная
-мерная квазислучайная последовательность с низким расхождением, не требующая выбора базисных параметров.
Обобщение золотого сечения
tl;dr В этой части я расскажу о том, как строить новый класс
Существует множество способов обобщения последовательности Фибоначчи и/или золотого сечения. Предложенный ниже метод обобщения золотого сечения не нов [Крчадинац, 2005 год]. Кроме того, характеристический многочлен связан с многими областями алгебры, в том числе числами Перрона и с числами Пизо-Виджаярагхавана. Однако нова в нём явная связь между этой обобщённой формой и построением высокоразмерных последовательностей с низким расхождением. Мы определяем обобщённый вид золотого сечения
Для
Для
Для
Для
Эта особая последовательность констант
Также у нас есть следующее очень элегантное свойство:
Эта последовательность, иногда называемая обобщённой или отложенной последовательностью Фибоначчи, изучена достаточно глубоко [Как, 2004 год, Уилсон, 1993 год], а последовательность для
Основной результат: следующая беспараметрическая-мерная открытая (бесконечная) последовательность
имеет превосходные характеристики низкого расхождения по сравнению с другими существующими методами.
Для двух измерений эта обобщённая последовательность при
Снова посмотрите на рисунок 1, чтобы сравнить различные двухмерные квазислучайные последовательности с низким расхождением.
Код и демонстрации
В одном измерении псевдокод для
g = 1.6180339887498948482
a1 = 1.0/g
x[n] = (0.5+a1*n) %1
В двух измерениях псевдокод для координат
g = 1.32471795724474602596
a1 = 1.0/g
a2 = 1.0/(g*g)
x[n] = (0.5+a1*n) %1
y[n] = (0.5+a2*n) %1
Псевдокод в трёх измерениях для координат
g = 1.22074408460575947536
a1 = 1.0/g
a2 = 1.0/(g*g)
a3 = 1.0/(g*g*g)
x[n] = (0.5+a1*n) %1
y[n] = (0.5+a2*n) %1
z[n] = (0.5+a3*n) %1
Шаблон кода на python. (учтите, что массивы и циклы Python начинаются с нуля!)
import numpy as np # Using the above nested radical formula for g=phi_d # or you could just hard-code it. # phi(1) = 1.61803398874989484820458683436563 # phi(2) = 1.32471795724474602596090885447809 def phi(d): x=2.0000 for i in range(10): x = pow(1+x,1/(d+1)) return x
# Number of dimensions. d=2 # number of required points n=50 g = phi(d) alpha = np.zeros(d) for j in range(d): alpha[j] = pow(1/g,j+1) %1 z = np.zeros((n, d)) # This number can be any real number. # Common default setting is typically seed=0 # But seed = 0.5 is generally better. for i in range(n): z[i] = (seed + alpha*(i+1)) %1 print(z)
Я написал код таким образом, чтобы он соответствовал математическим обозначениям, использованным в этом посте. Однако по причинам соглашений в программировании и/или эффективности стоит упомянуть некоторые модификации. Во-первых, поскольку
z[i+1] = (z[i]+alpha) %1
Во-вторых, в языках, имеющих возможность векторизации, код дробной функции можно векторизировать следующим образом:
for i in range(n): z[i] = seed + alpha*(i+1) z = z %1
Наконец, мы можем заменить эти сложения чисел с плавающей точкой и целых чисел, умножив все константы на
- beta.observablehq.com/@jrus/plastic-sequence, разработчик Джейком Рус:
- www.shadertoy.com/view/4dtBWH, разработчик @Штирнерс Хост (XGKICK):
Минимальное расстояние упаковки
Новая-последовательность — это единственная двухмерная квазислучайная последовательность с низким расхождением, в которой минимальное расстояние упаковки снижается только до
.
Хотя стандартный технический анализ вычисления расхождения заключается в оценке
Как и в предыдущем рисунке, величина минимального расстояния нормализована коэффициентом
Для последовательности
Также заметьте, что Bridson Poisson disc sampling, которая не является расширяемой до

Рисунок 4. Минимальное попарное расстояние для различных последовательностей с низким расхождением. Заметьте, что
Диаграммы Вороного
Ещё один способ визуализации равномерности распределения точек — создание диаграммы Вороного из первых
Все значения, в которых

Рисунок 4. Визуализация формы диаграмм Вороного на основании площади каждого многоугольника Вороного для (i)
При определённых значенияхсетка Вороного для
-последовательности состоит только из шестиугольников.

Рисунок 5. Визуализация формы диаграмм Вороного на основании числа сторон каждого многоугольника Вороного для (i)
Квазислучайный тайлинг Делоне для плоскости
-последовательность — это единственная квазислучайная последовательность с низким расхождением, которую можно использовать для создания
-мерных квазипериодических тайлингов с помощью её сетки Делоне.
Триангуляция Делоне, являющаяся подобием графа Вороного, предоставляет возможность по-другому посмотреть на эти распределения. Однако более важно то, что триангуляция Делоне обеспечивает новый метод создания квазипериодического тайлинга (мозаичного разбиения) плоскости. Триангуляция Делоне
При значенияхтриангуляция Делоне
-последовательности образует квазипериодические тайлинги, каждый из которых состоит всего из трёх базовых треугольников (красный, жёлтый, синий), которые всегда соединены парами и образуют хорошо заданный квазипериодический тайлинг (замощение) плоскости тремя параллелограммами (ромбоидами).

Рисунок 6. Визуализация триангуляции Делоне для (i)
Заметьте, что
Показанная ниже анимация демонстрирует, как сетка Делоне для последовательности
Рисунок 7.
Хотя расположение красных параллелограммов демонстрирует значительную регулярность, можно чётко увидеть, что синие и жёлтые параллелограммы размещены в квазипериодическом виде. Спектр Фурье этой решётки можно увидеть на рисунке 11, он представляет собой классические точечные спектры. (Заметьте, что рекурсивная последовательность на основе простых чисел тоже кажется квазипериодической в том смысле, что это упорядоченный неповторяющийся паттерн. Однако её паттерн в интервале
То же относится и к относительной частоте треугольников:
Из этого следует, что общая относительная площадь, покрываемая этими тремя треугольниками в пространстве, равна:
Можно также предположить, что мы можем создать этот квазипериодический тайлинг через подстановку на основании последовательности A. То есть
Для трёх измерений, если мы рассмотрим обобщённую последовательность Фибоначчи, то
При определённых значениях3D-сетка Делоне, связанная с последовательностью
, задаёт квазипериодическую кристаллическую решётку.
Дискретизированная упаковка, часть 2
На рисунке ниже показаны первые

Звуковые волны
Просто ради интереса, по просьбе одного из читателей News Hacker я смоделировал, как все эти квазислучайные распределения точек могут звучать! Я использовал функцию Listplay из Mathematica: “ListPlay[{a1,a2,…}] создаёт объект, воспроизводящийся как звук, амплитуда которого задаётся как последовательность уровней.” Поэтому без всяких комментариев я предоставлю вам самим решать, какие из них вам больше нравятся среди одномерных квазислучайных распределений (моно) и двухмерных квазислучайных распределений (стерео).
| Моно | Стерео | |
|---|---|---|
| Случайная | ||
| Соболь | ||
| Нидеррайтер | ||
| Холтон | ||
| Кронекер | ||
| R |
Множества с многоклассовым низким расхождением
Некоторые последовательности с низким расхождением демонстрируют то, что называется «многоклассовым низким расхождением». До этого момента мы предполагали, что когда нам нужно как можно равномернее распределить
На рисунке ниже показано, как распределяются
Последовательность— это квазислучайная последовательность с низким расхождением, обеспечивающая простое построение многоклассового низкого расхождения.

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

Рисунок 10.
Дизеринг в компьютерной графике
Большинство современных техник дизеринга (например, дизеринг Флойда-Стейнберга) основано на распределении ошибок, что не очень подходит для параллельной обработки и/или непосредственной оптимизации в GPU. В таких случаях превосходные характеристики производительности показывает точечный дизеринг со статическими масками дизеринга (т.е. полностью зависимыми от целевого изображения). Вероятно наиболее известные и широко используемые маски дизеринга основаны на матрицах Байера, однако более новые пытаются ближе имитировать характеристики синего шума. Нетривиальная сложность создания масок дизеринга на основании последовательностей с низким расхождением и/или синего шума, заключается в том, что эти последовательности с низким расхождением проецируют целочисленное
То есть
Более того, если добавлена функция треугольной волны для устранения разрывности, вызванной функцией frac(.) на каждой целочисленной границе:
то маска и её график фурье/частотограмма ещё больше улучшаются. Также мы заметим, что поскольку
то вид приведённого выше выражения связан со следующим конгруэнтным уравнением
R-маски дизеринга создают результаты, конкурирующие с современными методами на основе масок синего шума. Но в отличие от масок синего шума, их не обязательно вычислять заранее, потому что их можно вычислять в реальном времени.
Стоит заметить, что эту структуру также предлагал Миттринг, но он находит коэффициенты эмпирически (и не воспроизводит окончательные значения). Более того, это помогает в понимании того, почему так хорошо работает эмпирическая формула Хорхе Хименеса, использованная при создании «Call of Duty» (часто её называют «Interleaved Gradient Noise»).
Однако для неё требуется 3 умножения с плавающей запятой и два оператора %1, а предыдущая формула показывает, что мы можем сделать это всего двумя умножениями с плавающей точкой и одной операцией %1. Но важнее то, что этот пост даёт более чёткое математическое понимание того, почему маска дизеринга в таком виде настолько эффективна, если не оптимальна. Результаты этой матрицы дизеринга показаны ниже на примере классического тестового изображения «Lena» 256×256, а также шахматного тестового паттерна. Также показаны результаты использования стандартных масок дизеринга Байера, а также один пример с синим шумом. Два наиболее распространённых метода синего шума — это Void-and-Cluster и Poisson disc sampling. Для краткости я показал только результаты метода Void and cluster. [Питерс]. Interleaved gradient noise работает лучше, чем Байер и синий шум, но не так хорошо, как
- Он не изотропный! Спектры Фурье демонстрируют только отдельные и дискретные точки. Это классический признак квазипериодических тайлингов и дифракционных спектров квазикристаллов. В частности, спектры Фурье для
-маски соответствуют тому факту, что триангуляция Делоне для канонической R-последовательности состоит из квазипериодического тайлинга трёх параллелограммов.
- R-дизеринг при комбинировании с треугольной волной обеспечивает невероятно равномерную маску!
- Несмотря на отличающийся внешний вид двух R-масок дизеринга, в окончательных результатах дизеринга разницы почти нет.
- Глядя на губы и плечи Лены, можно сказать, что R-дизеринг обеспечивает более чёткие результаты, чем маска синего шума.
- Яркость
внутренне является вещественным числом, а потому маски естественным образом масштабируются до произвольных битовых глубин.

Рисунок 11. Слева направо: (i) Исходное изображение (ii) R-последовательность, скомбинированная с функцией треугольной волны; (iii) R-последовательность отдельно; (iv) маска дизеринга синего шума и (v) стандартный Байер. Маски дизеринга R-последовательности вполне конкурентны против других современных масок. Заметьте, что R2 показывает лучшее качество на лице и плечах Лены. Кроме того, в отличие от масок синего шума, R-маска дизеринга так проста, что не требует предварительных вычислений.
Более высокие размерности
Аналогично предыдущему разделу, но для пяти (5) измерений, график ниже показывает (глобальное) минимальное расстояние между любыми двумя точками для
Последовательность— единственная
-мерная последовательность с низким расхождением, в котором расстояние упаковки начинает падать только со скоростью
.

Рисунок 12. Это показывает, что R-последовательность (синяя) постоянно лучше Холтона (оранжевая); Соболя (зелёная); Нидеррайтера (красная); и случайной (фиолетовая). Учтите, что чем больше, тем лучше, потому что это соответствует бОльшему расстоянию упаковки.
Численное интегрирование
На следующем графике показаны типичные кривые погрешностей

Рисунок 13. Квазислучайные методы Монте-Карло для 8-мерного интегрирования. Чем меньше значения, тем лучше. Новая R-последовательность и последовательность Соболя показывают себя значительно лучше, чем последовательность Холтона.

