Интеллектуальные системы. Практикум
.pdfШаг 2. Выбирается очередная обучающая пара (Х, У) из обучающего множества; вектор Х подаётся на вход сети.
Шаг 3. Вычисляется выход сети.
Шаг 4. Вычисляется разность между требуемым (целевым У) и реальным (вычисленным) выходом сети.
Шаг 5. Веса сети корректируются так, чтобы минимизировать ошибку.
Шаг 6. Шаги со второго по пятый повторяются для каждой пары обучающего множества до тех пор, пока ошибка на всём множестве не достигнет приемлемой величины.
На Шаге 3 каждый из выходов сети вычитается из соответствующей компоненты целевого вектора с целью получить ошибку. Эта ошибка используется на Шаге 5 для коррекции весов сети.
Шаги 2 и 3 можно рассматривать как «проход вперёд», так как сигнал распространяется по сети от входа к выходу. Шаги 4 и 5 составляют «обратный проход», поскольку в этом случае вычисляемый сигнал ошибки распространяется обратно по сети и используется для подстройки весов.
В алгоритме обратного распространения вычисляется вектор градиента поверхности ошибок. Этот вектор указывает направление кратчайшего спуска по поверхности из текущей точки, движение по которому приводит к уменьшению ошибки. Последовательность уменьшающихся шагов приведёт к минимуму того или иного типа.
2.3. Порядок выполнения работы
При проведении работы необходимо выполнить следующие действия.
1. Создать сеть GRNN для решения задачи аппроксимации. Определим обучающее множество в виде массивов Р и Т:
clear, P = [1 2 3 4 5 6 7 8] T = [0 1 2 3 2 1 2 1]
Примем значение параметра влияния SPREAD немного меньшим, чем шаг задания аргумента функции (в данном случае 1),
11
чтобы построить аппроксимирующую кривую, близкую к заданным точкам. Чем меньше значение параметра SPREAD, тем ближе точки аппроксимирующей кривой к заданным, но тем менее гладкой является сама кривая. Далее введём такую последовательность:
spread = 0.7
net = newgrnn(P,T,spread)
net.layers{1}.size % Число нейронов в скрытом слое
A = sim(net,P) figure(2), clf,
plot(P,T,’*b’,’markersize’,10), hold on, plot(P,A,’or’,’markersize’,10); grid on
Моделирование сети для диапазона значений аргумента позволяет увидеть всю аппроксимирующую кривую, причем возможна экстраполяция этой кривой за пределы области ее определения. Для этого зададим интервал аргумента в диапазоне [-1 10]:
P2 = -1:0.1:10
A2 = sim(net,P2)
figure(3), clf, plot(P2,A2,’-b’,’linewidth’,2) hold on, plot(P,T,’*r’,’markersize’,10), grid on
Вызвать структурную схему с помощью функции gensim.
2. Задать вход P в виде случайной булевой последовательности из нулей и единиц; выходом сети должна быть такая булева последовательность T, элементы которой принимают значение 1 только в том случае, когда в последовательности P встретились две единицы подряд:
P = round(rand(1,20))
T = [0 (P(1:end-1)+P(2:end)==2)]
Требуется построить сеть, которая распознаёт во входном сигнале две единицы, следующие подряд.
12
Сначала эти последовательности представим в виде массивов ячеек:
Pseq = con2seq(P)
Tseq = con2seq(T)
Далее создадим сеть Элмана с диапазоном входного сигнала от 0 до 1 с 10 скрытыми и одним выходным нейронами:
net = newelm([0 1],[10 1],{‘tansig’,’logsig’})
Затем обучим сеть с допустимой средней квадратичной ошибкой 0.001 и смоделируем её:
net.trainParam.goal = 0.001 net.trainParam.epochs = 1000 net = train(net,Pseq,Tseq)
Y = sim(net,Pseq) Y1 = seq2con(Y)
E = round(T-Y1{1})
Вызвать структурную схему с помощью функции gensim.
2.4. Отчёт о выполнении работы
Содержательная часть отчёта о выполнении практической работы должна включать в себя порядок выполнения работы с промежуточными результатами и файл для прогона программы в MATLAB. Условие задачи следует придумать самостоятельно.
Контрольные вопросы
1.Как можно определить сущность нейрона?
2.Как раскрыть сущность понятия «обучение»?
3.Из каких элементов состоит нейрон?
4.Каковы основные функции пакета программ Neural Networks?
5.Для чего предназначена обобщённо-регрессионная нейронная сеть (GRNN)?
13
6.Как получается выходная оценка сети?
7.Для чего предназначена сеть Элмана?
8.В чём заключается алгоритм обратного распространения?
9.Что происходит на каждом шаге алгоритма обратного распространения?
10.На что указывает вектор градиента поверхности ошибок?
14
Практическая работа 3 СОЗДАНИЕ И МОДЕЛИРОВАНИЕ СЕТИ
LVQ И САМООРГАНИЗУЮЩЕЙСЯ КАРТЫ КОХОНЕНА
3.1. Цель работы
Создание и моделирование сети LVQ и самоорганизующейся карты Кохонена. Определение структуры этих сетей.
3.2. Теоретическое введение
Сеть встречного распространения (LVQ) имеет два слоя с последовательными связями.
В режиме функционирования сети LVQ предъявляется входной сигнал и формируется выходной сигнал. В режиме обучения на вход сети подаётся входной сигнал, и веса корректируются, чтобы сеть выдавала требуемый выходной сигнал.
Области применения сети LVQ – распознавание (классификация) образов, восстановление образов, сжатие данных (с потерями).
Недостаток сети LVQ – сеть не даёт возможность строить точные аппроксимации (отображения).
Преимущества сети LVQ – простота реализации, быстрая обучаемость.
Назначение самоорганизующихся карт – выявление в режиме самообучения центров кластеров входных векторов.
Кластеризация – разбиение набора примеров на несколько компактных областей (кластеров).
3.3. Порядок выполнения работы
При проведении работы необходимо выполнить следующие действия.
1. Векторы входа P и выходные классы Tc, представленные ниже, определяют задачу классификации, которая будет решена сетью LVQ:
P = [-3 -2 -2 0 0 0 0 +2 +2 +3; 0 +1 -1 2 1 -1 -2 +1 -1 0] Tc = [1 1 1 2 2 2 2 1 1 1]
15
Целевые классы Tc преобразуем к целевым векторам T, создадим сеть LVQ со входами P, четырьмя нейронами и долями распределения по классам [0.6 0.4]:
T = ind2vec(Tc)
net = newlvq(minmax(P),4,[.6 .4])
Выполним обучение сети:
net = train(net,P,T)
Промоделируем сеть на векторе входа
Y = sim(net,P) Yc = vec2ind(Y)
Вызвать структурную схему с помощью функции gensim.
2. Задать случайный вектор входа, элементы которого расположены в диапазонах [0 2] и [0 1]. Построить двумерную самоорганизующуюся карту Кохонена с числом нейронов [3 5] для классификации входных векторов:
P = [rand(1,400)*2; rand(1,400)] net = newsom([0 2; 0 1],[3 5])
Построим топологию двумерной карты Кохонена:
figure(1), clf, plotsom(net.layers{1}.positions), grid on
Затем реализуется процедура обучения. Процедура длится достаточно долго, поэтому для её иллюстрации ограничимся 3 циклами:
net.trainparam.epochs = 3 tic, net = train(net,P); toc
figure(2), clf, plot(P(1,: ),P(2,: ),’.g’,’MarkerSize’,10) hold on, plotsom(net.iw{1,1},net.layers{1}.distances)
16
Промоделируем обученную карту Кохонена на массиве векторов входа:
a = sim(net,P)
figure(2), clf, bar(sum(a’))
Вызвать структурную схему с помощью функции gensim.
3.4. Отчёт о выполнении работы
Содержательная часть отчёта о выполнении практической работы должна включать в себя порядок выполнения работы с промежуточными результатами и файл для прогона программы в MATLAB. Условие задачи следует придумать самостоятельно.
Контрольные вопросы
1.Как можно определить сущность нейрона?
2.Как раскрыть сущность понятия «обучение»?
3.Из каких элементов состоит нейрон?
4.Каковы основные функции пакета Neural Networks?
5.Для чего предназначена сеть встречного распространения (LVQ)?
6.Что происходит в режиме функционирования сети LVQ?
7.Что происходит в режиме обучения сети LVQ?
8.Каковы недостатки и преимущества сети LVQ?
9.Каково назначение самоорганизующихся карт?
10.Как раскрыть сущность понятия «кластеризация»?
17
Практическая работа 4 СОЗДАНИЕ И МОДЕЛИРОВАНИЕ КОНКУРИРУЮЩЕЙ СЕТИ И ПЕРСЕПТРОНА
4.1. Цель работы
Создание и моделирование конкурирующей сети и персептрона. Определение структуры этих сетей.
4.2. Теоретическое введение
Алгоритм обучения нейронной сети с помощью процедуры обратного распространения подразумевает наличие некоего внешнего звена, предоставляющего сети, кроме входных, а также и целевые выходные образы. Это алгоритм обучения «с учителем».
Общая идея алгоритмов обучения «без учителя» – в том, что в процессе самообучения путём соответствующей коррекции весовых коэффициентов усиливаются связи между возбуждёнными нейронами.
Обучение слоя Кохонена (обучение «без учителя», самообучение) заключается в следующем.
На вход подаётся входной вектор, и вычисляются его скалярные произведения с векторами весов всех нейронов. Нейрон с максимальным значением скалярного произведения объявляется «победителем», и его веса подстраиваются (корректируются).
Уравнение, описывающее процесс обучения: Wн =Wc +η(x −Wc ), где Wн – новое значение веса, соединяющего входную компоненту x с выигравшим нейроном, Wс – предыдущее значение этого веса, η – коэффициент скорости обучения. Коэффициент скорости обучения η вначале обычно полагается равным 0.7 и может затем постепенно уменьшаться в процессе обучения. Это позволяет делать большие начальные шаги для быстрого «грубого» обучения и меньшие шаги при подходе к окончательной величине.
Обучение персептрона сводится к формированию весов связей между первым и вторым слоями в соответствии со следующим алгоритмом:
Шаг 1. Проинициализировать элементы весовой матрицы (обычно небольшими случайными значениями).
18
Шаг 2. Подать на входы один из входных векторов, которые сеть должна научиться различать и вычислить её выход.
Шаг 3. Если выход правильный, перейти к Шагу 4. В противоположном случае вычислить разницу между идеальным YI и полученным Y значениями выхода: δ=YI −Y . Модифицировать веса в соответствии с формулой: wij (t +1) =wij (t) +ηδxi , где t и (t + 1) – номера соответственно текущей и следующей итераций; η – коэффициент скорости обучения, 0 < η < 1; i – номер входа; j – номер нейрона в слое.
Шаг 4. Цикл продолжать с Шага 2 до тех пор, пока сеть не перестанет ошибаться. На втором шаге в случайном порядке предъявляются все возможные входные векторы.
4.3. Порядок выполнения работы
При проведении работы необходимо выполнить следующие действия.
1. Сформировать координаты случайных точек и построить план их расположения на плоскости:
clear, c = 8 % Число кластеров
n = 6 % Число векторов в кластере
d = 0.5 % Среднеквадратическое отклонение от центра кластера x = [-10 10;-5 5] % Диапазон входных значений
[r,q] = size(x) minv = min(x’)’ maxv = max(x’)’
v = rand(r,c).*((maxv - minv)*ones(1,c) + minv*ones(1,c)) t = c*n % Число точек
v = [v v v v v v]
v=v+randn(r,t)*d % Координаты точек P = v
figure(1), clf, plot(P(1,:), P(2,:),’+k’) xlabel(‘P(1,:)’), ylabel(‘P(2,:)’), hold on, grid on
Применим конкурирующую сеть из восьми нейронов для того, чтобы распределить их по классам:
net = newc([-2 12;-1 6], 8 ,0.1)
19
w0 = net.IW{1}
b0 = net.b{1}
c0 = exp(1)./b0
После обучения в течение 50 циклов получим:
tic, net.trainParam.epochs = 50 [net,TR] = train(net,P); toc w = net.IW{1}
bn = net.b{1} cn = exp(1)./bn
Нанесем на график векторов входа центры кластеризации и отметим их красными кружочками:
plot(w(:,1),w(:,2),’or’),
title(‘Векторы входа и центры кластеризации’) Вызвать структурную схему с помощью функции gensim.
2. Рассмотреть однослойный персептрон с одним двухэлементным вектором входа, значения элементов которого изменяются в диапазоне от –2 до 2:
clear, net = newp([-2 2;-2 2],1)
По умолчанию веса и смещение равны нулю, и для того чтобы установить желаемые значения, необходимо применить следующие операторы:
net.IW{1,1}= [-1 1] net.b{1} = [1]
В этом случае разделяющая линия имеет вид
L: -p1 +p2 +1 = 0.
Определить, как откликается сеть на входные векторы p1 и p2, расположенные по разные стороны от разделяющей линии. Ввести:
p1 = [1; 1]
a1 = sim(net,p1) % Моделирование сети net с входным вектором p1
20
