Dyna – Logic Programming for Machine Learning
Dyna — декларативный логический язык с весами для исследователей машинного обучения.
Он позволяет описывать что вычислять, не заботясь о как. Примеры:
c(I,K) += a(I,J) * b(J,K). % умножение матриц
fib(N) := fib(N-1)+fib(N-2). % числа Фибоначчи
phrase(X,I,K) max= phrase(Y,I,J)*phrase(Z,J,K)*rule(X,Y,Z). % CKY-разбор
История: проект начат в 2004 для сокращения разрыва между математикой и кодом.
- Dyna 1.0 добавил произвольные полукольца к Datalog.
- Dyna 2.0 убрал ограничение на единое полукольцо, разрешил свободные переменные, ленивые и энергичные вычисления, наследование через dynabases.
Актуальные исследования
- Реализация через реляционную алгебру и перезапись термов.
- Использование обучения с подкреплением для выбора оптимального порядка вычислений.
Ключевые статьи
- PhD M. Francis-Landau «Declarative Programming Via Term Rewriting» (2024).
Комментарии (13)
- Автор рад, что его PhD-исследование по Dyna3 обсуждают на Hacker News.
- Сравнивают Dyna со Scallop: оба расширяют Datalog до произвольных полуколец, но Scallop ориентирован на дифференцируемость и интеграцию с нейросетями.
- Код Dyna3 на Clojure вызывает восторг «инопланетным артефактом из будущего» и содержит JIT-компилятор.
- Пользователи спрашивают, пригоден ли Dyna для продакшена; автор отвечает: это исследовательский проект, но API уже есть на Python, Clojure и Java.