Исследование персептронных сетей
Цель работы: изучение архитектуры персептрона и специальных функций для создания персептрона, настройки его весов и смещений и адаптации, ознакомление с демонстрационными примерами, а также приобретение навыков построения и обучения персептронов для различных областей применения.
Теоретические сведения
Персептрон – это однослойная нейронная сеть с S нейронами и R входами, каждый из которых может состоять из нескольких элементов. Передаточной функцией каждого нейрона является ступенчатая функция типа hardlim или hardlims. Помимо основных входов, нейроны персептрона имеют вход для постоянного смещения, равного единице. Элементы входов и смещения взвешиваются с помощью функции скалярного произведения dotprod и суммируются с помощью функции накопления netsum.
Создание персептрона производится следующей функцией:
net = newp(PR, S, tf, lf),
где net – объект класса network;
PR – массив размера Rx2 минимальных и максимальных значений для R векторов входа;
S – число нейронов персептрона;
tf – передаточная функция из списка { hardlim, hardlims }, причем по умолчанию задается hardlim;
lf – обучающая функция из списка {learnp, learnpn}, причем по умолчанию – learnp.
При создании персептрона, матрица весов и вектор смещений инициализируются нулями с помощью функций initzero.
Обучение персептрона производится с помощью функции адаптации adapt, которая корректирует веса и смещения по результатам обработки каждой пары входных и выходных значений (обучение с учителем). Применение функции adapt гарантирует, что любая задача классификации с линейно отделимыми векторами будет решена за конечное число циклов настройки. Функция обучения train, когда настройка параметров сети выполняется не после каждого прохода, а в результате всех проходов обучающего множества, в ряде случаев не обеспечивает сходимости процесса настройки, поэтому не используется для обучения персептрона.
Настройка весов и смещений, реализуемая функциями learnp и learnpn, производится по следующим правилам:
а) для входных сигналов вычисляются выходные;
б) определяются ошибки как разность между целевым выходом и соответствующим выходным сигналом;
в) производится корректирование весов и смещений путем сложения старых значений с приращениями, каждое из которых равно произведению соответствующего сигнала на ошибку того нейрона, для которого корректируется параметр.
Для того, чтобы сделать время обучения нечувствительным к большим или малым выбросам векторов входа, производят нормирование входных данных при вычислении приращений весов и смещений:
pni = pi (sqrt(1+ p12 +…+ pr2)).
Такое нормирование обеспечивается применением функции learnp для настройки как весов, так и смещений. Также автоматически свойству net.adaptFcn задается значение adaptwb, что позволяет использовать любые функции для настройки весов и смещений, а свойству net.adaptParam – набор параметров по умолчанию.
Адаптация персептрона производится функцией-методом adapt(net,P,T), где P– входные векторы; T – целевые значения. Процесс адаптации продолжается до тех пор, пока не будет достигнуто требуемое значение критерия качества обучения в виде средней абсолютной ошибки, вычисляемой функцией mae.
Практические задания
Задание 1. Создать персептрон с одним нейроном и одноэлементным входом, диапазон значений которого от 0 до 1, и проанализировать значения параметров его вычислительной модели, выполнив следующие действия:
1. Создать и инициализировать персептрон:
net = newp([0 1], 1) % – на экране весь объект;
net.inputWeights{1,1} % – веса входа объекта;
net.biases{1} % – смещение нейрона;
net.IW{1,1} % – значение весов;
net.b{1} % – значение смещения;
net.IW{1,1}=[3] % – задание веса;
net.b{1}=[4] % – задание смещения;
net = init(net); % – инициализация нулями;
net.IW{1,1} % – нулевое значение веса;
net.b{1} % –нулевое значение смещения;
net.inputWeights{1,1}.initFcn=′rands′;
net.biases{1}.initFcn=′rands′;
net = init(net); % – инициализация случайными значе
% ниями;
net.IW{1,1}, net.b{1} % – новые значения;
p = {[0] [1] [0.5]}; % – последовательность входов;
a = sim(net, p) % – моделирование сети;
Задание 2. Создать персептрон с одним нейроном и одним двухэлементным вектором входа, значения элементов которого изменяются в диапазоне от –2 до 2, настроить веса и смещение для реализации разделяющей линии
-p1 + p1 + 1 = 0,
а затем с помощью моделирования определить классы значений входного вектора, выполнив следующие действия:
1. Создать персептрон:
net = newp([-2 2; -2 2], 1).
2. Произвести ручную инициализацию:
net.IW{1,1} = [-1 1] ;
net.b{1} = [1].
3. Произвести проверку персептрона:
p = [1;1];
a = sim(net, p) % a = 1;
p = [1;-1];
a = sim(net, p) % a = 0.
4. Определить классы значений вектора:
p = {[-2;-2] [-2;-1] [-2;0] [-2;1] [-2;2]…
[-1;-2] [-1;-1] [-1;0] [-1;1] [-1;2]…
[0;-2] [0;-1] [0;0] [0;1] [0;2]…
[1;-2] [1;-1] [1;0] [1;1] [1;2]…
[2;-2] [2;-1] [2;0] [2;1] [2;2];
a = sim(net, p) % [0]-0-й класс; [1]-1-й класс.
Задание 3. Создать персептрон с одним нейроном и двоичным входом и настроить его параметры, сначала для выполнения логической функции AND, а затем для выполнения логической функции OR, выполнив следующие действия:
1. Создать персептрон:
net = newp([0 1;0 1], 1).
2. Подготовить обучающие последовательности:
p={[0;0] [0;1] [1;0] [1;1]};
p1=cat(2, p{:});
T1=num2cell(p1(1,:) & p1(2,:)) % – функция AND;
T2=num2cell(p1(1,:) | p1(2,:)) % – функция OR.
3. Настроить параметры персептрона для выполнения логической функции AND, используя процедуру адаптации:
net.adaptParam.passes = 10; % – число проходов;
net.adapt(net,p,T1); % – настройка на AND;
net.IW{1,1},net.b{1} % – линия 2p1 + p2 –3=0;
Y =sim(net,p) % – моделирование AND.
4. Настроить параметры персептрона для выполнения логической функции OR, используя процедуру обучения:
net.trainParam.epochs=20; % – число циклов;
net = init(net); % – инициализация;
net = train(net,p,T2); % – настройка на OR;
net.IW{1,1},net.b{1} % – линия 2p1 + 2p2 –2=0;
Y = sim(net,p) % – моделирование OR.
Задание 4. Используя пошаговый режим адаптации и обучения, проследить изменения весов, смещения, выходного значения и ошибки для персептрона, рассмотренного в третьем задании. Для этих целей использовать команды:
net.adaptParam.passes = 1;
net.trainParam.epochs = 1;
[net,Y,e]=adapt(net,p,T1); % – для AND;
[net, Y,e]=train(net,p,T2); % – для OR;
net.IW{1,1},net.b{1} % – настраиваемые параметры.
Задание 5. Создать, обучить и апробировать персептрон для принятия решения о зачислении в высшее учебное заведение абитуриентов, сдавших вступительные экзамены.
Лабораторная работа № 7