Продолжая думать над 60 (абстракции) и следуя заветам 64, вспомнил, что в TriadicMemory [OvrmnDTMem] были примеры темпоральной памяти и глубокой темпоральной памяти:

  • Temporal Memory Example - Text Learning.nb
  • Deep Temporal Memory - Introduction.nb
  • Deep Temporal Memory - SPMF Sequence Example.nb

И там описывались иерархические контексты, которые системы выучивает для предсказания данных. Хмм. Иерархические контексты - это звучит как то, что я искал для реализации 60. Поэтому решил глубже покопать эту тему, и выяснить, каким образом там формируются контексты, что они описывают, и что на них можно построить.

Т.к. описанные выше ноутбуки написаны на Mathematica, то пришлось их портировать на питон - получилсь triadic_temporal_test.ipynb.

В самом triadic_termporal_test есть выводы по отдельным частям процесса. Здесь приведу глобальные выводы: 1) в упрощенном варианте система реализуется n-gram модель, в которой следующее слово предсказывается исходя из текущего слова, предыдущего слова + контекста. Сами контектсы формируются как биграммы. 2) в deep temporal варианте предсказание делается немного замороченее, непосредственно слова не используются, а используются лишь 4 из 7 контекстов. 3) если описать происходящее так $[x, y] \rightarrow z$, ($x$ и $y$ предсказывают $x$), то будет наблюдаться явление суперпозиции. $x$ будет стремиться расти - сначала 10 разрядов, потом 20, 30… вплоть до 70. Т.е. $x$ будут накапливаться коды различных контектов. И так будет продолжаться (наращивание), покуда обратный запрос $[y, z] \rightarrow x$ позволяет узнать в возвращённой груде битов исходный $x$. Т.е. если $x$ становится слишком жирным и теряет свою идентичность, то создаётся новый контекст. 4) в дальнейшем контекстно обременённый $x$ служит в некотором роде распределением вероятности будущих слов. И $mem$ используется уже для точного предсказания $[x, y] \rightarrow z$. 5) при этом “магии” контексто-образования, которая бы реализовавыла обобщение (генерализацию) в описанной модели нет. Т.е. система не способна работать по аналогии, обнаруживать похожести, заменять одно на другое. В итоге проблема curse of dimensionality была и остаётся. Если будет встречено новое слово, то система ничего с ним сделать не сможет (не сможет по контексту понять его смысл), система должна изучить все слова и все сочетания слов, чтобы что-то делать. Но все сочетания слов изучить невозможно, т.к. их слишком много - см. [BengioNeuralProbLangModel]. 6) система реализует snapping - если видит биты известных данных, то разрезолвливает их до чистого вида. Т.е. неизвестные биты рассматривает как шум. При этом если эти биты, есть у несколько сущностей, то будет разрезовлена суперпозиция. Короче что-то типа cleanup memory в SDM. 7) жаль, что активности по развитию TriadicMemory никакой нет. Ссылок нет, последние коммиты были 3 года назад. Думал, что кто-то игрался со spatial контекстами на основе TriadicMemory, но нет - увы =(

Короче, сам инструмент TriadicMemory всё равно оставляет интерес. То что реализованная на его базе темпоральная память не способна обобщать - это не следствие природы TriadicMemory, а следствие алгоритма и подхода к построению системы на его основе. Такой же результат можно и с нейронными сетями получить, и с чем угодно.