Разбирал я материалы по учебе к вящей пользе студентов АиПУ и наткнулся на чудеснейший материал!

Я писал статью для публикации, но издана она была лишь в виде тезисов. Полная версия статьи так и не издалась. Тезисы привожу прямо в посте, а ссылка на полную версию статьи после тезисов. Научный руководитель доктор физ.-мат. наук, профессор М.Н. Кирсанов.

РЕАЛИЗАЦИЯ И АНАЛИЗ АСИНХРОННОЙ МОДЕЛИ СЕТИ ХОПФИЛДА В СИСТЕМЕ MAPLE 

Работа посвящена исследованию сходимости одной из реализаций асинхронной нейронной сети Хопфилда. На каждом такте итерации из вектора на выходе сети случайным образом выбирается некоторое число элементов, для которых устанавливается новое состояние. Число выбранных элементов характеризуется степенью синхронности (отношение заменяемых элементов к общему числу элементов). Остальные элементы вектора сохраняются из предыдущего шага. Последовательно применяя несколько асинхронных шагов, мы приходим к конечному результату – распознанному образцу. Т.к. этот режим не является чисто асинхронным режимом, есть вероятность возникновения динамического аттрактора, а также получения различных результатов фильтрации. Данная работа заключается в исследовании этого режима. Обучение сети производилось на 8 образцах.

 

Для моделирования использовался пакет компьютерной математики Maple. В качестве входных образцов были использованы эталонные изображения букв русского алфавита. Распознавание считалось завершенным при достижении аттрактора (статического или динамического).
Общий алгоритм программы:
1. Считываются эталонные образцы и зашумлённый образец;
2. Определяется матрица весов сети

W := Matrix(N, N):
for i to N do
for j to N do W[i, j] := add(vimg[k][i]*vimg[k][j], k=1..M)/N; od:
od:
for i to N do W[i, i] := 0: od:

3. Фильтрация зашумленного образца:
• Каждый такт задается функцией step, которая принимает исходный вектор S и количество изменяемых элементов c, и возвращает следующий вектор;

step := proc(S, c) local i, Res0, L, q:
Res0 := map(sign, W.S): L := map(proc(x) x end, S):
for i in calcS(c) do q := rand(1..N)(): L[i] := Res0[i]: od:
L; end:

• Фильтрация задается функцией filter, которая принимает в качестве параметров зашумленный вектор S, ожидаемый нами результат фильтрации T и количество изменяемых на каждом шаге элементов c, и возвращает количество тактов до наступления аттрактора и результат фильтрации (Листинг 3).

filter := proc(S, T, c)
local i, cur, res, D, st:
cur := map(proc(x) x end, S):
res = false:
for i to MaxStep do
if Equal(cur, T) then res = true: break: end if:
st:=map(sign, W.cur):
if Equal(st, cur) then res = false: break: end if:
cur := step(cur, c): D[i] := cur;
od:
[i-1, Equal(cur, T)]: end:

В работе установлены следующие закономерности:
1. Отношение времени достижения ложного результата к времени дости¬же¬ния истинного постоянно для одинаковой степени за¬шумленности.
2. При увеличении степени синхронности сети скорость сходимости уве-ли¬чивается. При этом при некоторой степени синхронно¬сти это увели¬чение практически незаметно.
3. Скорость сходимости не зависит от степени зашумленности.


На рис.4 и рис. 5 приведены результаты фильтрации зашумленного изображения. Точки-квадраты соответствуют удачной фильтрации, а точки-крестики – ошибочной. По оси абсцисс отложена степень зашумления (от 1/12 до 1), по оси ординат – число итераций.
Работа выполнена при поддержке РФФИ (грант 08-01-00498-а).
Литература
1. Тарков М.С. Нейрокомпьютерные системы. М.: Бином, 2006. 142 с.
2. Хайкин С. Нейронные сети. М.: Вильямс, 2006. 1104 с.

Полная версия статьи в PDF