Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ТВЕРСКОЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра «Информационные системы»
МЕТОДИЧЕСКИЕ УКАЗАНИЯ
ПО ЛАБОРАТОРНЫМ РАБОТАМ
по дисциплине:
"Интеллектуальные информационные системы"
на тему:
"Нейронные сети в MATLAB 6.1"
Тверь, 2011 г.
Лабораторная работа 1
Каскадная сеть прямой передачи CF в рабочем пространстве MATLAB.
Для создания каскадной сети используется функция newcf.
Синтаксис:
net = newcf(PR,[S1 S2 … SN],{TF1 TF2 … TFN}, btf, blf pf)
Входные аргументы:
PR массив размера Rx2 минимальных и максимальных значений для R векторов входа;
Si количество нейронов в слое i;
TFi функция активации в слоя I, по умолчанию tansig;
btf обучающая функция, реализующая метод обратного распространения, по умолчанию trainlm;
blf функция настройки, реализующая метод обратного распространения, по умолчанию learngdm;
pf критерии качества обучения, по умолчанию mse;
Выходные аргументы:
net объект класса network object каскадной нейронной сети с прямой передачей и обучением методом обратного распространения.
Пример.
P = [0 1 2 3 4 5 6 7 8 9 10];
T = [0 1 2 3 4 3 2 1 2 3 4];
net = newcf([0 10], [5 1], {tansig purelin});
gensim (net);
Создается каскадная нейронная сеть со следующей архитектурой: каскадная двухслойная сеть с прямой передачей сигнала; первый слой 5 нейронов с функцией активации tansig; второй слой 1 нейрон с функцией активации purelin; диапазон изменения входа [0 10].
Результат представлен на следующем рисунке.
Далее обучим сеть в 50 циклов.
Синтаксис:
net.trainParam.epochs = 50;
net = train (net, P, T);
Характеристика точности обучения будет показана в виде графика; установившаяся среднеквадратичная ошибка составляет приблизительно 0,02, что на порядок выше, чем для сети FF.
Выполним моделирование каскадной двухслойной сети, используя обучающую последовательность входа:
Y = sim (net, P);
plot (P, T, P, Y, O)
Каскадная сеть прямой передачи использует функции взвешивания dotprod, накопления netsum и заданные пользователем функции активации.
Первый каскад характеризуется матрицей весов входа, другие каскады матрицами весов выхода предшествующего каскада; все каскады имеют смещения. Выход последнего каскада является выходом сети. Веса и смещения инициализируются с помощью М функции initnw.
Оценка качества обучения основана на функциях оценки качества, выбираемых из списка {mae| mse | msersg | sse}.
Задание.
1. Создать в рабочем пространстве MATLAB каскадную сеть с прямой передачей данных и рассмотреть ее структуру.
2. Обеспечить следующее отображение последовательности входа P в последовательности целей T.
P = [0 1 2 3 4 5 6 7 8 9 10];
T = [0 5 0 0 4 1 8 1 3 3 4];
3. Обучить сеть в 70 циклов.
Лабораторная работа 2
Линейный слой LIND в рабочем пространстве MATLAB.
Для создания линейного слоя LIND используется функция newlind.
Синтаксис:
net = newlind(P, T)
Линейный слой LIND использует для расчета весов и смещений процедуру решения систем линейных алгебраических уравнений на основе метода наименьших квадратов, и поэтому в наибольшей степени он приспособлен для решения задач аппроксимации, когда требуется подобрать коэффициенты аппроксимирующей функции. В задачах управления такой линейный слой можно применять для идентификации параметров динамических систем.
Функция net = newlind(P, T) формирует нейронную сеть, используя только обучающие последовательности входа P размера RxQ и цели T размера SxQ. Выходом является объект класса network object с архитектурой линейного слоя.
Пример.
P = [0 : 3];
T = [0.0 2.0 4.1 5.9];
net = newlind(P,T);
gensim (net);
Анализ данных показывает, что требуется найти аппроксимирующую кривую, которая близка к зависимости t = 2*p. Применение линейного слоя LIND в данном случае вполне оправдано.
Значения весов и смещений равны:
net.IW{1}, net.b{1}
ans = 1.9800
ans = 0.3000
Соответствующая аппроксимирующая кривая описывается соотношением
yk = 1.9800rk + 0.3000
Выполним моделирование сформированного линейного слоя:
Y = sim(net, P)
Y = 0.0300 2.0100 3.9900 5.9700
В целом функция newlind вычисляет значения W и смещения В для линейного уровня с входом Р и целью Т, решая линейное уравнение в структуре метода наименьших квадратов:
[W b]*[P;ones] = T.
Задание.
1. Сформировать в рабочем пространстве MATLAB линейный слой LIND, использующего метод наименьших квадратов и рассмотреть его структуру.
2. Задать следующие обучающие последовательности:
P = [1 : (1/3) : 2];
T = [9.0 7.4 8.1 0.5];
3. Выполнить моделирование сформированного линейного слоя.
Y = sim(net,P);
4. Построить графики зависимостей.
Лабораторная работа 3
Динамическая нейронная сеть
Сеть прямой передачи с запаздыванием
Для создания динамической нейронной сети применяется функция NEWFFTD. Функция newfftd предназначена для создания многослойных нейронных сетей прямой передачи сигнала с линиями задержки и заданными функциями обучения и настройки, использующими метод обратного распространения ошибки.
Синтаксис:
net = newfftd(PR, ID, [S1 S2 ….. Sn], {TF1 TF2 ….. TFn}, btf, blf, pf)
Входные аргументы:
PR массив размера Rх2 минимальных и максимальных значений R векторов входа;
ID вектор параметров линии задержки на входе сети;
Si количество нейронов в слое i;
TFi функция активации слоя I, по умолчанию tansig;
btf обучающая функция, реализующая метод обратного распространения, по умолчанию trainlm;
blf функция настройки, реализующая метод обратного распространения, по умолчанию learngdm;
pf критерий качества обучения, по умолчанию mse.
Выходные аргументы:
net объект класса network object динамической многослойной нейронной сети.
Пример:
Зададим последовательность входа и целей:
P = {1 0 0 1 1 0 1 0 0 0 0 1 1 0 0 1};
T = {1 -1 0 1 0 -1 1 -1 0 0 0 1 0 -1 0 1};
Создадим нейронную сеть:
net = newfftd([0 10], [0 1], [5 1], {tansig purelin})
Архитектура нейронной сети: двухслойная сеть с прямой передачей сигнала и линией задержки [0 1]; первый слой 5 нейронов с функцией активации tansig; второй слой 1 нейрон с функцией активации purelin; диапазон изменения входа [0 10].
Обучим сеть в течении 50 циклов и промоделируем, используя в качестве теста обучающую последовательность входа:
net.trainParam.epochs = 50;
net = train(net, P, T);
Y = sim(net, P);
Y = [1] [-1] [0] [1] [0] [-1] [1] [-1] [0] [0] [0] [1] [0] [-1] [0] [1]
Выход сети точно совпадает с целевой последовательностью.
Свойства сети:
Функциями активации могут быть любые дифференцируемые функции, например: tansig, logsig или purelin.
Обучающими функциями могут быть любые функции, реализующие метод обратного распространения: trainlm, trainbfg, trianrp, traingd и др.
Функция trainlm является обучающей функцией по умолчанию, поскольку обеспечивает максимальное быстродействие, но требует значительных ресурсов памяти. Если ресурсы памяти недостаточны, воспользуйтесь следующими методами:
Установите значение свойства net.trainParam.mem_reduc равным 2 или более, что снизит требования к памяти, но замедлит обучение;
Воспользуйтесь обучающей функцией trainbfg , которая работает медленнее, но требует меньше памяти, чем Ь-функция trainlm;
Перейдите к обучающей функции trainrp, которая работает медленнее, но требует меньшей памяти, чем М-функция trainbfg.
Функциями настройки могут быть функции, реализующие метод обратного распространения: learngd, learngdm.
Критерием качества обучения может выступать любая дифференцируемая функция: mse, msereg.
Алгоритм:
Многослойная динамическая сеть прямой передачи включает Ni слоёв с функциями взвешивания dotprod, функциями накопления netsum и заданными пользователем функциями активации.
Первый слой характеризуется матрицей весов входа, другие слои матрицами весов входа предшествующего слоя; все слои имеют смещения. Выход последнего слоя является выходом сети. Веса и смещения каждого слоя инициализируются с помощью М-функций initnw.
Режим адаптации реализуется М-функцией adaptwb. Для режима обучения выбирается обучающая функция, использующая метод обратного распространения ошибки.
Оценка качества обучения основана на функциях оценки качества, выбираемых из списка {mae | mse | msereg | sse}.
Задание.
1. Создать в рабочем пространстве MATLAB двухслойную нейронную сеть с прямой передачей сигнала и линией задержки [0 1]; число нейронов на втором слое 1; на первом варьируется; функции активации tansig, purelin; диапазон изменения входа [0 10].
2. Задать последовательность входов и целей , содержащих не менее 10 значений.
3. Обучить сеть (не менее 30 циклов) и протестировать с использованием заданной последовательности входа.
Лабораторная работа 4
Линейные сети
Линейный слой
Линейные слои находят применение при решении задач аппроксимации, фильтрации и предсказания сигналов, построении моделей динамических систем в задачах управления. Функция newlin() формирует нейронную сеть в виде линейного слоя.
Синтаксис:
net = newlin(PR, s, id, lr);
net = newlin(PR, s, o, P);
Входные аргументы:
PR массив размера Rх2 минимальных и максимальных значений для R векторов входа;
s число нейронов;
id описание линии задержки на входе сети, по умолчанию [0];
lr- параметр скорости настройки, по умолчанию 0.01.
Выходные аргументы:
net объект класса network object с архитектурной линейного слоя.
Функция net = newlin(PR, s, o, P), где Р матрица векторов входа, формирует линейный слой с параметром скорости настройки, гарантирующим максимальную степень устойчивости слоя для данного входа Р.
Пример:
Сформировать линейный слой, который для заданного входа воспроизводит заданный отклик системы.
Сформируем последовательности векторов входа и цели:
Р = {0 -1 1 1 0 -1 1 0 0 1};
T = {0 -1 0 2 1 -1 0 1 0 1};
Архитектура линейного входа: линия задержки типа [0 1 2], 1 нейрон, вектор входа с элементами из диапазона [-1 1], параметр скорости настройки 0.01.
net = newlin([-1 1], 1, [0 1 2], 0.01);
gensim(net)
Обучим сеть в течении 100 циклов и промоделируем, используя в качестве теста обучающую последовательность входа:
net.trainParam.epochs = 100;
net = train(net, P, T);
Y = sim(net, P);
Алгоритм:
Линейный слой использует функцию взвешивания dotprod, функцию накопления потенциала netsum и функцию активации purelin. Слой характеризуется матрицей весов и вектором смещений, которые инициализируются М-функцией initzero.
Адаптация и обучение выполняются М-функциями adaptwb и trainwb, которые моделируют веса и смещения, используя М-функцию learnwh, до тех пор пока не будет достигнуто требуемое значение критерия качества обучения в виде средней квадратичной ошибки, вычисляемой М-функцией mse.
Задание.
1. Создать в рабочем пространстве MATLAB линейный слой со следующей архитектурой: линия задержки типа [0 1 2], 1 нейрон, вектор входа с элементами из диапазона [0 1], параметр скорости настройки 0.01.
2. Сформулировать две обучающие последовательности Р1, Т1 и Р2, Т2, содержащих не менее 10 значений.
3. Обучить сеть с использованием:
и выполнить моделирование сети для всех значений входа (для обоих случаев), объединяющих векторы Р1 и Р2 Y = sim(net, [P1 P2]) (для повторной инициализации сети использовать команду net = init(net)).
Лабораторная работа 5
Персептроны в рабочем пространстве MATLAB
Для создания персептрона используется функция newp.
Синтаксис:
net = newp(PR,s,tf,lf)
Входные аргументы.
PR массив размера Rx2 минимальных и максимальных значений для R векторов входа;
s число нейронов;
tf функция активации hardlim или hardlims, по умолчанию hardlim;
lf обучающая функция learnp или learnpn, по умолчанию learnp.
Выходные аргументы.
net объект класса network object.
Пример.
net = newp([0 1; 0 1], 1);
Создается персептрон с одним нейроном, входной вектор которого имеет 2 элемента, значения которых не выходят за пределы диапазона (0, 1).
Для просмотра и установки весов и смещений используются, соответственно, функции net.IW{i} и net.b{i}, где i номер нейрона, для которого устанавливаются веса или смещение.
Адаптация персептрона осуществляется с помощью функции adapt.
Синтаксис:
net = adapt(net, P,T)
где net адаптируемая нейронная сеть,
P последовательность векторов входа,
T последовательность целей.
Число проходов адаптации устанавливается следующим образом:
net.adaptParam.passes = n;
где n число проходов адаптации.
Моделирование персептрона осуществляется с помощью функции sim.
Синтаксис:
Y = sim(net,P)
где net моделируемая нейронная сеть,
P последовательность векторов входа,
Y последовательность результатов.
Задание.
1. Создать в рабочем пространстве MATLAB персептрон и просмотреть его структуру с помощью функции gensim(net).
2. Обучить персептрон выполнению одной из логических операций и промоделировать его.
Последовательность векторов входа подготовит в виде:
P = [0 0 0 1; 1 0 11];
Последовательность целей подготовить в виде, например (для операции И):
T = [0 0 0 1];
Лабораторная работа 6
Сети прямой передачи в рабочем пространстве MATLAB
Для создания многослойных нейронных сетей прямой передачи сигнала используется функция newff.
Синтаксис:
net = newff(PR,[S1 S1…SNI],{TF1 TF2…TFN},btf,blf,pf)
Входные аргументы.
PR массив размера Rx2 минимальных и максимальных значений для R векторов входа;
Si количество нейронов в слое i;
Tfi функция активации слоя i, по умолчанию tansig;
btf обучающая функция, реализующая метод обратного распространения, по умолчанию trainlm;
blf функция настройки, реализующая метод обратного распространения, по умолчанию traingdm;
pf критерий качества обучения, по умолчанию mse.
Выходные аргументы.
net объект класса network object.
Пример.
net = newff([0 10],[5 1], {'tansig' 'purelin'});
Создается двухслойная нейронная сеть с прямой передачей сигнала; первый слой 5 нейронов с функцией активации tansig; второй слой 1 нейрон с функцией активации purelin; диапазон изменения входа [0 10].
Обучение сети осуществляется с помощью функции train.
Синтаксис:
net = train(net, P,T)
где net обучаемая нейронная сеть,
P последовательность векторов входа,
T последовательность целей.
Число эпох обучения устанавливается следующим образом:
net.trainParam.epochs = n;
где n число эпох обучения.
В процессе обучения автоматически составляется график ошибки сети в зависимости от номера эпохи.
Задание.
1. Создать в рабочем пространстве MATLAB двухслойную нейронную сеть с прямой передачей сигнала; число нейронов на втором слое 1; на первом варьируется; функции активации tansig, purelin.
2. Задать последовательности входов и целей. Например:
P = [0 1 2 3 4 5 6 7 8 9 10];
T = [0 1 2 3 4 3 2 1 2 3 4];
3. Выполнить моделирование сети.
Y = sim(net,P);
Построить графики сигналов выхода и цели:
plot(P, T, P, Y, 'o')
4. Обучить сеть в течение, например, 50 циклов.
Для создания модифицированной сети Хопфилда используется функция newhop
Синтаксис:
net=newhop(T)
Входной аргумент:
Массив T размера RхQ, объединяющий Q целевых векторов (со значениями +1 или 1). R- число элементов входного вектора
Выходные аргументы:
net объект класса network object
Пример:
T = [-1 1 1; 1 1 1];
net = newhop(T);
Создается сеть Хопфилда с двумя устойчивыми точками в трехмерном пространстве.
Архитектура сети:
Рекуррентная многослойная сеть, в которой вход и выход линейного слоя совпадают.
В сети используется линейная функция активации с насыщением satlins(),
которая описывается следующим образом:
-1, n<-1
n, -1<=n<=1
1, n>1
Сеть Хопфилда может быть промоделирована с одним или большим количеством векторов, которые задаются как начальные условия. После того как начальные условия заданы сеть генерирует выход, который по обратной связи подается на вход. Этот процесс повторяется много раз, пока на выходе не установится равновесие.
Спроектировать сеть Хопфилда значит создать рекуррентную сеть со множеством точек равновесия, таких, что при задании начальных условий сеть приходит в состояние покоя в одной из этих точек.
Рассмотрим следующий пример: требуется разработать сеть с двумя устойчивыми точками в вершинах трехмерного куба
T = [-1 1 1; 1 1 1];
T = -1 1
T = -1 -1
T = 1 1
Для корректной работе сети необходимо взять обратную матрицу T:
T = T;
Выполним синтез сети:
net=newhop(T);
gensim(net);
После создания сети можно получить информацию о ее структуре, используя метод layers{}
net.layers{1};
Далее удостоверимся, что разработанная сеть имеет устойчивые состояния в этих двух точках используя функцию sim(net,n,[],AI), аргументами которой будут net объект типа сеть Хопфилда, n=2- число входных целевых векторов, AI=T-начальное состояние слоя:
АI = T;
Y = sim(net,2,[],AI);
Y
На выходе получим:
Y= -1 1
-1 1
1 1
Что соответствует точкам равновесия.
Если теперь мы зададим другой начальный массив точек, например
AI={[-0.9,-0.8,-0.7]};
и вызовем функцию sim
Y = sim(net,{1 5},{},AI);
то получим выходной вектор Y= [-1,-1, 1]1:
Y =
-1 -1 -1 -1 -1
-1 -1 -1 -1 -1
1 1 1 1 1
т.е. сеть из заданного начального состояния вернулась в положение равновесия. Следует обратить внимание, что при втором вызове функции sim в качестве входного параметра указывается такт дискретности (1) и количество шагов моделирования (5).
Задание.
Лабораторная работа 8
Радиальные нейронные сети
(Radial Basis Function Neural Networks RBF NN)
Основным применением нейронных сетей с радиальной функцией (RBF-сетей) является аппроксимация функций. Такие сети имеют два слоя:
1) скрытый слой нейронов с радиально-симметричной функцией. Это специальный класс функций, характерное свойство которых заключается в том, что отклик функции монотонно убывает с удалением от центральной точки. Типичный пример такой функции функция Гаусса, имеющая следующее аналитическое представление:
График данной функции изображен ниже:
Радиальная функция имеет максимум, равный 1, когда аргумент функции (n) равен нулю. В слое с радиально-симметричной функцией вычисляется расстояние между вектором весов (w) и входным вектором (p). Размерность обоих векторов равна количеству входов рассматриваемого слоя R. Затем величина расстояния (между w и p) умножается на параметр b (который позволяет задать чувствительность радиального нейрона). Полученное значение и есть аргумент радиальной функции.
Как только расстояние между w и p уменьшается, происходит увеличение значения радиальной функции. Таким образом, радиальный нейрон производит единицу каждый раз, когда вход p идентичен вектору весов w.
Для вычисления радиальной функции используется функция radbas.
Синтаксис:
A = radbas(N)
Входные аргументы:
N вектор расстояний размера Sx1 для каждого нейрона S.
Выходные аргументы:
A вектор значений радиальной функции для каждого нейрона S.
Пример:
n = -5:0.1:5;
a = radbas(n);
plot(n,a)
В результате создается график радиальной функции:
2) выходной линейный слой. Данный слой содержит нейроны с линейными функциями. Значение такой функции равно значению ее аргумента. Также каждый нейрон имеет параметр b, который определяет чувствительность нейрона к входным данным.
Т.о., RBF-сеть, состоящая из S1 нейронов в первом слое и S2 нейронов во втором слое, схематично представлена на рисунке ниже:
Для создания радиальной нейронной сети используется функция newrb, которая добавляет нейроны в скрытый радиальный слой до тех пор, пока нейронная сеть не удовлетворяет заданному значению ошибки.
Синтаксис:
net = newrb(P,T,GOAL,SPREAD,MN,DF)
Входные аргументы:
P массив размера RxQ входных векторов, где R количество входов, Q количество входных векторов;
T массив размера SxQ целевых векторов, где R количество выходов, Q количество целевых векторов;
GOAL целевая среднеквадратичная ошибка, по умолчанию равна 0;
SPREAD константа радиальной функции, по умолчанию равна 1;
MN максимальное число нейронов, по умолчанию равно Q;
DF количество нейронов, которые необходимо добавлять после каждого вывода ошибки, по умолчанию равно 25.
Выходные аргументы:
net объект класса network object.
Пример:
Установим входные значения P и связанных с ними выходных значений T (количество значений 21), а также построим график для этих значений с использованием функций plot, xlabel, ylabel:
P = -1 : 0.1 : 1;
T = [-.9602 -.5770 -.0729 .3771 .6405 .6600 .4609 ...
.1336 -.2013 -.4344 -.5000 -.3930 -.1647 .0988 ...
.3072 .3960 .3449 .1816 -.0312 -.2189 -.3201];
plot(P,T,'+');
xlabel('Входной вектор P');
ylabel('Целевой вектор T');
Для того чтобы найти функцию, проходящую через эти точки, используем следующую команду:
net = newrb(P, T, 0.02, 1);
В результате создается двухслойная радиальная нейронная сеть, которая аппроксимирует данные, заданные векторами P и T. Для сети установлена среднеквадратичная ошибка, равная 0.02, а также параметр spread, равный единице.
В процессе обучения автоматически составляется график ошибки сети в зависимости от номера эпохи. Чтобы увидеть, насколько точно RBF-сеть аппроксимирует данные, необходимо протестировать сеть и вывести график выходных откликов сети:
plot(P,T,'+');
xlabel('Input');
X = -1:.01:1;
Y = sim(net,X);
hold on;
plot(X,Y);
hold off;
legend({'Target','Output'})
Задание.
1. Задать последовательности входов и целей. Например:
P = [1 2 3 4 5 6 7 8 9 10 11 12];
T = [2 4.1 5.9 3.6 1.7 7.3 6.1 9.2 3.8 1.2 4.9 6.3];
2. Создать радиальную нейронную сеть на основе заданных векторов со среднеквадратической ошибкой, равной 0.01. Также установить параметр spread равным единице.
3. Построить графики сигналов выхода сети и целевых значений:
plot(P,T,'+');
X = 1:.01:12;
Y = sim(net,X);
hold on;
plot(X,Y);
hold off;
4. Промоделировать обученную сеть при различных значениях параметра spread (например, при 0.3, 0.9, 2, 10, 50 и 100) и построить графики при каждом значении, чтобы сделать вывод о влиянии значения данного параметра на способность RBF-сети выполнять аппроксимацию функций.
Лабораторная работа 9
Самоорганизующиеся карты Кохонена
(Self-Organizing Feature Maps SOFM)
Самоорганизующиеся карты Кохонена используются для нахождения групп похожих данных, т.е. в задачах кластеризации, когда целевых векторов нет, а имеются только входные данные. Особенностью сетей Кохонена является то, что в результате обучения нейроны не просто образуют группы схожих данных, но и оказывают взаимодействие друг на друга. Как правило, в основном используются сети Кохонена с двухмерной решеткой, как наиболее удобный способ для восприятия человеком. Чем больше нейронов находится в узлах решетки, тем более детально воспроизводятся особенности анализируемых многомерных данных на двумерную топологическую карту Кохонена.
Сеть Кохонена может иметь один из следующих видов топологий (расположение нейронов):
gridtop (квадратная решетка),
hextop (гексагональная решетка),
randtop (случайная решетка).
Для визуализации сети Кохонена используется функция plotsom, имеющая в качестве аргумента координаты нейронов. Чтобы получить координаты, необходимо использовать одну из трех топологий. Например, сеть Кохонена с топологией gridtop и количеством нейронов 8x10, можно быть выведена на экран с помощью следующих функций:
pos = gridtop(8,10);
plotsom(pos)
Сеть Кохонена с такими параметрами изображена ниже на рисунке:
Также имеется несколько алгоритмов вычисления расстояний между нейронами: dist, boxdist, linkdist, mandist. Данные функции имеют только один входной аргумент координаты нейронов. Тогда, например, для сети с гексагональной топологией 2x3, манхэттенское расстояние (или расстояние городских кварталов) вычисляется следующим образом:
pos = hextop(2,3);
a=mandist(pos)
В результате вычисляется матрица размерностью QxQ, где Q общее количество нейронов (в данном примере Q = 2x3 = 6):
a =
0 1.0000 1.3660 2.3660 1.7321 2.7321
1.0000 0 1.3660 1.3660 2.7321 1.7321
1.3660 1.3660 0 1.0000 1.3660 1.3660
2.3660 1.3660 1.0000 0 2.3660 1.3660
1.7321 2.7321 1.3660 2.3660 0 1.0000
2.7321 1.7321 1.3660 1.3660 1.0000 0
Например, для определения расстояния между 2 и 4 нейронами, необходимо ввести в командное окно MATLAB: a(2, 4). Тогда получим расстояние, равное 1.3660.
Для создания самоорганизующейся сети Кохонена используется функция newsom.
Синтаксис:
net = newsom(PR,[D1,D2,...],TFCN,DFCN,OLR,OSTEPS,TLR,TND)
Входные аргументы:
PR массив размера Rx2 минимальных и максимальных значений для R входов;
Di размер i-ого измерения решетки, по умолчанию = [5 8];
TFCN топологическая функция, по умолчанию = 'hextop'.
DFCN функция расстояния, по умолчанию = 'linkdist'.
OLR значение параметра обучения на начальной фазе, по умолчанию=0.9.
OSTEPS количество шагов на начальной фазе, по умолчанию = 1000.
TLR значение параметра обучения на конечной фазе, по умолчанию=0.02;
TND расстояние до соседнего нейрона на конечной фазе, по умолчанию=1.
Выходные аргументы:
net объект класса network object.
Пример:
Пусть имеется 1000 двухэлементных векторов, равномерно распределенных в двухмерном пространстве:
P = rands(2,1000);
plot(P(1,:),P(2,:),'+r')
Для того чтобы выполнить кластеризацию исходных данных, создадим сеть Кохонена размерностью 5x6 с топологией hextop и функцией расстояния linkdist. Т.к. значения данные находятся в диапазоне от -1 до 1, тогда:
net = newsom([-1 1; -1 1],[5 6]);
Можно визуализировать полученную сеть с помощью функции plotsom:
plotsom(net.iw{1,1},net.layers{1}.distances), где net.iw{1,1} матрица весов сети Кохонена; net.layers{1}.distances матрица расстояний меду нейронами.
Сеть Кохонена до обучения изображена на рисунке ниже:
Перед обучением веса сети Кохонена вычисляются как средние величины между минимальными и максимальными значениями матрицы PR, которая задается в качестве первого аргумента функции newsom.
Для обучения сети Кохонена необходимо задать количество эпох обучения. Например, в связи с большим набором данных установим этот параметр равным пяти:
net.trainParam.epochs = 5;
Обучение сети производится с помощью функции train:
net = train(net,P);
plotsom(net.iw{1,1},net.layers{1}.distances)
Теперь после обучения можно использовать функцию тестирования нейронной сети sim. Например, зададим двухэлементный вектор h, для которого необходимо определить, к какому нейрону (классу) он относится:
h = [0.5; 0.3];
Определим какой нейрон “победил” для данного вектора:
a = sim(net, h)
Тогда, получим результат, указывающий на принадлежность исследуемого вектора к 16 нейрону (классу)
a = (16,1) 1
Задание.
1. Загрузить в рабочее пространство MATLAB данные о так называемых ирисах Фишера. Для каждого экземпляра ириса известны 4 величины: длина чашелистика, ширина чашелистика, длина лепестка, ширина лепестка. Входной файл meas состоит из 150 строк (по 50 для каждого сорта). Задача состоит в разбиении данных на три группы. Команда load позволяет загружать файлы с данными в рабочее пространство MATLAB:
load fisheriris;
meas=meas'; (транспонирование матрицы для корректной работы нейросети)
2. Создать самоорганизующуюся сеть Кохонена с любой топологией (например, hextop с размерностью 1x3) и любой функцией расстояния (dist, boxdist, linkdist или mandist). Для определения минимальных и максимальных значений необходимо использовать функцию minmax:
minmax(meas);
3. Установить необходимое количество эпох обучения.
4. Определить отклики нейронной сети для всех данных (т.е. для всех экземпляров ириса).
5. Полученные значения откликов (номера классов принадлежности каждого экземпляра ириса) проанализировать с целью определения эффективности кластеризации данных. Для этого следует использовать файл species, который содержит название вида для каждого экземпляра ириса (setosa, versicolor, virginica). Также необходимо подтвердить или опровергнуть предположение, что класс versicolor является гибридом классов setosa и virginica.
Лабораторная работа № 10
Исследование сетей Хопфилда
Цель работы: изучение архитектуры рекуррентных нейронных сетей Хопфилда и специальных функций для их создания, взвешивания входов, накопления и активизации; ознакомление с демонстрационными примерами и их скриптами, а также приобретение навыков построения таких сетей для решения задач распознавания образов и создания ассоциативной памяти.
Теоретические сведения
Сеть Хопфилда относится к классу рекуррентных нейронных сетей. Она имеет один нейронный слой с функциями взвешивания 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
П 1. Нечеткие системы
Лабораторная работа № 1.
Исследование способов формирования нечетких множеств и операции над ними
Цель работы: изучить методы построения нечетких множеств с использованием различных типов функций принадлежности. Ознакомиться с наиболее распространенными логическими операциями над нечеткими множествами.
Функции принадлежности. Инструментарий нечеткой логики (ИНЛ) в составе пакета Matlab содержит 11 встроенных типов функций принадлежности (ФП), формируемых на основе кусочно-линейных функций, распределения Гаусса, сигмоидной кривой, квадратических и кубических полиномиальных кривых. К наиболее простым ФП можно отнести треугольную и трапециевидную. Наименование треугольной ФП trimf (triangle membership function). В параметрическом виде она представляет собой не что иное, как набор трех точек, образующих треугольник.
Описание функции:
у = trimf (х, [а b c ]),
где вектор х базовое множество, на котором определяется ФП.
Величины а и с задают основание треугольника, b его вершину.
В аналитическом виде треугольная ФП может быть задана следующим образом:
Далее рассмотрим примеры использования различных ФП в системе.
Примеры представляют собой фрагменты программ и комментариев на языке пакета Matlab.
Пример П 1. Программа использования ФП trimf.
х = 0 : 0,1 : 10; Задается базовое множество
у = t r i m f ( х, [3 6 8]); Определяется треугольная ФП
p l o t(х, у); Выводится график функции
x l a b e l ( t r i m f ( x , P ) , P = [3 6 8] ); Подписывается график под осью абсцисс
Трапециевидная ФП trapmf (trapezoid membership function) отличается от предыдущей функции лишь тем, что имеет верхнее основание.
Описание функции:
Y= trapmf (x, [a b c d ]) ,
параметры а и d нижнее основание трапеции;b и с верхнее основание трапеции.
Аналитическая запись трапециевидной функции имеет вид:
Одно из основных достоинств треугольных и трапециевидных ФП их простота. На основе функции распределения Гаусса можно построить ФП двух видов: простую функцию принадлежности Гаусса и двухстороннюю, образованную с помощью различных функций распределения Гаусса.
Первая из них обозначается gaussmf, а вторая gauss2mf.
Описание функции:
Y = g a u s s m f (x, [ σ , c ] ).
Симметричная функция Гаусса зависит от двух параметров σ и с:
F(x, σ, c)= e (x- c )^2 / (2σ^ 2)
Пример П2. Программа использования ФП gaussmf.
x = 0 : 0.1 : 10;
y = gaussmf (x, [ 2 5]);
plot(x,y);
Описание функции:
Y= gauss2mf(x, [σ1, c1 ,σ2, c2 ]).
Последнее выражение является комбинацией двух различных функций распределения Гаусса. Первая определяется параметрами σ1 и c1 и задает форму левой стороны, а вторая (параметры σ2, c2,) правой стороны ФП.
Если с1 < с2, то в этом случае функция gauss2mf достигает своего максимального значения на уровне 1. Иначе максимальное значение функции меньше 1(см. рис. ниже)
Пример П3. Программа использования ФП gauss2mf.
x=(0: 0.1: 10);
y1=gauss2mf(x, [2 4 1 8]);
y2=gauss2mf(x, [2 5 1 7]);
y3=gauss2mf(x, [2 6 1 6]);
y4=gauss2mf(x, [2 7 1 5]);
y5=gauss2mf(x, [2 8 1 4]);
plot(x, [y1 y2 y3 y4 y5 ]);
Символ «'» в строке определения базового множества х показывает транспонированность базового множества.
Следующей функцией, которая позволяет представлять нечеткие субъективные предпочтения, является ФП «обобщенный колокол» и обозначается gbellmf. Ее отличие от рассмотренных ранее ФП заключается в добавлении третьего параметра, что позволяет осуществлять плавный переход между нечеткими множествами. Описание функции:
у = gbellmf (х, [а b с]).
Функция «обобщенный колокол» зависит от трех параметров и имеет следующую аналитическую запись:
где с- определяет расположение центра ФП;
а и b оказывают влияние на форму кривой.
Пример П4. Программа использования gbellmf
х = 0 : 0.1 : 10;
у = gbellmf (х, [2 4 6]);
рlot(х, у);
хlаbel ( gbellmf, Р = [2 4 6] ) .
Функции принадлежности на основе функции распределения Гаусса и ФП «обобщенный колокол» отличаются гладкостью и простотой записи и являются наиболее используемыми при описании нечетких множеств. Несмотря на то что гауссовы и колоколообразные ФП обладают свойством гладкости, они не позволяют формировать асимметричные ФП. Для этих целей предусмотрен набор сигмоидных функций, которые могут быть открыты либо слева, либо справа в зависимости от типа функции. Симметричные и закрытые функции синтезируют с использованием двух дополнительных сигмоид. Основная сигмоидная ФП обозначается sigmf, а дополнительные dsigmf и psigmf.
Описание основной сигмоидной функции:
у = sigmf (х, [а с]) .
В аналитической форме сигмоидная функция sigmf записывается следующим образом:
f(x, a, c)=1 / (1+e a(x-c))
В зависимости от знака параметра а рассматриваемая ФП будет открыта или справа или слева (, что позволит применять ее при описании таких нечетких понятий, как «очень большой», «крайне отрицательно» и др.
Описание дополнительной сигмоидной функции:
у = dsigmf ((х, [a1, с1, а2, c2] )
ФП dsigmf зависит от четырех параметров a1, с1, а2, c2 и определяется как разность двух сигмоидных функций: f1(x, a1, c1)- f2 (x, a2,c2).
Описание дополнительной сигмоидной функции:
у = psigmf ((х, [a1, с1, а2, c2] )
ФП psigmf так же как и предыдущая функция, зависит от четырех параметров и определяется как произведение двух сигмоидных функций:
f1(x, a1, c1) * f2 (x, a2,c2).
Пример П5. Программа использования сигмоидных функций.
х = 0 : 0.1 : 10; определяется базовое множество
subplot (1,3,1) ; формируется матрица графиков (3 х 1)
первый элемент текущий
у=sigmf (x, [2 4 ]) ;
plot (х, у) ; выводится график в первый элемент матрицы
xlabel ( sigmf, Р = [2 4]')
subplot (1,3,2); выбирается второй текущий элемент
у= dsigmf (x, [5 2 5 7 ]) ;
plot (х, у) ; выводится график во второй элемент
xlabel ( dsigmf, Р = [5 2 5 7]');
subplot (1,3,3); выбирается третий текущий элемент
у = psigmf (х, [2 3 -5 8]);
plot (х, у) ; выводится график в третий элемент матрицы
xlabel ( psigmf, Р = [2 3 -5 8]');
Инструментарий нечеткой логики в составе Matlab предоставляет возможность формирования ФП на основе полиномиальных кривых. Соответствующие функции называются Z-функции (zmf), PI-функции (pimf) и S-функции (smf). Функция zmf представляет собой асимметричную полиномиальную кривую, открытую слева, функция smf- зеркальное отображение функции zmf.Соответственно функция pimf равна нулю в правом и левом пределах и принимает значение, равное единице, в середине некоторого отрезка.
Описание функции:
у = zmf(х, [а b] ) .
Параметры а и 6 определяют экстремальные значения кривой. Описание функции:
у = pimf(х, [а b с d] ) .
Параметры а и d задают переход функции в нулевое значение, а параметры b и с в единичное. Описание функции:
у = smf (х, [а b] ) ,
Параметры а и b определяют экстремальные значения кривой.
Пример П6. Программа использования полиномиальных кривых.
>>x=0:0.1:10;
>> subplot(1,3,1);
>> y=zmf(x, [3 7]);
>> plot(x,y);
>> xlabel('zmf, P=[3 7]');
>> subplot(1,3,2);
>> y=pimf(x, [1 4 5 10]);
>> plot(x,y);
>> xlabel('pimf, P=[1 4 5 10]');
>> subplot(1,3,3);
>> y=smf(x, [1 8]);
>> plot(x,y);
>> xlabel('smf, P=[1 8]');
Полиноминальные функции принадлежности:
Z- функция PI- функция S-функция
Помимо рассмотренных выше функций, позволяющих представлять нечеткие множества, в Matlab имеется возможность формировать собственные ФП или модифицировать встроенные.
Операции с нечеткими множествами. Выделяют три основные логические операции с нечеткими множествами: конъюнкцию, дизъюнкцию и логическое отрицание. В среде Matlab существует возможность определять конъюнктивные и дизъюнктивные операторы с точки зрения минимаксной и вероятностной интерпретаций.
Рассмотрим минимаксную интерпретацию логических операторов, в которой конъюнктивный оператор представляет нахождение минимума min, а дизъюнктивный максимума mах. Описание конъюнктивной функции:
у = min([y1;y2]) .
Описание дизъюнктивной функции:
у =max([y1;y2])
Параметры у1 и у2 представляют собой исходные ФП. Функция min работает со списком ФП. В Matlab список оформляется квадратными скобками, а элементы списка разделяются точкой с запятой.
Пример П7. Программа использования операций min и mах.
>> x=0:0.1:10;
>> subplot(1,2,1);
>> y1=gaussmf(x,[3 5]);
>> y2=gaussmf(x,[3 7]);
>> y3=min([y1;y2]);
>> plot(x, [y1;y2],':'); построение исходных ФП пунктирной линией
>> hold on; включение механизма добавления кривой в текущий график
>> plot(x, y3);
>> hold off; выключение механизма добавления кривой в текущий график
>> subplot(1,2,2);
>> y4=max([y1;y2]);
>> plot(x, [y1;y2],':');
>> hold on;
>> plot(x, y4);
>> hold off;
Пунктирной линией на графиках изображены исходные ФП, а сплошной линией результат действия логических операторов.
Минимаксная интерпретация является наиболее распространенной при построении нечетких систем.
Тем не менее на практике довольно часто используется альтернативная вероятностная интерпретация конъюнктивных и дизъюнктивных операторов. Matlab содержит соответствующие функции. В рамках данной интерпретации конъюнктивный оператор представляет собой оператор вычисления алгебраического произведения prod ,а дизъюнктивный оператор оператор вычисления алгебраической суммы probor.
Описание функции:
у = prod([y1; у2])
Описание функции:
у = probor ( y1 ; у2])
Параметры у\ и у2 представляют собой исходные ФП.
Пример П8. Программа использования вероятностных операторов конъюнкции и дизъюнкции.
>> x=0:0.1:10;
>> subplot(1,2,1);
>> y1=gaussmf(x,[3 5]);
>> y2=gaussmf(x,[3 7]);
>> y3=prod([y1;y2]);
>> plot(x, [y1;y2],':');
>> hold on;
>> plot(x, y3);
>> hold off;
>> subplot(1,2,2);
>> y4=probor([y1;y2]);
>> plot(x, [y1;y2],':');
>> hold on;
>> plot(x, y4);
>> hold off;
Пересечение и объединение нечетких множеств
Дополнение нечеткого множества есть не что иное, как математическое представление вербального выражения «НЕ А», где А нечеткое множество, описывающее некоторое размытое суждение.
Описание функции дополнения:
У = 1- у*,
где у* исходная ФП.
Пример П9. Программа использования операции дополнения.
>> x=0:0.1:10;
>> y1=gaussmf(x,[3 5]);
>> y=1-y1;
>> plot(x,y1,':');
>> hold on;
>> plot(x, y);
>> hold off;
Дополнение нечеткого множества
Нейронные сети
Пример П10. Создание нейрона, выполняющего функцию логического И.
Создадим нейрон с одним двухэлементным входом (интервалы первого и второго элементов [0; 1]). Определим два первых параметра функции newp, а в качестве значений третьего и четвертого параметра (типа ФА и имени процедуры обучения) воспользуемся значениями по умолчанию.
\ \ создание нейрона с одним двухэлементным входом (интервал первого элемента [0; 1] и интервал второго элемента [-2; 2]
net = newp([0 1; -2 2], 1);
Для того чтобы исследовать поведение нейрона, необходимо имитировать его работу с помощью функции sim. Для определения последовательности значений входа создадим последовательность P1:
P1 = {[0; 0] [0; -1] [1; 0] [1; 1]};
% имитация работы нейрона net на последовательности входов Р1
% желаемых выходов Т,
% которая позволит нам провести адаптацию нейрона (обучить его) через 20 проходов .
Y = sim(net, P1);
% создание последовательности выходов
T1 = {0, 0, 0, 1};
% установка количества проходов (циклов) адаптации
net.adaptParam.passes = 20;
% адаптация нейрона net для обучающей выборки <Р1;Т>
net = adapt(net, P1, T1);
% симуляция работы нейрона net на последовательности входов Р1
Y = sim(net, P1)
В результате мы получим нейрон, выполняющий функцию логического И.
Пример П11. Обучение нейрона выполнению функции логического ИЛИ.
Для переобучения нейрона на выполнение функции ИЛИ переопределим входы Р и выходы Т.
\ \ создание нейрона с одним двухэлементным входом (интервал первого элемента [0; 1] и интервал второго элемента [-2; 2]
net = newp([0 1; -2 2], 1);
\\ создание последовательности входов
Р2 = [О О 1 1; О 1 О 1];
\\ создание последовательности выходов (реакций)
для нейрона, выполняющего функцию логического ИЛИ Т2 = [О, 1, 1, 1] ; Инициализируем нейрон, обучим его на 20 проходах
(эпохах)
\\ инициализация нейрона
net net = init (net);
\\ имитация работы нейрона net на последовательности
входов Р2
Y = sim (net, P2) ;
\\ установка количества проходов
net.trainParam.epochs = 20;
\ \ обучение нейрона net на обучающей выборке <Р2, Т2>
net = train(net, Р2, Т2) ;
\ \ имитация работы нейрона net на последовательности
входов Р2 Y = sim (net, P2) ;
Для случайного изменения весов и порога срабатывания используем функцию init. По умолчанию для создаваемого нейрона указана функция hardlim.
1. Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6. М.: ДИАЛОГ-МИФИ, 2002. 496 с.
2. Потемкин В.Г. Инструментальные средства MATLAB 5.x. М.: Диалог-МИФИ, 2000. 336 с.
3. Лазарев Ю.Ф. MATLAB 5.x. Киев: Издат. группа BHV, 2000. 384 с.
4. Мишулина О.А., Лабинская А.А., Щербинина М.В. Лабораторный практикум по курсу "Введение в теорию нейронных сетей". М.: МИФИ, 2000. 204 с.
5. Галушкин А.И. Теория нейронных сетей. М.: ИПРЖР, 2000. 416 с.
1 Для представления содержимого многомерного массива ячеек в виде единичной матрицы необходимо использовать функцию cell2mat().