Лабораторна работа №4 Распознавание символов



Скачать 171.84 Kb.

Дата17.02.2017
Размер171.84 Kb.
Просмотров137
Скачиваний0

НС
4 курс
2014-2015 1
ЛАБОРАТОРНА РАБОТА №4
Распознавание символов
Цель работы: анализ работы многослойной нейронной сети по распознаванию символов (букв, цифр) методом обратного распространения ошибки (с импульсом и адаптацией) при использовании функий NNT системы
Matlab; изучение архитектуры рекуррентных нейронных сетей Хопфилда и специальных функций для их создания, взвешивания входов, накопления и активизации; ознакомление с демонстрационными примерами и их скриптами, а также приобретение навыков построения таких сетей для решения задач распознавания образов и создания ассоциативной памяти.
I.

Теретическая часть
1.

Распознавание символов с использованием алгоритма обратного
распространения ошибки

Демонстрационная программа пакета NNT appcr1 иллюстрирует, как распознавание символов может быть выполнено в сети с обратным распространением ошибки. Для распознавания 26 символов латинского алфавита, получаемых, например, с помощью системы распознавания, выполняющей оцифровку каждого символа в ее поле зрения, используется сеть из двух слоев, не считая входного, с n (10) нейронами в скрытом слое и p (26) нейронами в выходном (по одному на букву). Каждый символ представляется шаблоном размера 7

5, соответствующим пиксельной градации букв. Входной вектор соответствует набору признаков, выходной – классу образов, а скрытый слой используется для представления области знаний. Система считывания символов обычно работает не идеально и отдельные элементы символов могут оказаться искаженными. Проектируемая нейронная сеть должна точно распознать идеальные векторы входа и с максимальной точностью воспроизводить зашумленные векторы. Функция prprob формирует 26 векторов входа, каждый из которых содержит 35 элементов, называемых алфавитом. Она создает выходные переменные alphabet и targets, которые определяют массивы алфавита и целевых векторов. Массив targets задается как единичная матрица функцией eye(26). Для восстановления шаблона i-й буквы алфавита необходимо выполнить следующие операторы M-языка:
[alphabet,targets]= prprob;
ti= alphabet(:, i); letter{i}=reshape(ti, 5, 7)’;
letter{i}

Например, для определения шаблона буквы A, являющейся первым элементом алфавита, можно выполнить операторы:

НС
4 курс
2014-2015 2
[alphabet,targets]= prprob;
i=1;
ti= alphabet(:, i);
letter{i}=reshape(ti, 5, 7)’;
letter{i}

В результате будет выведено:
0 0 1 0 0 0 1 0 1 0 0 1 0 1 0
1 0 0 0 1
1 1 1 1 1
1 0 0 0 1
1 0 0 0 1
На вход сети поступает вектор входа с 35 элементами, вектор выхода содержит 26 элементов, только один из которых равен единице, а остальные – нулю. Правильно функционирующая сеть отвечает вектором со значением 1 для элемента, соответствующего номеру символа в алфавите. Кроме того, сеть должна распознавать символы в условиях действия шума. Предполагается, что шум – аддитивная помеха, нормально распределенная случайная величина с математическим ожиданием, равным нулю, и среднеквадратичным отклонением, меньшим или равным 0.2. Первый слой нейронов сети используется как распределительный, суммирование в нем не производится. В качестве функций активации скрытого и выходного слоев выбрана логистическая функция. Выбор такой функции активации связан с тем, что диапазон значений этой функции определен от нуля до единицы и позволяет сформировать значения выходного вектора.
При обучении искусственной нейронной сети используется процедура обратного распространения ошибки или процедура убывания градиента. Если при обучении сети возникают затруднения, то можно увеличивать количество нейронов скрытого слоя. Наличие шумов может привести к тому, что сеть не будет формировать вектор выхода, состоящий точно из нулей и единиц.
Поэтому по завершении этапа обучения выходной сигнал обрабатывается функцией compet, которая присваивает значение 1 единственному элементу вектора выхода, а всем остальным – значение 0.
Функция prprob, как отмечалось, формирует массив векторов входа alphabet размера 35×26 с шаблонами символов алфавита и массив целевых векторов targets:

НС
4 курс
2014-2015 3
[alphabet,targets]= prprob;
[R, Q]=size(alphabet);
[S2, Q]= size(targets);

Двухслойная нейронная сеть создается с помощью команды newff,
предназначенной для описания многослойных нейронных сетей прямой передачи сигнала с заданными функциями обучения и настройки на основе метода обратного распространения ошибки, и имеющей формат:
net=newff(PR, [S1 S2 …SN],{TF1 TF2 …TFN},btf, blf, pf);

где PR – массив размера R×2 минимальных и максимальных значений для R векторов входа;
Si – количество нейронов в слое i;
Tfi функция активации слоя i, по умолчанию tansig;
btf – обучающая функция, реализующая метод обратного распространения ошибки, по умолчанию trainlm;
blf – функция настройки, реализующая метод обратного распространения, по умолчанию learngdm;
pf – критерий качества обучения, по умолчанию средняя квадратичная ошибка mse.
Выходной аргумент net является объектом класса network.object многослойной нейронной сети.
В качестве метода обучения в пакете NNT применяется функция train, позволяющая установить процедуры обучения сети и настройки ее параметров и имеющая формат

[net, TR]=train(net, P, T, P
i
, A
i
); где входные аргументы:
net – имя нейронной сети,
P – массив входов,
T – вектор целей, по умолчанию нулевой вектор,
P
i
– начальные условия на линиях задержки входов, по умолчанию нулевые,
A
i
– начальные условия на линиях задержки слоев, по умолчанию нулевые; а выходные:

НС
4 курс
2014-2015 4
net – объект класса network.object после обучения;.
TR – характеристики процедуры обучения: TR.timesteps – длина последней выборки; TR.perf – значение функции качества на последнем цикле обучения.
Следует отметить, что вектор целей T используется только при наличии целевых выходов, а P
i
и A
i
указываются только в случае динамических сетей, имеющих линии задержки на входах или в слоях.
Моделирование нейронных сетей в пакете NNT обеспечивает функция sim, имеющая формат
[Y, Pf, Af, E, perf]= sim(net, P, Pi, Ai, T), где входные аргументы:
net – имя нейронной сети,
P – массив входов,
Pi – начальные условия на линиях задержки входов, по умолчанию нулевой вектор,
Ai – начальные условия на линиях задержки слоев, по умолчанию нулевой вектор,
T – вектор целей, по умолчанию нулевой вектор; выходные аргументы:
Y – массив выходов,
Pf – состояния на линиях задержки входов после моделирования,
Af – состояния на линиях задержки слоев после моделирования,
E – массив ошибок,
perf – значение функционала качества.
При создании сети для распознавания букв латинского алфавита используются операторы:

s1=10;

net=newff(minmax(alphabet), [s1 s2],(‘logsig’ ‘logsig’),’traingdx’);

net.LW(2,1)=net.LW(2,1)*0.01;

net.b(2)=net.b(2)*0.01


НС
4 курс
2014-2015 5
Элементы матрицы начальных весов и смещений скрытого слоя после создания сети умножаются на 0.01 для избежания дальнейших действий с их большими значениями.
Чтобы создать нейронную сеть, которая может обрабатывать зашумленные векторы входа, следует выполнить обучение сети как на идеальных, так и на зашумленных векторах. Сначала сеть обучается на идеальных векторах, пока не будет обеспечена минимальная сумма квадратов погрешностей. Затем сеть обучается на 10 наборах идеальных и зашумленных векторов. Две копии свободного от шума алфавита используются для того, чтобы сохранить способность сети классифицировать идеальные векторы входа. Оказывается, что после того как описанная сеть обучилась классифицировать сильно зашумленные векторы, она потеряла способность правильно классифицировать некоторые векторы, свободные от шума. Обучение выполняется с помощью функции traingdx, которая реализует метод обратного распространения ошибки с импульсом и адаптацией к темпу обучения. Сеть первоначально обучается в отсутствие шума с максимальным числом циклов или эпох обучения 5000 либо до достижения допустимой средней квадратичной погрешности, равной 0.1.
При обучении с шумом максимальное число циклов обучения сокращается до
300, а допустимая погрешность увеличивается до 0.6.

netn=net;

netn.trainParam.goal=0.6;

netn.trainParam.epochs=300;

T=[targets targets targets targets];

for pass=1:10
P=[alphabet, alphabet, (alphabet+randn(R,Q)*0.1),…
(alphabet+randn(R,Q)*0.2)];

[netn, tr]=train(netn,P,T);

end

Алгоритм обучения включает следующие шаги:
1.
Выбрать очередной входной образ из обучающего множества и подать входной вектор на вход сети.
2.
Вычислить выход сети.
3.
Вычислить разность между выходом сети и требуемым выходом (целевым вектором входного образа).
4.
Откорректировать веса сети так, чтобы минимизировать ошибку.
5.
Повторить шаги с 1 по 4 для каждого вектора обучающего множества до тех пор, пока ошибка на всем множестве не достигнет приемлемого уровня.
Изменение весов осуществляется с использованием модифицированного дельта-правила. Целевые значения для скрытых слоев не вводятся, а только для выходных.

НС
4 курс
2014-2015 6
Каждая итерация процедуры обучения включает два «прохода»: «проход» вперед, на котором получают множество выходов (шаги 1, 2) и «проход» назад, на котором сигнал ошибки распространяется обратно по сети и используется для изменения весов (шаги 3, 4).
Полученный выходной вектор сравнивается с целевым. Если они совпадают, обучение не происходит. В противном случае вес корректируется на величину:
ip
jp
ij
p
y
W





, где изменение в силе связи для p-й обучающей пары пропорционально произведению сигнала ошибки

jp
j-го нейронного элемента в выходном слое и выходного сигнала нейрона скрытого слоя i, посылающего сигнал по этой связи.
Определение ошибки является рекурсивным процессом, который начинается с выходных слоев:
)
(
'
jp
jp
j
jp
y
T
y




, где '
j
y
– производная функции преобразования, для логистической функции
)
1
(
'
j
j
j
y
y
y



,
jp
jp
y
T ,
– желаемое и действительное значения выходного сигнала j-го нейронного элемента;

– коэффициент скорости обучения (обычно от 0.01 до 1).
Сигнал ошибки для скрытого слоя определяется через сигнал ошибки нейронов, с которыми соединен его выход:










q
qj
qp
j
jp
W
y


'
Производная логистической функции принимает значение 0 при
0

j
y
или
1

j
y
и достигает максимального значения при
5 0
'

j
y
. Кроме этого, при различных весах выходные сигналы нейронных элементов не могут достичь значений 0 или 1, поэтому за ноль обычно принимают значения
1 0

j
y
, а за 1 – значения
9 0

j
y
Обобщенное дельта-правило достаточно хорошо обеспечивает минимизацию общей ошибки сети методом градиентного спуска в пространстве весов. Общая ошибка функционирования сети
2
)
(
2 1
 


p
j
jp
jp
y
T
D
Обучение продолжается до тех пор, пока в процессе обучения она не уменьшится до требуемого значения. Для учета изменения веса на предыдущем шаге в правило обучения вводится экспоненциально затухающий множитель

(импульс):
)
(
)
1
(
t
W
y
t
W
ij
i
j
ij












НС
4 курс
2014-2015 7
В методе убывания градиента с импульсом, как правило, первоначально

=0.9. После создания двух сетей, первая из которых обучена на идеальных векторах входа, а вторая – на зашумленных, осуществляется тестирование сети на 100 зашумленных векторах входа. Шум с нулевым средним значением и изменяющимся от 0 до 0.5 с шагом 0.05 среднеквадратичным отклонением нормально распределенной случайной величины добавляется к идеальным векторам входа. Выходной сигнал обрабатывается функцией compet для того, чтобы выбрать только один из 26 элементов вектора выхода.
Сети имеют малые погрешности, если среднеквадратичное значение шума находится в пределах от 0 до 0.05. Когда к векторам добавляется шум со среднеквадратичным отклонением 0.2, то в обеих сетях появились заметные ошибки. При этом погрешности нейронной сети, обученной на зашумленных векторах, на 3 – 4 % ниже, чем для сети, обученной на идеальных входных последовательностях.
Если необходима более высокая точность распознавания, сеть может быть обучена с использованием большего количества нейронов в скрытом слое.
Можно также увеличить размер векторов, чтобы пользоваться шаблоном с более мелкой сеткой, например, 14×10 точек вместо 7×5. Для вывода распознанного символа после моделирования сети с массивом выходов A можно использовать операторы:

answer=find(compet(A)==1);
plotchar(alphabet(:,answer)) %Вывод распознанного символа.
2.

Исследование сетей Хопфилда средствами Matlab
Американский исследователь Хопфилд в 80-х годах ХХ-го века предложил специальный тип нейросетей. Названные в его честь сети Хопфилда являются рекуррентными или сетями с обратными связями и предназначены для распознавания образов. Обобщенная структура этой сети представляется, как правило, в виде системы с обратной связью выхода с входом.
В сети Хопфилда входные сигналы нейронов являются одновременно и выходными сигналами сети: x
i
(k)=y
i
(k-1), при этом возбуждающий вектор особо не выделяется. В классической системе Хопфилда отсутствует связь нейрона с собственным выходом, что соответствует
0

ii
w
, а вся матрица весов является симметричной: w
ij
=w
ji
T
W
W
ˆ
ˆ

(1)

НС
4 курс
2014-2015 8
Симметричность матрицы весов гарантирует сходимость процесса обучения.
Процесс обучения сети формирует зоны притяжения некоторых точек равновесия, соответствующих обучающим данным. При использовании ассоциативной памяти мы имеем дело с обучающим вектором
)
,
,
(
2 1
n
x
x
x


x
, либо с множеством этих векторов, которые в результате проводимого обучения определяют расположение конкретных точек притяжения (аттракторов).
Каждый нейрон имеет функцию активации сигнум со значениями
1

:







0
,
1 0
,
1
)
(
a
a
a
sign
(2)
Это означает, что выходной сигнал i-го нейрона определяется функцией:
)
(
1




N
j
i
j
ij
i
b
x
w
sign
y
(3) где N обозначает количество нейронов, N=n. Часто постоянная составляющая
b
i
, определяющая порог срабатывания отдельных нейронов, равна 0. Тогда циклическое прохождение сигнала в сети Хопфилда можно представить соотношением:
)
)
1
(
(
)
(
1




N
j
j
ij
i
k
y
w
sign
k
y
(4) с начальным условием
i
j
x
y

)
0
(
В процессе функционирования сети Хопфилда можно выделить два режима: обучения и классификации. В режиме обучения на основе известных обучающих выборок
i
x
подбираются весовые коэффициенты w
ij
. В режиме классификации при зафиксированных значениях весов и вводе конкретного начального состояния нейронов
x
y

)
0
(
возникает переходный процесс, протекающий в соответствии с выражением (2) и заканчивающийся в одном из локальных устойчивых положений, задаваемом биполярным вектором со значениями
1


j
y
, для которого
)
1
(
)
(


k
k
y
y
Обучение не носит рекуррентного характера. Достаточно ввести значения
(правило Хебба) весов, выразив их через проекции вектора точки притяжения эталонного образа:

НС
4 курс
2014-2015 9
j
i
ij
x
x
N
w
1

(5)
В соответствии с этим правилом сеть дает правильный результат при входном примере, совпадающим с эталонным образцом, поскольку:
i
N
j
N
j
i
j
j
i
N
j
j
ij
x
N
x
x
x
x
N
x
w










1 1
1 1
1
)
(
1
(6) так как вследствие биполярности значений элементов вектора
x
всегда
1 2

j
x
При вводе большого количества обучающих выборок
)
(k
x
для k=1,2,…p веса
w
ij подбираются согласно обобщенному правилу Хебба в соответствии с которым:
)
(
1
)
(
1
k
j
l
k
k
i
ij
x
x
N
w



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

НС
4 курс
2014-2015 10
Рис. 1 Схема архитектуры модифицированной сети Хопфилда
Сеть Хопфилда относится к классу рекуррентных нейронных сетей. Она имеет один нейронный слой с функциями взвешивания dotprod, накопления
netsum и линейной ограниченной функцией активизации satlins. Слой охвачен динамической обратной связью с весами LW{1,1} и имеет смещения.
Сети Хопфилда обладают тем отличительным свойством, что при поступлении на вход некоторого вектора признаков в виде начальных условий, они за конечное число тактов времени приходят в состояние устойчивого равновесия, зависящего от входного вектора. Это позволяет ассоциировать входной вектор с некоторым состоянием сети, или объектом предметной области. Состояния устойчивого равновесия называются также аттракторами сети. Помимо целевых аттракторов в сети могут иметь место паразитные, которые не соответствуют никаким векторам входа. При создании сети
Хопфилда специальные алгоритмы синтеза сводят к минимуму число таких паразитных точек равновесия и обеспечивают максимальный размер области притяжения для точек равновесия.
Функция для создания сети Хопфилда имеет вид:
net=newhop(T);

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

НС
4 курс
2014-2015 11
После того как начальные условия заданы в виде массива T, определяющего ряд целевых вершин замкнутого гиперкуба, сеть для каждой вершины генерирует выход, который по обратной связи подаётся на вход. Этот процесс при создании сети повторяется много раз, пока её выход не установится в положение равновесия для каждой из целевых вершин. При подаче затем произвольного входного вектора сеть Хопфилда переходит в результате рекурсивного процесса к одной из точек равновесия, наиболее близкой к входному сигналу.
Динамическая модель рекуррентного слоя одной из модификаций сети
Хопфилда описывается следующим образом:
Когда сеть Хопфилда спроектирована, она может быть проверена с одним или большим числом векторов входа. Весьма вероятно, что векторы входа, близкие к целевым точкам равновесия, найдут свои цели. Способность сети
Хопфилда быстро обрабатывать наборы векторов входа позволяет проверить сеть за относительно короткое время. Сначала следует проверить, что точки равновесия целевых векторов действительно принадлежат вершинам гиперкуба, а затем можно определить области притяжения этих точек и обнаружить паразитные точки равновесия.

Пример 1.
Рассмотрим сеть Хопфилда с четырьмя нейронами и определим четыре точки равновесия:
T = [+1 -1; -1 +1; +1 +1; -1 -1];
T=T';
plot(T(1,:),T(2,:),'rh','MarkerSize',13), hold on;
axis([-1.1 1.1 -1.1 1.1]);
title('Hopfield Network State Space');
xlabel('a(1)');
ylabel('a(2)');
net = newhop(T);
[Y,Pf,Af] = sim(net,4,[],T);
Y
Pf

НС
4 курс
2014-2015 12
Af
pause
color = 'rgbmy';
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,:), color(rem(i,5)+1),'LineWidth',5)
end
На рис. 2 показано поведение обученной сети при случайных начальных условиях a.
Рис. 2 Поведение сети Хопфилда при случайных начальных условиях a

Пример 2.

НС
4 курс
2014-2015 13
Создать сеть Хопфилда с двумя устойчивыми точками в трёхмерном пространстве, выполнив следующие команды:
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]′.
Пример 3.
Создать сеть Хопфилда с четырьмя устойчивыми точками в двухмерном пространстве, выполнив следующие команды:
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)]

НС
4 курс
2014-2015 14
start=cell2mat(a);
plot(start(1.1), start(2.1),′kx′.record(1,:),record(2,:))
end
II.
Порядок выполнения работы
1.
Изучить prprob, appcr1

Matlab\toolbox\nnet\nndemos; newff, traingdx, learngdm,

Matlab\\toolbox\nnet\nnet. Запустить все примеры, которые заданы в теоретической части.
2.
Построить нейронную сеть для распознавания букв латинского алфавита, используя функцию newff – инициализации сети прямой передачи сигнала.
3.
Обучить сеть, используя функцию train, traingdx.
4.
Распознать несколько букв, зашумленных символов (функция sim).
5.
В зависимости от индивидуального задания, задать обучающий масив (цифр и русский алфавит – первые двадцать букв). Построить нейронную сеть для распознавания символов.
6.
Обучить сеть.
7.
Распознать символ.
8.
Провести сравнительный анализ, полученных результатов.
III.

Форма отчета

1.
Титульный лист.
2.
Индивидуальное задание, вариант которого выбирается соотвественно номеру в списке.
3.
Описание архитектуры сети с указанием параметров (функции newff, traingdx, sim).
4.
Листинг программы с комментариями.
5.
Результаты обучения.
6.
Обоснование правильности определения параметров сети.
7.
Описание архитектуры сети с указанием параметров (функции newhop).
8.
Листинг программы с комментариями.
9.
Результаты обучения.
10.
Обоснование правильности определения параметров сети.
11.
Проведение сравнительного анализа полученных результатов.

НС
4 курс
2014-2015 15
IV.

Индивидуальные задания

Для сохранения объектов «А», «Б», «В» построить сеть Хопфилда.
Восстановить с ее помощью объект «Г».

1.
2.

3.
4.

НС
4 курс
2014-2015 16
5.

6.

7.

8.

9.

10.


НС
4 курс
2014-2015 17
11.

12.

13.

14.

15.

16.

НС
4 курс
2014-2015 18


НС
4 курс
2014-2015 19
17.

18.

19.

20.

21.

22.


НС
4 курс
2014-2015 20
23.

24.

VII.

Контрольные вопросы

1.
Распознавание симоволов с использованием алгоритма обратного распространения ошибки.
2.
Понятие сетей прямого распространения.
3.
Задачи решаемые НС, использующих алгорита обратного распространения ошибки ОРО).
4.
Алгоритм ОРО.
5.
Особенности алгоритма ОРО.
6.
Средства системы Matlab, которые позволяют использовать алгоритм обратного распространения ошибки.
7.
Настройка параметров НС.
8.
Нейоронные сети хопфилда: архитектура, параметры.
9.
Устойчивость НС Хопфилда: достаточное условие.
10.
Скорость сходимости, особенности обучения.
11.
Задачи решаемые рекурретными НС.
12.
Процесс обучения НС Хопфилда.
13.
Параметры НС хопфилда.
14.
Преимущества и недостатки использования НС Хопфилда.
15.
Моделирование памяти.
16.
Ассоциативная память.
17.
Автоассоциативная память
18.
Гетерассоциативе=ная память.
19.
Типы нейронных сетей Хопфилда.
20.
Вид функций активации в НС Хопфилда.
21.
Входные ивыходные векторы при обучении НС Хопфилда.
22.
Правило Хэбба.


Поделитесь с Вашими друзьями:


База данных защищена авторским правом ©nethash.ru 2017
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал