Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodicheskie_ukazania.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
1.15 Mб
Скачать

Лабораторная работа № 15 Исследование сетей Хопфилда

Цель работы: изучение архитектуры рекуррентных нейронных сетей Хопфилда и специальных функций для их создания, взвешивания входов, накопления и активизации; ознакомление с демонстрационными примерами и их скриптами, а также приобретение навыков построения таких сетей для решения задач распознавания образов и создания ассоциативной памяти.

Теоретические сведения

Сеть Хопфилда относится к классу рекуррентных нейронных сетей. Она имеет один нейронный слой с функциями взвешивания dotprod, накопления netsum и линейной ограниченной функцией активизации satlins. Слой охвачен динамической обратной связью с весами LW{1,1} и имеет смещения.

Сети Хопфилда обладают тем отличительным свойством, что при поступлении на вход некоторого вектора признаков в виде начальных условий, они за конечное число тактов времени приходят в состояние устойчивого равновесия, зависящего от входного вектора. Это позволяет ассоциировать входной вектор с некоторым состоянием сети, или объектом предметной области. Состояния устойчивого равновесия называются также аттракторами сети. Помимо целевых аттракторов в сети могут иметь место паразитные, которые не соответствуют никаким векторам входа. При создании сети Хопфилда специальные алгоритмы синтеза сводят к минимуму число таких паразитных точек равновесия и обеспечивают максимальный размер области притяжения для точек равновесия.

Функция для создания сети Хопфилда имеет вид:

net=newhop(T),

где Т – массив размера R*Q,объединяющий Q целевых векторов со значениями +1 или -1 для элементов;

R – число элементов вектора входа.

После того как начальные условия заданы в виде массива T, определяющего ряд целевых вершин замкнутого гиперкуба, сеть для каждой вершины генерирует выход, который по обратной связи подаётся на вход. Этот процесс при создании сети повторяется много раз, пока её выход не установится в положение равновесия для каждой из целевых вершин. При подаче затем произвольного входного вектора сеть Хопфилда переходит в результате рекурсивного процесса к одной из точек равновесия, наиболее близкой к входному сигналу.

Динамическая модель рекуррентного слоя одной из модификаций сети Хопфилда описывается следующим образом:

К

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

Практические задания

Задание 1. Создать сеть Хопфилда с двумя устойчивыми точками в трёхмерном пространстве, выполнив следующие команды:

T =[-1 -1 1 ; 1 -1 1] ; % целевые вершины;

net =newhop(T); % создание сети;

net, gensim(net) % параметры и структура сети;

Ai = T ; % начальные условия для линий задержки;

Y = sim(net,2,[], Ai); % сеть устойчива;

Ai ={[-0.9 ; -0.8 ; 0.7]};

Y=sim(net,{1 5},{}, Ai); % сеть обеспечила переход

% к устойчивому состоянию

% [-1 -1 1]′.

Задание 2. Создать сеть Хопфилда с четырьмя устойчивыми точками в двухмерном пространстве, выполнив следующие команды:

T = [1 -1; -1 1; 1 1; -1 -1] ′

plot(T(1, : ),T(2, : ), ′*r′) % точки равновесия;

axis([-1.1 1.1 -1.1 1.1]);

title(′Точки равновесия проектируемой сети′);

xlabel(′a(1)′), ylabel(′a(2)′)

net =newhop(T);

W=net.LW{1,1}

b=net.b{1,1}

Ai = T;

Y=sim(net,4,[],Ai)

plot(T(1, : ),T(2, : ), ′*r′), hold on

axis([-1.1 1.1 -1.1 1.1])

xlabel(‘a(1)’), ylabel(′a(2)′)

new=newhop(T);

[Y,Pf,Af]=sim(net,4,[],T);

for i=1:25

a={rands(2,1)};

[Y,Pf,Af]=sim(net,{1,20},{},a);

record=[cell2mat(a),cell2mat(Y)]

start=cell2mat(a);

plot(start(1.1), start(2.1),′kx′.record(1,:),record(2,:))

end