Алгоритм обучения персептрона
Для обучения персептронов может быть применено несколько правил. Специально для обучения персептрона предложено правило обучения Ф. Розенблатта [1, 4].
Первоначально веса нейрона принимают нулевые значения или инициируются малыми случайными числами. При обучении одного нейрона без смещения возможны три ситуации.
1. Выход нейрона равен целевому значению (то есть тому значению, которое должно быть). Тогда ошибка равна и вектор весов не должен изменяться.
2. Целевое значение , а выход нейрона . Ошибка равна . В этом случае на выходе адаптивного сумматора формируется отрицательная величина , где – вектор весов нейрона, – вектор входа. Выход адаптивного сумматора необходимо скорректировать. Добавим к вектору весов транспонированный вектор входа . Тогда выход адаптивного сумматора изменится на положительную величину : . После нескольких таких шагов выход адаптивного сумматора станет неотрицательным и вектор входа будет классифицироваться правильно. Значения весов при этом изменятся.
3. Целевое значение , а выход нейрона . Ошибка равна . Выход адаптивного сумматора неотрицательный, а должен быть отрицательным. Вычтем из вектора весов транспонированный вектор входа. Тогда выход адаптивного сумматора изменится на отрицательную величину: . После нескольких циклов обучения выход адаптивного сумматора станет отрицательным и вектор входа будет классифицироваться правильно.
Суммируя рассмотренные ситуации, можно сказать, что вектор весов должен корректироваться на величину
,
где – ошибка выхода.
Рассматривая смещение как вес для единичного входа, получим
.
Тогда по правилу Розенблатта для i‑го нейрона вектор‑строка весов корректируется по формуле
,
где – вектор‑строка весов i‑го нейрона на k‑ом цикле обучения; – ошибка нейрона, равная 0, 1 или –1; – транспонированный вектор входов нейрона.
Известно [3], что персептрон, обучаемый по такому алгоритму, независимо от начального состояния весов и последовательности появления примеров всегда придет к достижению решения за конечное число итераций.
В NNT системы MATLAB разделяют понятия обучения и адаптации. В процессе обучения при неизменных весах на вход сети подаются все обучающие примеры и вычисляется усредненная по всем весам ошибка сети. Величина ошибки используется для корректировки весов. Затем снова повторяется цикл обучения, пока ошибка не станет малой. Процедура предъявления сети всего набора обучающих данных называется эпохой (epoch). Такой режим обучения в литературе часто называют пакетным. В процессе адаптации (последовательного режима обучения) в каждом проходе (passes) на вход подается один вектор, вычисляется ошибка и корректируются веса.
Известно [1], что последовательный режим обучения персептрона сходится за конечное число циклов для любой задачи классификации с линейно разделяемыми входными векторами. В случае пакетного режима обучения такая сходимость не гарантирована, поэтому для обучения персептрона применяют последовательный режим обучения.
1.3. Создание персептрона[1]
Для создания персептрона используется функция net = perceptron, где net—имя сети. Эта функция создает персептрон с функцией активации hardlim и использует функцию обучения learnp, реализующую описанный в подразделе 1.2 алгоритм обучения. Можно создать персептрон с функцией активации hardlims и функцией обучения learnpn, отличающейся от learnpтем, что входной вектор нормируется делением на евклидову норму (см. систему помощи MATLAB).
Параметры персептрона можно увидеть, задав команду
>> net
В объекте netможно увидеть параметры персептрона, например, веса входов:
>>inputweights=net.inputweights{1,1}
inputweights =
Neural Network Weight
delays: 0 % задержка
initFcn: 'initzero'% начальные значения весов
initSettings: (none)
learn: true % индикатор настройки – веса настраиваются
learnFcn: 'learnp' % функция настройки
learnParam: (none) % параметры настройки отсутствуют
size: [0 0] % размер матрицы весов
weightFcn: 'dotprod'%функция взвешивания весов – скалярное
%произведение
weightParam: (none) % данные пользователя
userdata: (your custom info)
Русские комментарии добавлены для пояснения. Обратите внимание на нулевой размер матрицы весов.
Информацию о смещениях можно увидеть следующим образом:
>> biases=net.biases{1}
biases =
Neural Network Bias
initFcn: 'initzero'
learn: true
learnFcn: 'learnp'
learnParam: (none)
size: 0
userdata: (your custom info)
Графическое изображение структуры можно просмотреть с помощью функции view(net) — рис. 1.5. На рис. 1.5 показаны нулевые массивы.
Рис. 1.5. Структура сети
Как мы убедились, функция perceptron создает объект с нулевыми массивами. Функция обучения создаст необходимые массивы, но рекомендуется предварительно провести конфигурирование сети с помощью функции net = configure(net,P,T), где P — RxQ матрица из Q входных векторов R, T — SxQ матрица из Q целевых векторов.
Для дальнейшего моделирования работы персептрона создадим персептрон с одним нейроном с двумя входами. Зададим входной вектор
>> P=[1; 1];
Пусть для этого входного вектора целевое значение равно единице
>> T=1;
Построим сконфигурированную сеть
>> net1 = configure(net,P,T);
Просмотрим структуру сконфигурированной сети (рис. 1.6)
>> view(net1)
Рис. 1.6. Структура сконфигурированной сети
Теперь на структуре сети отображены реальные размеры массивов.