Close

05.05.2015

Как работает ИВП (иерархическая временная память)

Одним из немногих проектов, которым я занимаюсь как разработчик, является совместный с Лабораторией интеллектуальных динамических систем ИСА РАН проект по моделированию функций сознания (с применением методов искусственного интеллекта и робототехники).

На текущем этапе я занимаюсь изучением хитрого самообучающегося алгоритма распознавания динамических объектов, который был предложен компанией Numenta и реализован в их платформе NuPIC и имеет название иерархическая временная память (hierarchical temporal memory или HTM). Кроме переведенного на русский официального руководства для начинающих в Рунете не так много материалов по этой теме (вот, например, на хабре).

Оригинальное описание алгоритма (на английском) можно найти в терминах моделей нейронных сетей и в терминах марковских моделей. Первый вариант не устроил меня завуалированностью алгоритмических понятий словами типа «латеральный дендрит», «последовательный дендритный сегмент» и т.д., которые привычны для данного класса моделей, но на самом деле отдаляют нас от деталей реализации. Второй вариант дает больше понимания, чем первый, но доступен достаточно узкому кругу математически подготовленных читателей. Ниже попробую предложить третий вариант более близкий на мой взгляд людям, которые пытаются понять как работает та или иная реализации HTM в коде.

HTM может работать в режиме обучения и режиме предсказания (распознавания). Отметим, что в некоторых реализациях HTM сеть работает именно в разных режимах, то есть присутствует флаг включения режима обучения и отключения его. При изменении состояния флага начинают работать те или иные ветки алгоритмов. В тоже время в [WP] понятие обучения вводится как дополнительное состояние элементов данных, с которыми работает алгоритм временной группировки (об этом будет сказано позднее).

Алгоритм работы HTM состоит из двух крупных этапов:

  1. Пространственная группировка входных данных
  2. Временная группировка результатов первого этапа

Алгоритм пространственной группировки

В ходе пространственной группировки (spatial pooling) входной массив пикселей преобразуется в разреженную бинарную матрицу. Элемент этой матрицы равен единице, если выполнен ряд условий. В грубом приближении расчет каждого элемента матрицы ведется по некоторому множеству пикселей. Для данного множества пикселей элемент матрицы можно назвать родительским. Соответствие задается жестко на этапе настройки сети, однако связи родительского элемента и пикселей имеют характеристику силы связи, которая изменяется в процессе работы алгоритма. Родительский элемент видит только некоторое подмножество пикселей, у которых сила связи выше порога. Алгоритм пытается настроиться на такие подмножества пикселей, которые будут повторяться наиболее часто (это реализовано за счет увеличения силы связи с активными пикселями и уменьшения с пассивными).
Если в этом множестве много единичных пикселей (больше порога) + вокруг остальные элементы матрицы имеют меньше единичных пикселей, то данный элемент матрицы становится единичным.

Как отмечено в [WP_en, WP_ru] алгоритм пространственной группировки должен стремиться соблюдать следующие требования:

  1. Все элементы матрицы рано или поздно (в те или иные моменты времени) должны быть единичными. Не должно быть элементов всегда равных нулю
  2. Матрица должна быть разреженной
  3. Содержание подмножеств пикселей не должно быть тривиальным (например, не должно быть подмножеств из 1 пикселя)
  4. Элементы матрицы должны иметь ограниченное (и небольшое) число подмножеств пикселей, делающих их единичными

Алгоритм временной группировки

В процессе временной группировки обрабатывается куб, состоящий из элементов, которые могут находиться в трех состояниях Активном, Предсказании и Пассивном (вы можете представлять этот куб как множество вокселей разных цветов).

region_visualized1

Пример визуализации HTM в виде куба элементов (OpenHTM)

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

Каждый элемент куба связан с определенными множествами элементов из других столбцов этого куба (множество дочерних элементов). Для элементов таких множеств будем называть заданный элемент куба родительским. Эти множества имеют метку активности. А каждый элемент в множестве имеет характеристику силы связи с родительским элементом множества. Для каждого не активного элемента куба проверим сколько активных элементов находиться в связанных с ним множествах. Если это число больше порога (хотя бы для одного из связанных множеств), то такой элемент переводиться в состояние предсказания, а множеству присваивается метка активности.

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

Активизация элементов и выбор элемента для обучения

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

Переход элементов в состояние предсказания

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

Применение запросов на обновление дочерних множеств

Для всех элементов куба проверяется, если элемент находится в состоянии обучения, то запрос на обновление его дочерних множеств реализуется с пометкой усиления силы связей. Если элемент находился на предыдущем шаге в состоянии предсказания, а на данном шаге больше не находится в этом состоянии, то запрос реализуется с пометкой ослабления силы связей.

Что является результатом работы одной итерации алгоритма

Интересным вопросом является то, что является результатом одной итерации алгоритма временной группировки (и результатом работы всего алгоритма в целом). Однозначного мнения по этому поводу нет. Перефразируя [WP] можно сказать, что элементы куба, находящееся как в активном, так и в предсказывающем состоянии создают совместно выход данного куба,  который передается следующему региону в иерархии. Авторы же различных реализаций HTM определяют результат работы не на уровне элементов куба, а на уровне столбцов. применяя то или иное правило расчета активности колонки по состоянием её элементов (например, столбец куба является активным, если в нем содержаться активные элементы или хотя бы один элемент находиться в состоянии предсказания).

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *