2024-08-19

vak: (Знайка)
"The statistical thermodynamics of generative diffusion models: Phase transitions, symmetry breaking and critical instability"

https://arxiv.org/pdf/2310.17467v2

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

vak: (Default)
Алгол наш кое-как дышит, но главный тест пока не проходит. Циклится где-то на вызовах-возвратах функций.

Много лет назад один клёвый чувак написал хитрый тест для Алгола 60. Да вы все его знаете: это знаменитый Дональд Кнут. Тест называется "man or boy". По нашему можно перевести как "мужик или хлюпик". Только по настоящему серьёзный компилятор Алгола-60 может выполнить этот код правильно. Разобраться как работает этот тест нелегко, но познавательно. На Розетте есть большая подборка вариантов этого теста на разных языках программирования. Я здесь покажу на языке Ди.

Язык Ди сам по себе любопытная вещь, но для нас здесь он просто чуть более продвинутый Си. Вот man or boy на Ди:
import core.stdc.stdio;

int A(int k, const lazy int x1, const lazy int x2, const lazy int x3,
      const lazy int x4, const lazy int x5) 
{
    int B()
    {
        k--;
        return A(k, B(), x1, x2, x3, x4);
    }
    return k <= 0 ? x4 + x5 : B();
}

void main()
{
    printf("%d\n", A(10, 1, -1, -1, 1, 0));
}
Имеется функция A() с аргументами, большинство из которых передаются в "ленивом" виде. Имеется внутренняя функция B() без параметров. Функция A иногда вызывает B. Функция B всегда вызывает A. Тест должен напечатать значение -67.

Как всё это выполняется? дальше )