Использование псевдоинверсии для синтеза сети Хопфилда
Для синтеза сети Хопфилда можно использовать псевдоинверсию [4]. Такой подход называют еще обучением сети Хопфилда методом проекций. Подход основан на предположении, что при правильно подобранных весах каждая поданная на вход выборка генерирует на выходе самоё себя. Применительно к известным целевым векторам в матричной форме можно записать
,
где — неизвестная матрица весов размерностью (в сети Хопфилда число нейронов равно числу входов), — известная матрица , составленная из целевых векторов.
Необходимо найти матрицу . Так как — прямоугольная матрица, то для нахождения можно использовать псевдообратную матрицу [13]
,
где — псевдообратная матрица (матрица Мура‑Пенроуза) для .
В MATLAB псевдообратную матрицу вычисляет функция pinv, основанная на сингулярном разложении (SVD) матрицы [13]. Этот метод обладает большой устойчивостью к неточностям задания элементов матрицы и погрешностям округления. Тогда
W=T*pinv(T).
Программу Hopfield_pinv.m, использующую псевдоинверсию для синтеза сети Хопфилда, построим на основе программы Hopfield.m.Отличие состоит в вычислении матрицы весов по формуле W=T*pinv(T) и присвоении весам модели, созданной стандартной функцией newhop(T), вычисленных значений. Смещения принимаются нулевыми [14].
% Синтез сети Хопфилда с использованием псевдоинверсии
clear % очистка рабочего пространства
clc % очистка командного окна
close all % Закрытие всех окон
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)');
grid on;
disp('Нажмите Enter')
pause
% Создание сети
disp('Веса, вычисленные псевдоинверсией');
WP=T*pinv(T) % Вычисление весов методом псевдоинверсии
net=newhop(T); % Синтез модифицированной сети Хопфилда
disp('Веса модифицированной сети Хопфилда');
W=net.LW{1,1} % Веса модифицированной сети
%b=net.b{1,1} % СмещениЯ модифицированной сети
% Присвоение параметрам модифицированной сети значений,
% полученных псевдоинверсией
b=[0;0;0]; %В сети, синтезированной псевдоинверсией, нулевой вектор b
W={WP}; % Преобразование в массив ячеек
% Проверка принадлежности вершин квадрата к сети Хопфилда
Ai = {T};
Y = net(cell(1,2),{},Ai);
disp('Проверка принадлежности вершин квадрата к сети Хопфилда');
Y{1,1}
% Поведение сети при случайных начальных условиях
plot(T(1, :),T(2, :), 'r*');
hold on;
axis([-1.5 1.5 -1.5 1.5]);
xlabel('a(1)'), ylabel('a(2)');
for i=1:25
a={[-1.5; -1.5]+3*rand(2,1)}; % случайный вектор
Y=net(cell(1,50), {}, a); %модел. при случ. нач. условиях
% Y - массив ячеек, соответствующих каждому шагу моделирования
record=[cell2mat(a) cell2mat(Y)];
start=cell2mat(a);
plot(start(1,1), start(2, 1), 'kx', record(1, :), record(2, :));
end
grid on
title('Поведение сети при случайных начальных условиях');
Веса, вычисленные с помощью псевдоинверсии, несколько отличаются от весов модифицированной сети Хопфилда
Веса, вычисленные псевдоинверсией
WP =
1.0000 -0.0000
0 1.0000
Веса модифицированной сети Хопфилда
W =
1.1618 0
0 1.1618
Поведение сети при случайных начальных условиях имеет тот же характер, как и в случае модифицированной сети Хопфилда.
Задания
1. Проделайте все примеры, приведенные в работе.
2. Исследуйте влияние числа временных шагов на достижение устойчивого состояния модифицированной сети Хопфилда и сети, синтезированной с использование псевдоинверсии.