Некоторая программная история, которую я скомкано изложил здесь.
https://telegra.ph/Babl-mashina-04-02
Навеяно записями блога.
Долго ли коротко ли… Мы прогнозируем неудачно.
1. Причины и проблемы
Декомпозиция рядов на тренд, сезонность, праздники и шум если работает — то чисто по каузальности Грейнджера. Одно маркер (но не причина) изменений другого. Если Земля вращается вокруг Солнца, необязательно все остальное этому подчинено.
Чаще всего тренд идет некоторым коридором, который немного меняет направление. Направляющие и пороги.
Далее. Эти направляющие и пороги не живут в линейном привычном нам времени. Не дата признак, и не час, и не месяц.
Будущее не функция прошлого, в лучшем случае настоящего. То есть будущее = функция (настоящего) = функция(функция(прошлого)).
Мы приходим к рекуррентности, или скажем, к рекуррентным нейросеткам, которые Тьюринг-полны. И трансформеры с кодированием позиций тоже Тьюринг-полны.
И они же плохо работают — может потому что Тьюринг-полны?… А может потому что детерминированная машина неспособна прогнозировать?
Как мы знаем, сетки (и гауссовы процессы тоже) прекрасно интерполируют, но благодаря своей supervised-природе — они натыкаются на no free lunch теорему (один алгоритм не способен перформить на всех задачах).
2. В поиске решений
Мало того что (сама вселенная) решение должно быть unsupervised, оно должно быть еще недетермированным. Но не вероятностной машиной Тьюринга.
Чем-то за пределами (счетных програм) машины Тьюринга.
То есть каждая ячейка памяти — некоторая условно вероятно определенная величина от текущего настоящего. Мыльный пузырь, который может лопнуть, а мы должны успеть его прочитать.
И это не цепи Маркова. Некоторая надстройка. Программа над случайными состояниями.
Инструкций можно как минимум три:
если x — случайная величина из распределения, то
W — записать текущее значение по адресу time на ленту,
R — прочитать интерполированное значение из ленты в моменте position,
C — сравнить x с текущим значением, больше — сдвинуть position на x, меньше: time на x.
Программы можно схлопывать — парные инструкции в одну до посинения.
Потом можно с текущим распределением прогнать программу на данными — и получить ее профиль: какие выходы для каких входов, какие переходы из инструкций чаще встречались, и как они переводили x1 -> x2.
С профилем, программу следует отдебажить в направлении линрега ее ответов к 45 градусовой прямой, и чтоб дисперсии поменьше вокруг.
Кластеры переходов пар вход/выход (переходов из программы) — некий граф. Кратчайший путь на нем — новая программа. Или просто худший кусок мы можем заменить лучшим (с точки зрения коэффициентов линрега). Первую программ можно взять случайно.
Обновить распределение x следует данными из последнего прогона.
- Факу
Сойдется ли? Надо проверять и доказывать.
Как делать инференс? Брать последний промежуток времени и выполнять программу, пока не доберемся до нужного горизонта.
А что если что-то исправить? Было бы круто.
Почему это прогнозирует всё? Потому что бабл-машина допускает менять прошлое внутри своих представлений. Мы же делаем это постоянно. В будущее она дойдет уже со своей внутренней скоростью.
А если программы меняются? Не должны. Должны меняться распределения. Как в законах физики.
- Статус
Это очень сырая концепция, конечно. Основной тезис все же том, что алгоритмы работают во внутреннем времени систем, которое далеко нелинейно, а алгоритмизировано поверх распределений.
3 комментария на «“It’s a trap”»
Hello, I check your blog regularly. Your story-telling style is witty, keep up
the good work!
There’s definately a lot to learn about this topic.
I really like all the points you made.
Hi there! This blog post couldn’t be written much better!
Reading through this post reminds me of my previous roommate!
He continually kept preaching about this. I most certainly
will forward this information to him. Pretty sure he will have a great read.
Many thanks for sharing!