Удержание входного образа
Алексей Тарасов @AtarУстановим размер хеш-слоя равным размеру входного слоя и объединим их. Таким образом хеш-нейроны будут иметь связи друг с другом. Первоначальную активность слоя будем задавать прямым проецированием её на хеш-слой. В такой конфигурации работа сети ничем не отличается от обычной. Но что если оставить картину активности хеш-нейронов и понаблюдать за её эволюцией, повторив обработку множество раз.
Внесём некоторую модификацию. Пусть активность хеш-слоя на текущем шаге равна пересечению активности на прошлом шаге с её хешем.
image(t) = image(t-1) & hash(image(t-1));
, где: image(t) — образ активности слоя на шаге t.
Можно переформулировать правило следующим образом: активный нейрон сохраняет свою активность, если хеширование приводит к его активации.
Отсюда следует, что потеряв активность, нейрон не может снова её получить, кроме как по прямому пути.
Вот пример работы такой сети. На картинке в верхней строке изображены 18 исходных входных образов одной и той же цифры из MNIST. Ниже следуют 20 строк, каждая строка — итерация.

Исходный входной образ постепенно деградирует и в итоге стабилизируется. В стабилизированном состоянии единичные биты образа полностью совпадают с соответствующими битами хеша этого образа.
В большинстве случаев такая деградация не сказывается на правильном распознавании. Ошибку вносят не до конца сформировавшиеся ключи.
К текущей активности мы применили хеш как маску, теперь маской пусть будет выступать код ключа образа.
image(t) = image(t-1) & key(hash(image(t-1)));
, где: key() — функция, возвращающая код ключа-победителя при распознавании образа.
Можно переформулировать правило следующим образом: активный нейрон сохраняет свою активность, если он входит в код ключа-победителя при распознавании образа.

Как видим образ более не распадается и стабилизируется на первом же шаге. Слой будет хранить его сколь угодно долго. Для сброса образа необходимо затормозить нейроны. Ошибка распознавания возникает в редких случаях.
Здесь интересно ещё и то, что запечатлённый образ одновременно является частично и кодом собственного класса.
В итоге, такая архитектура способна, как удерживать в активности слоя входной образ, так и кодировать его кодом класса.