Академический Документы
Профессиональный Документы
Культура Документы
Лабораторный практикум
Наградной
логотип
вуза
Издательство
Пензенского государственного
университета
Пенза 2004
УДК 681.3
С34
Рецензенты:
Научно-технический совет Федерального государственного
унитарного предприятия ОАО «НПП «Рубин»
Кандидат технических наук, доцент кафедры «Прикладная математика»
Пензенского государственного педагогического университета
им. В. Г. Белинского
В. В. Дрождин
УДК 681.3
2
Введение
Искусственные нейронные сети основаны на весьма простой био-
логической модели нервной системы, состоящей из огромного числа
(1011) нейронов, каждый из которых принимает взвешенную сумму
входных сигналов и при определенных условиях передает сигнал дру-
гим нейронам. Количество связей нейронов в системе достигает 1015.
Теория нейронных сетей возникла из исследований в области ис-
кусственного интеллекта и связана с попытками воспроизведения
способности нервных биологических систем обучаться и исправлять
ошибки, моделируя низкоуровневую структуру мозга. Исследования
по созданию таких систем на основе высокоуровневого (символьно-
го) моделирования процесса мышления не принесли желаемых ре-
зультатов. Эта теория развивалась в течение последних пяти десяти-
летий и за последние пятнадцать лет нашла широкое практическое
применение: в космонавтике и аэронавтике – для имитации траекто-
рий полета и построения систем автоматического пилотирования; в
военном деле – для управления оружием и слежением за целями; в
электронике – для разработки систем машинного зрения и синтеза
речи; в медицине – для диагностики заболеваний и конструирования
протезов; в производстве – для управления технологическими про-
цессами, роботами и т. д. Такой успех нейронных сетей объясняется
тем, что была создана необходимая элементная баз для реализации
нейронных сетей, а также разработаны мощные инструментальные
средства для их моделирования в виде пакетов прикладных про-
грамм. К числу подобных пакетов относится пакет Neural Networks
Toolbox (NNT) системы математического моделирования MATLAB 6
фирмы Math Works.
Пакет прикладных программ NNT содержит средства для по-
строения нейронных сетей, базирующихся на поведении математиче-
3
ского аналога нейрона. Пакет обеспечивает эффективную поддержку
проектирования, обучения, анализа и моделирования множества из-
вестных типов сетей – от базовых моделей персептрона до самых
современных ассоциативных и самоорганизующихся сетей. В пакете
имеется более 15 таких типов. Для каждого типа архитектуры и обу-
чающих правил имеются М-функции инициализации, обучения,
адаптации, создания, моделирования, отображения, оценки и демон-
страции, а также примеры применения. Обеспечена возможность ге-
нерации переносимого кода с помощью пакета Real Time Workshop,
также входящего в систему MATLAB 6.
Лабораторные работы, описания которых содержатся в данном
практикуме, разработаны с целью научить студентов эффективно
использовать мощный инструментальный пакет NNT системы
MATLAB 6 для проектирования, анализа и моделирования нейрон-
ных сетей. Первые две лабораторные работы позволяют освоить ин-
тегрированную среду системы MATLAB и основы программирова-
ния на языке сверхвысокого уровня этой системы. Остальные лабо-
раторные работы дают возможность познакомиться со многими ти-
пами нейронных сетей, научиться создавать, обучать и исследовать
такие сети. Описательная часть лабораторной работы содержит не-
обходимый минимум сведений по теме, практическая часть включает
достаточное число заданий для приобретения навыков в использова-
нии пакета NNT.
4
Лабораторная работа № 1
Основы программирования
в системе MATLAB
Цель работы: изучение основ проблемно-ориентированной сис-
темы программирования MATLAB, обеспечивающей работу с мас-
сивами строковых и числовых данных, матрицами, структурами,
классами и ячейками с помощью матричных операций, функций,
разнообразных управляющих структур и средств расширения систе-
мы, а также приобретение навыков применения командно-графичес-
кого интерфейса системы для построения и исследования нейронных
сетей различной архитектуры.
Теоретические сведения
Введение
Мощная инструментальная система MATLAB обеспечивает про-
цедурное, операторное, функциональное, логическое, структурное,
объектно-ориентированное и визуальное (средствами пакета Simulink)
программирование. Она базируется на математико-ориентированном
языке сверхвысокого уровня, который упрощает запись алгоритмов и
открывает новые методы их создания.
Язык системы MATLAB по своей структуре напоминает популяр-
ный командный язык Бейсик. Команды языка исполняются в режиме
интерпретации. С его помощью можно создавать текстовые модули-
функции и модули-сценарии. Файлы, где хранятся такие модули,
имеют расширение *.m и называются М-файлами, а находящиеся в
них функции – М-функциями. В системе имеется огромная библио-
тека М-функций в текстовом формате, которые можно модифициро-
вать для достижения желаемых целей. Пользователь может создавать
собственные М-функции и включать их в систему по словарному
принципу.
5
Базовые средства языка программирования
Система MATLAB может использоваться в двух режимах: в ре-
жиме непосредственного счета (командный режим) и в режиме про-
граммирования.
В командном режиме пользователь последовательно вводит коман-
ды входного языка и получает ответ. С помощью этого режима можно
решить множество математических задач различной сложности.
Однако при решении серьезных задач возникает необходимость
сохранения используемых последовательностей вычислений, а также
их дальнейших модификаций. Для решения этой задачи система
MATLAB имеет в своем составе мощный язык программирования
высокого уровня.
Программами в системе MATLAB являются файлы текстового
формата с расширением m, содержащие запись программ в виде
программных кодов.
Для редактирования файлов программ может использоваться лю-
бой текстовый редактор, а также специальный многооконный редак-
тор. Редактор программ системы MATLAB имеет следующие воз-
можности:
цветовая подсветка синтаксиса, позволяющая выявить ошибки;
синтаксический контроль на стадии подготовки М-файла;
установка точек прерывания при интерпретации команд;
автоматическая нумерация строк программы для выдачи сообщений.
Язык программирования системы MATLAB имеет следующие
средства для построения команд и написания М-файлов:
1) данные различного типа: double, numeric, char, cell, array;
2) константы и переменные: 25, pi, eps, ‘Hello’, ans, m, n;
3) операторы, включая операторы математических выражений: +,-,*;
4) встроенные команды и функции: help, clear, plot, sin, cos;
5) функции пользователя: func, map, draw, paint, neuron;
6) управляющие структуры: if, for, while, switch, try, catch, end;
7) системные операторы и функции: realmin, realmax, Inf, Nan;
8) средства расширения языка: пакет NNT, пакет Simulink.
6
M-файлы сценариев и функций
M-файлы системы MATLAB делятся на два класса:
• файлы-сценарии, не имеющие входных параметров;
• файлы-функции, имеющие входные параметры.
Файл-сценарий или Script-файл не имеет списка входных парамет-
ров. Он использует глобальные переменные, т. е. такие переменные,
значения которых могут быть изменены в любой момент сеанса рабо-
ты и в любом месте программы. Для запуска файла-сценария из ко-
мандной строки MATLAB достаточно указать его имя в этой строке.
Файл-сценарий имеет следующую структуру:
%Основной комментарий – одна строка (обязателен)
%Дополнительный комментарий – любое число строк (не обязателен)
Тело файла с любыми выражениями, командами и управ-
ляющими структурами.
Основной комментарий выводится при выполнении команд
lookfor и help имя_каталога. Полный комментарий выводится при
выполнении команды help имя_файла, причём вывод производится
до первой пустой строки.
Файл-функция отличается от файла-сценария прежде всего тем,
что созданная им функция имеет входные параметры, список кото-
рых указывается в круглых скобках. Используемые в файлах-функ-
циях переменные и имена параметров являются локальными пере-
менными, изменение значений которых в теле функции не влияет на
значения, которые те же самые переменные могут иметь за предела-
ми функции.
Файл-функция имеет следующую структуру:
7
Тело файла с любыми выражениями, командами и управ-
ляющими структурами.
var=выражение
Function[var1,var2,...]=f_name(Список_параметров_передаваемых_
значений)
%Основной комментарий – одна строка (обязателен)
%Дополнительный комментарий – любое число строк (необя-
зателен)
8
4. Циклы типа while...end: while Условие_цикла Тело_цикла
end;
5. Конструкция переключателя: switch Exp case B1 case b2 …
otherwise end;
6. Конструкция try...catch...end: try Тело_try catch Тело_catch
end;
7. Создание паузы в вычислениях: pause, pause (...), pause on,
pause off.
переменная = input(строка)
if Условие
Список_инструкций_If
elseif Условие
Список_инструкций_Elsif
else
Список_инструкций_Else
end
9
Циклы типа for...end обычно используются для организации вы-
числений с заданным числом повторяющихся циклов. Конструкция
такого цикла имеет следующий вид:
while Условие
Список_инструкций
end
switch switch_Выражение
case case_Выражение
Список_инструкций
case
{case_Выражение1,case_Выражение2,case_Выражение3,...}
Список_инструкций
...
otherwise,
Список_инструкций
end
10
Case_выражение может быть числом, константой, переменной,
вектором ячеек или даже строчной переменной. В последнем случае
оператор case истинен, если функция strcmp(значение, выражение)
возвращает логическое значение “истина”.
Конструкция блока вывода ошибок try...catch...end имеет следую-
щий синтаксис:
try
Список_инструкций
catch
Список_инструкций
end
11
Практические задания
Задание 1. Разработать файл-сценарий для построения графика
синусоиды линией красного цвета с выведенной масштабной сеткой
в интервале [xmin, xmax].
>>
12
На экран выводится сообщение об ошибке, так как сценарий ис-
пользует глобальные переменные, которые не определены. Для ус-
пешного выполнения примера необходимо задать следующие дейст-
вия:
13
Задание 3. Разработать файл-сценарий для решения предыдущей
задачи с возможностью ввода значений пользователем, выполнив
следующие действия:
>> pcrdialog
14
Лабораторная работа № 2
Массивы, структуры, ячейки
и классы системы MATLAB
Цель работы: изучение принципов работы с матрицами, структу-
рами, ячейками и классами в MATLAB, а также приобретение навы-
ков их применения для построения моделей нейронных сетей и их
исследования.
Теоретические сведения
Векторы, матрицы и многомерные массивы
В системе MATLAB любые данные представляются только в виде
массивов: одномерных (векторов), двумерных (матриц) и многомер-
ных любой размерности.
Система MATLAB выполняет сложные и трудоемкие операции
над векторами и матрицами даже в режиме прямых вычислений без
какого-либо программирования. Поддерживается множество опера-
ций над матрицами, таких как:
1. Создание матриц с заданными свойствами: ones, zeros, rand;
2. Конкатенация матриц: cat (dim, А, В), cat (dim, A1, A2, A3, ...);
3. Перестановка элементов: fliplr, flipud, perms;
4. Вычисление произведений и суммирование: prod, cumprod,
sum;
5. Поворот: rot 90(A), rot 90(A,k);
6. Выделение треугольных частей матриц: tril (x), tril (x,k), triu ;
7. Вычисление сопровождающей матрицы: compan;
8. Матричные операции векторной алгебры: cand, det, rank, norm;
9. Операции с многомерными массивами: +, -, *, .*, /, ./, ^, .^ .
Интересно отметить, что даже обычные числа и переменные в
MATLAB рассматриваются как матрицы размера 1х1, что дает еди-
нообразные формы и методы проведения операций над обычными
числами и массивами. Данная операция называется векторизацией.
15
Векторизация обеспечивает и упрощение записи операций, и суще-
ственное повышение скорости их выполнения. Это также означает,
что большинство функций может работать с аргументами в виде век-
торов и матриц.
Структуры
Массив записей – это новый тип массива, в котором разрешается
накапливать в виде записей разнородные данные. Отличительная
особенность такого массива – наличие именованных полей.
MATLAB поддерживает следующие функции при работе с масси-
вами записей:
Функция Описание
struct Создать массив записей
fieldnames Получить имена полей
getfield Получить содержимое поля
setfield Установить содержимое поля
rmfield Удалить поле
isfield Истинно, если это поле массива записей
isstruct Истинно, если это массив записей
16
б) используя функцию struct.
Для того чтобы сформировать простейшую структуру размера
1х1, необходимо присвоить данные соответствующим полям. Систе-
ма MATLAB автоматически формирует структуру по мере ее запол-
нения.
Функция struct имеет следующий синтаксис:
str_array=struct('<имя_поля1>’,'<значение1>','<имя_поля2>','
<значение2>',...).
f = array(array_index).field(field_index);
17
f = setfield(array, {array_index}, 'field', {field_index}, value)
Выполнение операций с полями и элементами полей абсолютно
аналогично операциям с элементами обычного числового массива. В
обоих случаях надо использовать индексные выражения.
Для обработки структур со специфической архитектурой полей
могут понадобиться специальные функции обработки полей и их
элементов. При написании М-файлов для обработки структур необ-
ходимо помнить, что пользователь должен сам выполнить анализ
возникновения возможных ошибок, связанных с обработкой полей.
Массивы ячеек
В систему MATLAB включен специальный тип массивов ячеек,
элементы которого сами, в свою очередь, являются массивами. Име-
ются следующие функции для работы с массивами ячеек:
Функция Описание
cell Создать массив ячеек
celldisp Показать содержимое массива ячеек
cellplot Показать графическую структуру массива ячеек
num2cell Преобразовать числовой массив в массив ячеек
deal Обмен данными между любыми классами массивов
cell2struct Преобразовать массив ячеек в структуру
struct2cell Преобразовать структуру в массив ячеек
iscell Истинно, если это массив ячеек
Пользователь может расширить состав этих функций, создавая
специальные М-файлы для обработки конкретных данных.
Определение массива ячеек
Массив ячеек – это массив, где элементами являются ячейки, ко-
торые могут содержать любой тип массива, в том числе и массив
18
ячеек. Массивы ячеек позволяют хранить массивы с элементами раз-
ных типов и разных размерностей.
Создать массивы ячеек можно двумя способами:
а) используя операторы присваивания;
б) используя функцию cell, которая позволяет предварительно
разместить массив, а затем присвоить данные ячейкам.
Можно построить массив ячеек, присваивая данные отдельным
ячейкам. В этом случае система MATLAB автоматически строит
массив по мере ввода данных. Существует два способа присвоения
данных отдельным ячейкам.
Индексация ячеек
В этом случае необходимо заключить индексы ячейки в круглые
скобки, используя стандартные обозначения для массива. Заключить
содержимое ячейки в правой части оператора присваивания в фигур-
ные скобки { }.
Индексация содержимого
Для того чтобы индексировать массив ячеек, надо в левой части
оператора присваивания указать элемент ячейки в виде индексов в
фигурных скобках по аналогии с элементами обычного массива, а
также указать содержимое ячейки в правой части оператора присваи-
вания.
Существует также два способа для извлечения данных из массива
ячеек и передачи их либо в некоторый числовой массив, либо в но-
вый массив ячеек:
а) доступ к содержимому ячейки с помощью индексации содер-
жимого;
б) доступ к подмножеству ячеек с помощью индексации ячеек.
Доступ к содержимому ячеек (индексация содер-
жимого)
Используя индексирование содержимого в правой части операто-
ра присваивания, можно получить доступ к некоторым или всем дан-
ным в одной ячейке. Определить переменную в левой части операто-
19
ра присваивания, чтобы запомнить содержимое ячейки. Заключить
индексное выражение в правой части оператора присваивания в фи-
гурные скобки. Это будет означать, что присваивается содержимое
ячеек, а не сами ячейки.
Доступ к подмножеству ячеек (индексация яче-
ек)
Используя индексацию ячеек, можно переназначить любой набор
ячеек другой переменной для создания нового массива ячеек. Ис-
пользуя двоеточие, можно получить доступ к подмножествам ячеек
внутри массива ячеек.
Удаление и переопределение массива ячеек
Удаляя ячейки из массива, можно уменьшить размерность масси-
ва, применив единственный оператор присваивания. По аналогии с
обычным массивом следует использовать индексацию вектора для
удаления строки или столбца ячеек, присваивая при этом пустую
матрицу подмассиву:
A(j : k ) = [ ]
Таким образом, при удалении ячеек фигурные скобки вообще не
применяются в операторах присваивания.
Как и для обычных массивов с помощью функции reshape можно
переопределять размеры массива ячеек, причем общее количество
ячеек должно оставаться неизменным; с помощью функции reshape
ни удалить, ни добавить ячейки нельзя.
Описание списков переменных
Массивы ячеек могут быть использованы для замены следующих
списков переменных:
а) списков входных переменных;
б) списков выходных переменных;
в) операций вывода на экран терминала;
д) квадратных и фигурных скобок при формировании массивов.
20
Когда для индексирования многомерного массива ячеек исполь-
зуются двоеточие и фигурные скобки, то система MATLAB обраба-
тывает содержимое каждой ячейки как отдельную переменную.
Классы
Классы и объекты позволяют добавлять новые типы данных и но-
вые операции. Класс описывает тип переменной и определяет, какие
операции и функции могут быть применены к этому типу перемен-
ной. Объект – это структура или образец некоторого класса.
Добавление классов осуществляется в рамках операционной сре-
ды системы MATLAB, которая обеспечивает возможность хранения
созданных объектов и организации каталога М-файлов, определяю-
щих допустимые методы обработки для данного класса объектов.
Каталог класса включает М-функции, определяющие способы, с по-
мощью которых операторы системы MATLAB, включая арифмети-
ческие, обработки индексов, конкатенации, обрабатывают объекты
данного класса. Переопределение встроенных операторов для нового
класса объектов в рамках объектно-ориентированного подхода назы-
вается переопределением методов.
В языке MATLAB отсутствует механизм объявления переменных.
Например, оператор A = zeros(10, 10) формирует обычную матрицу
размера 10х10, которая является объектом класса double. Точно так-
же оператор s = 'Hello world' создает объект класса char.
То же самое относится и к вновь создаваемым классам. Никаких
объявлений переменных или объектов не требуется. Объекты созда-
ются динамически посредством вызова конструктора класса.
Каталог класса
М-файлы, определяющие методы для объектов данного класса
объединяются в каталог класса, название которого задается как
@<имя_класса>.
Конструктор класса
Каталог класса должен обязательно содержать М-файл, называе-
мый конструктором класса. Название конструктора должно совпа-
дать с названиями класса и каталога без префикса @. Конструктор
21
создает объекты, используя данные в виде массива записей (структу-
ры) и приписывая им метку класса.
Функции isa и class. Эти функции используются конструктором,
но могут применяться и вне каталога класса.
Функция isa(a, 'class_name') проверяет, принадлежит ли объект a
данному классу.
При использовании вне контекста методов функция class допус-
кает только один аргумент.
Команда class(a) возвращает строку, содержащую имя класса для
объекта a.
Преобразование классов. Вызов функции преобразования класса
имеет вид
b = class_name(a),
где a – объект некоторого класса, отличного от class_name. В этом
случае система MATLAB ищет метод с именем class_name в катало-
ге классов для объекта a. Такой метод преобразовывает объект одно-
го класса в объект другого класса. Если данный объект уже является
объектом класса class_name, то система MATLAB вызывает функ-
цию конструктора, который просто возвращает этот объект.
Наиболее важными функциями преобразования классов являются
double и char. Преобразование к классу double создает традицион-
ный массив системы MATLAB, хотя это может и не отражать тре-
буемого соответствия для некоторых классов. Преобразование к
классу char полезно для вывода на печать.
При работе с объектами и методами система MATLAB использует
специальное множество правил, чтобы гарантировать вызов требуе-
мой функции. Если, по крайней мере, один из аргументов является
объектом, система MATLAB рассматривает список параметров слева
направо, чтобы определить их старшинство. Для операторов равного
старшинства выбирается крайний левый. Затем к нему применяются
следующие правила:
1. Если имя вызываемой функции совпадает с именем встроенной
функции, то проверяется, существует ли переопределенная версия
этой функции для этого класса, а затем – для родительского. Если ни
один из этих случаев не имеет место, выдается ошибка.
22
2. Если имя функции совпадает с названием каталога классов,
проверяется, не является ли эта функция функцией преобразования,
и если да, то эта функция преобразования вызывается. В противном
случае вызывается конструктор класса.
3. Если оба случая не подходят, то анализируются следующие
возможности:
а) если есть метод соответствующего типа, то вызывается этот ме-
тод;
б) если есть метод родительского класса, то вызывается метод ро-
дительского класса;
в) если есть функция с таким именем на пути поиска, то вызыва-
ется эта функция;
г) в противном случае генерируется ошибка.
Частные методы и функции. Каталоги классов могут иметь свя-
занные с ними частные каталоги. Такие каталоги могут содержать
как частные методы, которые работают с объектами данного класса,
так и частные функции, которые не работают с объектами, но выпол-
няют общие вычисления. Можно устанавливать частный каталог в
каталоге класса точно так же, как создается любой частный каталог,
т. е. просто создать каталог, именуемый private, внутри каталога
@class_name.
Во многих случаях можно изменить поведение операторов и
функций системы MATLAB, когда в качестве аргумента выступает
объект. Это осуществляется путем переопределения соответствую-
щих функций. Переопределение класса открывает возможность об-
работки с помощью этой функции различных типов данных при про-
извольном количестве входных аргументов.
Переопределение арифметических операций. Каждый встроен-
ный оператор в системе MATLAB имеет имя. Поэтому любой опера-
тор может быть переопределен путем создания М-файла с соответст-
вующим названием в каталоге классов.
Переопределение функций. Можно переопределить любую М-
функцию, создавая функцию с тем же именем в каталоге класса. Ко-
гда функция применяется к объекту, MATLAB прежде всего про-
23
сматривает каталог соответствующего класса, а уже потом другие
пути доступа.
Практические задания
Задание 1.Создать массив ячеек, содержащий данные различного
типа, с помощью индексации ячеек и индексации содержимого.
1. Для создания массива ячеек с помощью индексации ячеек вве-
сти следующие команды:
>> A(1,1)={[1 4 3; 0 5 8; 7 2 9]};
>> A(1,2)={'Anne Smith'};
>> A(2,1)={3+7i};
>> A(2,2)={-pi:pi/10:pi};
>> A
A=
[3x3 double] 'Anne Smith'
[3.0000+ 7.0000i] [1x21 double]
24
1 4 3
0 5 8
7 2 9
A{2,1} =
3.0000 + 7.0000i
A{1,2} =
Anne Smith
A{2,2} =
Columns 1 through 9
-3.1416 -2.8274 -2.5133 -2.1991 -1.8850 -1.5708 -1.2566
-0.9425 -0.6283
Columns 10 through 18
-0.3142 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
2.1991
Columns 19 through 21
2.5133 2.8274 3.1416
25
>> S(2).fam = 'Miller';
>> S(2).year = 1980
S=
1x2 struct array with fields:
name
fam
year
26
Обратите внимание на то, что xmin и xmax объявляются в теле
сценария и объявлять глобальные переменные не требуется.
27
Лабораторная работа № 3
Теоретические сведения
Простой нейрон
Элементарной ячейкой нейронной сети является нейрон.
Структура нейрона с единственным скалярным входом показана
на рис. 3.1,а.
а б
Рис. 3.1. Простой нейрон
28
можно свести к схеме взвешивания, если представить что нейрон
имеет второй входной сигнал со значением, равным 1. Вход n функ-
ции активации нейрона по-прежнему остается скалярным и равным
сумме взвешенного входа и смещения b. Эта сумма является аргу-
ментом функции активации f; выходом функции активации является
сигнал а. Константы w и b являются скалярными параметрами ней-
рона. Основной принцип работы нейронной сети состоит в настройке
параметров нейрона с тем, чтобы функционирование сети соответст-
вовало некоторому желаемому поведению. Регулируя веса или пара-
метры смещения, можно “научить” сеть выполнять конкретную ра-
боту; возможно также, что сеть сама будет корректировать свои па-
раметры, чтобы достичь требуемого результата.
Уравнение нейрона со смещением имеет вид
a = f(w*p+b*l).
Как уже отмечалось, смещение b – настраиваемый скалярный па-
раметр нейрона, который не является входом, а константа 1, которая
управляет смещением, рассматривается как вход и может быть учте-
на в виде линейной комбинации векторов входа
⎡ p⎤
a = [w b] ⎢ ⎥ .
⎣1⎦
Функция активации
Функции активации (передаточные функции) нейрона могут
иметь самый разнообразный вид. Функция активации f, как правило,
принадлежит классу сигмоидальных функций с аргументом n и вы-
ходом а.
Ниже рассмотрены три наиболее распространенные функции ак-
тивации.
29
Рис. 3.2. Функция активации hardlim
30
Логистическая функция активации logsig. Эта функция опи-
сывается соотношением а = logsig(n) = 1/(1 + ехр(-n)) и показа-
на на рис. 3.4. Она принадлежит к классу сигмоидальных функ-
ций, и ее аргумент может принимать любое значение в диапазоне
от − ∞ до + ∞ , а выход изменяется в диапазоне от 0 до 1. В пакете
ППП Neural Network Toolbox она представлена М-функцией logsig.
Благодаря свойству дифференцируемости эта функция часто исполь-
зуется в сетях с обучением на основе метода обратного распростра-
нения ошибки.
31
на сумматор. Их сумма равна скалярному произведению вектора-
строки W на вектор входа р.
32
тивации f, на выходе которой получается выходная величина нейро-
на а, которая в данном случае является скалярной величиной. Струк-
турная схема, приведенная на рис. 3.6, называется слоем сети. Слой
характеризуется матрицей весов W, смещением b, операциями ум-
ножения W*p, суммирования и функцией активации f. Вектор вхо-
дов р обычно не включается в характеристики слоя.
33
Рис. 3.7. Функции активации
Практические задания
Задание 1. Для функции активации с жесткими ограниче-
ниями hardlim и её производной dhardlim, определяемыми сле-
дующими соотношениями:
⎧0, n < 0;
hardlim(n) = ⎨
⎩1, n ≥ 0;
⎧0, n < 0;
dhardlim(n) = ⎨
⎩0, n ≥ 0,
выполнить следующие действия:
1. Выдать на экран информацию об этих функциях с помощью
следующих команд:
name=hardlim(′name′) % – полное название функции;
dname=hardlim(′deriv′) % – название производной;
inrange=hardlim(′active′) % – диапазон входа;
outrange=hardlim(′output′) % – диапазон выхода;
n=-5:0,1:5;
a=hardlim(n);
da=dhardlim(n);
plot(n,a,′r′) % – график функции активации – красный;
hard on
34
plot (n,da,′c′) % – график производной – голубой;
35
Задание 4. Для положительной линейной функции активации
poslin и ее производной dposlin, определяемыми соотношениями
⎧0, n < 0;
рoslin = ⎨
⎩n, n ≥ 0;
⎧0, n < 0;
dposlin = ⎨
⎩1, n ≥ 0,
36
0, n < -1;
dsatlins(n) = 1, -1 ≤ n ≤ 1
0, n > 1,
выдать на экран информацию об этих функциях, построить их гра-
фики и рассчитать векторы выхода, воспользовавшись скриптом из
М-файла hardlimfile. Новый скрипт записать в файл под именем sat-
linsfile.
Задание 7. Для радиальной базисной функции активации radbas и
ее производной dradbas, определяемыми соотношениями
radbas = e-2n,
dradbas = -2ne-2n,
выдать на экран информацию об этих функциях, построить их гра-
фики и рассчитать векторы выхода, воспользовавшись скриптом из
М-файла hardlimfile. Новый скрипт записать в файл под именем
radbasfile.
0, n < -1;
dtribas(n) = 1, -1 ≤ n ≤0
-1, 0 < n ≤ 1
0, n > 1,
выдать на экран информацию об этих функциях, построить их гра-
фики и рассчитать векторы выхода, воспользовавшись скриптом из
М-файла hardlimfile. Новый скрипт записать в файл под именем tri-
basfile.
37
logsig(n) = 1 / (1 + e-n);
dlogsig(n) = e-n / (1 + e-n)2,
выдать на экран информацию об этих функциях, построить их
графики и рассчитать векторы выхода воспользовавшись скриптом
из М-файла hardlimfile. Новый скрипт записать в файл под именем
logsigfile.
38
subplot(2, 1, 1), % – подокна 2 × 1; вывод в 1-е;
bar(n), % – столбцовая диаграмма;
ylabet(‘n’) % – метка оси ординат;
subplot(2, 1, 2), bar(a), ylabet(‘a’) % – во 2-м подокне.
3. Рассмотренную последовательность команд оформить в виде
скрипта в М-файл с именем competlile.
39
Задание 16. Для нейрона с двумя непрерывными входами р1 и р2 и
функции активации hardlim построить график разделяющей линии,
определяемой уравнением
W11p1 + W12p2 + b = 0,
считая, что значения весовых коэффициентов W11 W12 и смещения b
заданы. Убедиться, что наборы входов р1 и р2 по разную сторону от
разделяющей линии принадлежат разным классам и что не всякое
множество наборов значений входов можно разделить на два класса,
используя нейрон рассмотренного типа.
40
Лабораторная работа № 4
Искусственные нейронные сети
Цель работы: изучение архитектуры искусственных нейронных
сетей, способов их графического изображения в виде функциональ-
ных и структурных схем и программного представления в виде объ-
ектов специального класса network, включающих массив структур с
атрибутами сети и набор необходимых методов для создания, ини-
циализации, обучения, моделирования и визуализации сети, а также
приобретение навыков построения сетей различной архитектуры с
помощью инструментального программного пакета Neural Network
Toolbox системы MATLAB.
Теоретические сведения
Хотя отдельные нейроны и способны после некоторой процедуры
обучения решать ряд задач искусственного интеллекта, все же для
эффективного решения сложных задач по распознаванию образов,
идентификации и классификации объектов, распознаванию и синтезу
речи, оптимальному управлению применяют достаточно большие
группы нейронов, образуя из них искусственные нейронные сети в
виде связанных между собой слоёв, напоминающие биологические
нейронные (нервные) сети человека и животных.
Существует множество способов организации искусственных
нейронных сетей, которые могут содержать различное число слоёв
нейронов. Нейроны могут быть связаны между собой как внутри от-
дельных слоёв, так и между слоями. В зависимости от направления
передачи сигнала эти связи могут быть прямыми или обратными.
Слой нейронов, непосредственно принимающий информацию из
внешней среды, называется входным слоем, а слой, передающий ин-
формацию во внешнею среду, – выходным слоем. Остальные слои,
если они имеются в сети, называются промежуточными, или скры-
тыми. В ряде случаев такого функционального распределения слоёв
сети не производится, так что входы и выходы могут присоединяться
к любым слоям и иметь произвольное число компонент.
41
Структура, или архитектура сети искусственных нейронов зависит
от той конкретной задачи, которую должна решать сеть. Она может
быть однослойной без обратных связей или с обратными связями,
двухслойной с прямыми связями, трехслойной с обратными связями
и т. д. Сети с обратными связями называют часто рекуррентными.
Описание архитектуры искусственной нейронной сети помимо
указания числа слоёв и связей между ними должно включать сведе-
ния о количестве нейронов в каждом слое, виде функций активации в
каждом слое, наличии смещений для каждого слоя, наличии компо-
нент входных, выходных и целевых векторов, а в ряде случаев и ха-
рактеристики топологии слоёв. Например, для аппроксимации любой
функции с конечным числом точек разрыва широко используется
сеть с прямой передачей сигналов. В этой сети имеется несколько
слоёв с сигмоидальными функциями активации. Выходной слой со-
держит нейроны с линейными функциями активации. Данная сеть не
имеет обратных связей, поэтому её называют сетью с прямой пере-
дачей сигналов (FF-net).
Графически искусственная нейронная сеть изображается в виде
функциональной или структурой схемы. На функциональной схеме
сети с помощью геометрических фигур изображаются её функцио-
нальные блоки, а стрелками показываются входы, выходы и связи. В
блоках и на стрелках указываются необходимые обозначения и па-
раметры.
Структурная схема сети изображается с помощью типового набо-
ра блоков, соединительных элементов и обозначений, принятых в
инструментальном программном пакете Neural Network Toolbox сис-
темы MATLAB и пакете имитационного моделирования Simulink той
же системы. Структурная схема сети может быть укрупнённой или
детальной, причём степень детализации определяется пользователем.
Системы обозначений блоков, элементов и параметров сети является
векторно-матричной, принятой в системе MATLAB. Если в обозна-
чении используется два индекса, то, как правило, первый индекс (ин-
декс строки) указывает адресата, или пункт назначения, а второй
индекс (индекс столбца) – источник структурной схемы сети. Струк-
турные схемы создаются системой автоматически с помощью коман-
ды gensim. Если элементом вектора или матрицы на структурной
42
схеме является сложный объект, то используются соответственно
ячейка и массив ячеек.
Программным представлением, или вычислительной моделью ис-
кусственной нейронный сети, является объект специального класса
network, который включает массив структур с атрибутами сети и на-
бор методов, необходимых для создания сети, а также для её ини-
циализации, обучения, моделирования и визуализации. Класс Net-
work имеет два общих конструктора, один из которых не имеет па-
раметров и обеспечивает создание массива структур с нулевыми зна-
чениями полей, а второй – имеет минимальный набор параметров
для создания модели нейронной сети, достраиваемой затем до нуж-
ной конфигурации с помощью операторов присваивания. Для созда-
ния нейронных сетей определённого вида используются специаль-
ные конструкторы.
Практические задания
Задание 1. Создать вычислительную модель нейронной сети с
двумя выходами, тремя слоями и одним целевым входом, используя
общий конструктор сети с параметрами
43
inputConnect=[1 1; 0 0; 0 0] – матрица связности для входов
размера numLayers * numImputs;
layerConnect=[0 0 0;1 0 0 0 ; 0 1 0] – матрица связности для сло-
ёв размера numLayers * numLayers;
outputConnect=[0 0 1] – матрица связности для выходов разме-
ра 1* numLayers;
targetConnect=[0 0 1] – матрица связности для целей размера 1 *
numLayers.
44
4. Проанализировать структурную схему построенной сети, вы-
полнив команду gensim(net) и детализируя блоки с помощью двой-
ного щелчка левой клавиши мыши по рассматриваемому блоку. На
структурных схемах искусственных нейронных сетей в пакете NNT
используются следующие обозначения:
а) Neural Network – искусственная нейронная сеть с обозначе-
ниями входов p{1}, p{2}, … и выхода y{1};
б) входы Input1 , или p{1} и Input2 , или p{2};
в) дисплей y{1};
г) Layer 1, Layer 2, Layer 3, … слои нейронов с обозначениями
входов p{1}, p{2], a{1}, a{2}, … и выходов a{1}, a{2}, a{3}, … , y{1};
д) TDL – линии задержки (Time Delay) с именами Delays1,
Delays2, ..., которые обеспечивают задержку входных сигналов или
сигналов между слоями нейронов на 1, 2, 3, … такта;
е) Weights – весовая матрица для входных сигналов или сигналов
между слоями нейронов; размер матрицы весов для каждого вектора
входа S×R, где S – число нейронов входного слоя, а R – число ком-
понент вектора входа, умноженное на число задержек; размер мат-
рицы для сигналов от слоя j к слою i равен S×R, где S – число нейро-
нов в слое i, а R – число нейронов в слое j, умноженное на число
задержек;
ж) dotprod – блок взвешивания входных сигналов и сигналов ме-
жду слоями, на выходе которого получается сумма взвешенных, т. е.
умноженных на соответствующие веса компонент сигнала;
з) mux – концентратор входных сигналов и сигналов между
слоями, преобразует набор скалярных сигналов в вектор, а набор
векторов в один вектор суммарной длины;
и) netsum – блок суммирования компонент для каждого нейрона
слоя: компонент от нескольких векторов входа с учётом задержек,
смещения и т. п.;
к) hardlim, purelin и т. д. – блоки функций активации;
л) pd{1, 1}, pd{1, 2}, ad{2, 1}, ... – сигналы после линий задержки
(d - delay);
45
м) iz{1, 1}, iz{1, 2}, lz{2, 1}, lz{3, 2} – вектор-сигналы с выхода
концентратора;
н) bias – блок весов смещений для слоя нейронов;
о) IW – массив ячеек с матрицами весов входов: IW{i, j} – матри-
цы для слоя i от входного вектора j;
п) LW – массив ячеек с матрицами весов для слоёв: LW{i, j} –
матрицы для слоя i от слоя j.
5. Проанализировать все параметры каждого блока структурной
схемы рассматриваемой нейронной сети и в случае необходимости
обратиться к справочной системе пакета NNT.
6. Задать нулевые последовательности сигналов для входов
P = [0 0 ; 0 0]
и произвести моделирование сети
A = sim(net, P).
7. Задать диапазоны входных сигналов и весовые матрицы с по-
мощью следующих присваиваний:
net.inputs{1}.range = [0 1];
net.inputs{2}.range = [0 1];
net.b{1} = - ¼;
net.IW{1, 1} = [0.5];
net.IW{1, 2} = [0.5];
net.LW{2, 1} = [0.5];
net.LW{3, 2} = [0.5].
Исполнить команду gensim(net) и проверить параметры блока.
8. Вывести на экран поля вычислительной модели и их содержи-
мое, используя функцию celldisp. Убедиться в правильности значе-
ний полей модели.
9. Промоделировать созданную статическую сеть, т. е. сеть без
линий задержки, используя групповое и последовательное представ-
ление входных сигналов
PG = [0.5 1 ; 1 0.5];
PS = {[0.5 1] [1 0.5]};
46
AG = sim(net, PG);
AS = sim(net, PS).
Убедиться, что для статической сети групповое и последователь-
ное представления входных сигналов дают один и тот же результат.
10. Дополнить архитектуру созданной нейронной сети линиями
задержки для входных сигналов и для сигналов между 2-м и 3-м
слоями, превратив таким образом статическую сеть в динамическую:
net.inputWeights{1, 1}.delays = [0 1];
net.inputWeights{1, 2}.delays = [0 1];
net.layerWeights{3, 2}.delays = [0 1 2].
Построить структурную схему динамической сети и выяснить
смысл используемых операторов присваивания.
11. Скорректировать весовые матрицы:
net.IW{1, 1} = [0.5 0.5];
net.IW{1, 2} = [0.5 0.25];
net.LW{3, 2} = [0.5 0.25 1].
12. Промоделировать динамическую сеть, используя групповое и
последовательное представление входных сигналов:
AG = sim(net, PG);
AS = sim(net, PS).
Убедиться, что групповое представление входных сигналов иска-
жает результат, так как в этом случае работа одной сети заменяется
параллельной работой двух (по числу последовательностей) одина-
ковых сетей с нулевыми начальными значениями сигналов на выхо-
дах линий задержки.
13. Вывести на печать поля вычислительной модели и их содер-
жимое, используя функцию celldisp.
14. Сохранить содержимое командного окна в М-файле для по-
следующего использования.
47
операторов присваивания. Убедиться в идентичности сетей net и as-
gnet. Сравнить результаты работы полученных сетей.
Задание 3. Используя блоки имитационного моделирования инст-
рументального пакета Simulink системы MATLAB, построить модель
динамической сети asgnet, провести исследование модели, проверить
адекватность её поведения поведению модели net и оформить элек-
тронный отчёт с помощью генератора Report Generator.
48
Лабораторная работа № 5
Теоретические сведения
После того как сформирована архитектура нейронной сети, долж-
ны быть заданы начальные значения весов и смещений, или иными
словами, сеть должна быть инициализирована. Такая процедура вы-
полняется с помощью метода init для объектов класса network. Опе-
ратор вызова этого метода имеет вид:
net = init (net).
Перед вызовом этого метода в вычислительной модели сети необ-
ходимо задать следующие свойства:
net.initFcn – для определения функций, которые будут использо-
ваться для задания начальных матриц весов и весов слоёв, а также
начальных векторов смещений;
net.layers {i}. initFcn – для задания функции инициализации i-го
слоя;
net.biases{i}.initFcn – для задания начального вектора смещения
i-го слоя;
net.inputWeights{i,j}.initFcn – для задания функции вычисления
матрицы весов к слою i от входа j;
net.layerWeight{i,j}.initFcn – для задания функции вычисления
матрицы весов к слою i от входа j;
net.initParam – для задания параметров функций инициализации.
Способ инициализации сети определяется заданием свойств и
net.initFcn net.layers{i}.initFcn. Для сетей с прямой передачей сиг-
49
налов по умолчанию используется net.initFcn = ‘initlay’, что разре-
шает для каждого слоя использовать собственные функции инициа-
лизации, задаваемые свойством net.layers{i}.initFcn с двумя возмож-
ными значениями: ‘initwb’ и ’initnw’.
Функция initwb позволяет использовать собственные функции
инициализации для каждой матрицы весов и для каждого вектора
смещений, при этом возможными значениями для свойств
net.inputWeights{i,j}.initFcn и net.layerWeight{i,j}.initFcn являются:
‘initzero’, ‘midpoint’, ’randnc’, ’rands’, а для свойства
net.biases{i}.initFcn – значения ‘initcon’, ‘initzero и ‘rands’. Для
сетей без обратных связей с линейными функциями активации
веса обычно инициализируются случайными значениями из интерва-
ла [-1 1].
Функция initnw реализуют алгоритм Nguyen-Widrow и применя-
ется для слоёв, использующих сигмоидальные функции активации.
Эта функция генерирует начальные веса и смещения для слоя так,
чтобы активные области нейронов были распределены равномерно
относительно области входов, что обеспечивает минимизацию числа
нейронов сети и время обучения.
Другими возможными значениями свойства net.initFcn являются:
‘initcon’, ‘initnw’, ‘initwb’ и ‘initzero’.
Помимо функции initnw следующие функции производят непо-
средственную инициализацию весов и смещений:
initzero присваивает матрицам весов и векторам смещений нуле-
вые значения;
rands присваивает матрицам весов и векторам смещений случай-
ные значения из диапазона [-1 1];
randnr присваивает матрице весов случайные нормированные
строки из диапазона [-1 1];
randnc присваивает матрице весов случайные нормированные
столбцы из диапазона [-1 1];
midpoint присваивает элементам вектора смещения начальные
равные смещения, зависящие от числа нейронов в слое, и использу-
ется вместе с функцией настройки learncon.
50
Таким образом, задание функций инициализации для вычисли-
тельной модели нейронной сети является многоступенчатым и вы-
полняется по следующему алгоритму:
1. Выбрать для свойства net.initFcn одно из возможных значе-
ний: ‘initzero’, ‘initcon’, ‘initnw’, ‘initwb’ или ‘initlay’.
2. Если выбраны значения ‘initzero’, ‘initcon’ или ‘initnw’, то за-
дание функций инициализации сети завершено.
3. Если выбрано значение ‘initwb’, то переход к шагу 6.
4. Если выбрано значение ‘initlay’, то переходим к слоям и для
каждого слоя i свойству net.layers{i}.initFcn необходимо задать одно
из возможных значений: ‘initnw’ или ‘initwb’.
5. Если для i-го слоя выбрано значение ‘initnw’, то для этого слоя
задание функций инициализации завершено.
6. Если для всех слоев сети или для какого-то слоя установлено
свойство ‘initwb’, то для этих слоёв необходимо задать свойства
net.biases{i}.initFcn, выбрав его из набора: ‘initzero’, ‘rands’ или
‘initcon’, а также свойства net.layerWeights{i,j}.initFcn, используя
следующие значения: ‘initzero’, ‘midpoint’, ‘randnc’, ‘randnr’ или
‘rands’.
Заметим, что с помощью оператора revert(net) можно возвратить
значения весов и смещений к ранее установленным значениям.
После инициализации нейронной сети её необходимо обучить
решению конкретной прикладной задачи. Для этих целей нужно со-
брать обучающий набор данных, содержащий интересующие при-
знаки изучаемого объекта, используя имеющийся опыт. Сначала сле-
дует включить все признаки, которые, по мнению аналитиков и экс-
пертов, являются существенными; на последующих этапах это мно-
жество, вероятно, будет сокращено. Обычно для этих целей исполь-
зуются эвристические правила, которые устанавливают связь между
количеством необходимых наблюдений и размером сети. Обычно
количество наблюдений на порядок больше числа связей в сети и
возрастает по нелинейному закону, так что уже при довольно не-
большом числе признаков, например 50, может потребоваться ог-
ромное число наблюдений. Эта проблема носит название "проклятие
51
размерности". Для большинства реальных задач бывает достаточно
нескольких сотен или тысяч наблюдений.
После того как собран обучающий набор данных для проектируе-
мой сети, производится автоматическая настройка весов и смещений
с помощью процедур обучения, которые минимизируют разность
между желаемым сигналом и полученным на выходе в результате
моделирования сети. Эта разность носит название "ошибки обуче-
ния". Используя ошибки обучения для всех имеющихся наблюдений,
можно сформировать функцию ошибок или критерий качества обу-
чения. Чаще всего в качестве такого критерия используется сумма
квадратов ошибок. Для линейных сетей при этом удаётся найти аб-
солютный минимум критерия качества, для других сетей достижение
такого минимума не гарантируется. Это объясняется тем, что для ли-
нейной сети критерий качества, как функция весов и смещения, яв-
ляется параболоидом, а для других сетей – очень сложной поверхно-
стью в N+1-мерном пространстве, где N – число весовых коэффици-
ентов и смещений.
С учётом специфики нейронных сетей для них разработаны спе-
циальные алгоритмы обучения. Алгоритмы действуют итеративно,
по шагам. Величина шага определяет скорость обучения и регулиру-
ется параметром скорости настройки. При большом шаге имеется
большая вероятность пропуска абсолютного минимума, при малом
шаге может сильно возрасти время обучения. Шаги алгоритма при-
нято называть эпохами или циклами.
На каждом цикле на вход сети последовательно подаются все
обучающие наблюдения, выходные значения сравниваются с целе-
выми значениями и вычисляется функция критерия качества обуче-
ния – функция ошибки. Значения функции ошибки, а также её гради-
ента используются для корректировки весов и смещений, после чего
все действия повторяются. Процесс обучения прекращается по сле-
дующим трём причинам, если:
а) реализовано заданное количество циклов;
б) ошибка достигла заданной величины;
в) ошибка достигла некоторого значения и перестала уменьшать-
ся.
52
Во всех этих случаях сеть минимизировала ошибку на некотором
ограниченном обучающем множестве, а не на множестве реальных
входных сигналов при работе модели. Попытки усложнить модель и
снизить ошибку на заданном обучающем множестве могут привести
к обратному эффекту, когда для реальных данных ошибка становится
ещё больше. Эта ситуация называется явлением переобучения ней-
ронной сети.
Для того чтобы выявить эффект переобучения нейронной сети,
используется механизм контрольной проверки. С этой целью часть
обучающих наблюдений резервируется как контрольные наблюдения
и не используется при обучении сети. По мере обучения контроль-
ные наблюдения применяются для независимого контроля результа-
та. Если на некотором этапе ошибка на контрольном множестве пе-
рестала убывать, обучение следует прекратить даже в том случае,
когда ошибка на обучающем множестве продолжает уменьшаться,
чтобы избежать явления переобучения. В этом случае следует
уменьшить количество нейронов или слоёв, так как сеть является
слишком мощной для решения данной задачи. Если же, наоборот,
сеть имеет недостаточную мощность, чтобы воспроизвести зависи-
мость, то явление переобучения скорее всего наблюдаться не будет и
обе ошибки – обучения и контроля – не достигнут требуемого уровня.
Таким образом, для отыскания глобального минимума ошибки
приходится экспериментировать с большим числом сетей различной
конфигурации, обучая каждую из них несколько раз и сравнивая по-
лученные результаты. Главным критерием выбора в этих случаях
является контрольная погрешность. При этом применяется правило,
согласно которому из двух нейронных сетей с приблизительно рав-
ными контрольными погрешностями следует выбирать ту, которая
проще.
Необходимость многократных экспериментов ведёт к тому, что
контрольное множество начинает играть ключевую роль в выборе
нейронной сети, т. е. участвует в процессе обучения. Тем самым его
роль как независимого критерия качества модели ослабляется, по-
скольку при большом числе экспериментов возникает риск переобу-
чения нейронной сети на контрольном множестве. Для того, чтобы
гарантировать надёжность выбираемой модели сети, резервируют
53
ещё тестовое множество наблюдений. Итоговая модель тестируется
на данных из этого множества, чтобы убедиться, что результаты,
достигнутые на обучающем и контрольном множествах, реальны.
При этом тестовое множество должно использоваться только один
раз, иначе оно превратится в контрольное множество.
Итак, процедура построения нейронной сети состоит из следую-
щих шагов:
1. Выбрать начальную конфигурацию сети в виде одного слоя с
числом нейронов, равным половине общего количества входов и вы-
ходов.
2. Обучить сеть и проверить ее на контрольном множестве, доба-
вив в случае необходимости дополнительные нейроны и промежу-
точные слои.
3. Проверить, не переобучена ли сеть. Если имеет место эффект
переобучения, то произвести реконфигурацию сети.
Для того чтобы проектируемая сеть успешно решала задачу, не-
обходимо обеспечить представительность обучающего, контрольно-
го и тестового множества. По крайней мере, лучше всего постараться
сделать так, чтобы наблюдения различных типов были представлены
равномерно. Хорошо спроектированная сеть должна обладать свой-
ством обобщения, когда она, будучи обученной на некотором мно-
жестве данных, приобретает способность выдавать правильные ре-
зультаты для достаточно широкого класса данных, в том числе и не
представленных при обучении.
Другой подход к процедуре обучения сети можно сформулиро-
вать, если рассматривать её как процесс, обратный моделированию.
В этом случае требуется подобрать такие значения весов и смеще-
ний, которые обеспечивали бы нужное соответствие между входами
и желаемыми значениями на выходе. Такая процедура обучения но-
сит название процедуры адаптации и достаточно широко применяет-
ся для настройки параметров нейронных сетей.
По умолчанию для сетей с прямой передачей сигналов в качестве
критерия обучения используется функционал, представляющий со-
бой сумму квадратов ошибок между выходами сети и их целевыми
значениями:
54
1 Q S q
J= ∑∑
2 q =1 i =1
(ti − d iq ) 2 ,
55
Если используется сопряжённый градиент функционала, то на
первой итерации направление движения p0 выбирают против гради-
ента g 0 этой итерации:
p0 = g 0 .
Для следующих итераций направление pk выбирают как линей-
ную комбинацию векторов g k и pk −1 :
pk = − g k + β k pk −1 ,
а вектор параметров рассчитывают по формуле:
X k +1 = X k + α k pk ,
Для методов второго порядка расчет параметров на k-м шаге про-
изводят по формуле (метод Ньютона):
X k +1 = X k − H k−1 g k ,
где Hk – матрица вторых частных производных целевой функции
(матрица Тессе); gk – вектор градиента на k-й итерации. Вычисление
матрицы Тессе требует больших затрат машинного времени, поэтому
её заменяют приближенными выражениями (квазиньютоновские ал-
горитмы).
Градиентными алгоритмами обучения являются:
GD – алгоритм градиентного спуска;
GDM – алгоритм градиентного спуска с возмущением;
GDA – алгоритм градиентного спуска с выбором параметра ско-
рости настройки;
Rprop – пороговый алгоритм обратного распространения ошибки;
GDX – алгоритм градиентного спуска с возмущением и адаптаци-
ей параметра скорости настройки.
Алгоритмами, основанными на использовании метода сопряжен-
ных градиентов, являются:
CGF – алгоритм Флетчера–Ривса;
CGP – алгоритм Полака–Ребейры;
CGB – алгоритм Биеле–Пауэлла;
56
SCG – алгоритм Молера.
Квазиньютоновскими алгоритмами являются:
DFGS – алгоритм Бройдена, Флетчера, Гольдфарба и Шанно;
OSS – одношаговый алгоритм метода секущих плоскостей (алго-
ритм Баттини);
LM – алгоритм Левенберга–Марквардта;
BR – алгоритм Левенберга–Марквардта с регуляризацией по Байесу.
В процессе работы алгоритмов минимизации функционала ошиб-
ки часто возникает задача одномерного поиска минимума вдоль за-
данного направления. Для этих целей используется метод золотого
сечения GOL, алгоритм Брента BRE, метод половинного деления и
кубической интерполяции HYB, алгоритм Чараламбуса CHA и алго-
ритм перебора с возвратом BAC.
Практические задания
Задание 1. Адаптировать параметры однослойной статической
линейной сети с двумя входами для аппроксимации линейной зави-
симости вида t = 2 p1 + p2 , выполнив следующие действия:
1. С помощью конструктора линейного слоя
net = newlin(PR, s, id, lr),
где PR – массив размера Rx2 минимальных и максимальных значе-
ний для R векторов входа; s – число нейронов в слое; id – описание
линий задержек на входе слоя; lr – параметр скорости настройки,
сформировать линейную сеть:
net = newlin([-1 1; -1 1], 1, 0, 0).
2. Подготовить обучающие последовательности в виде массивов
ячеек, используя зависимости t = 2 p1 + p2 и четыре пары значений
p1 и p2 (произвольные):
P = {[-1; 1] [-1/3; 1/4] [1/2; 0] [1/6; 2/3]};
T = { -1 -5/12 1 1 }.
3. Для группировки представления обучающей последовательно-
сти преобразовать массивы ячеек в массивы чисел:
57
P1 = [P{:}], T1 = [T{:}].
4. Выполнить команды net и gensim(net), проанализировать поля
вычислительной модели и структурную схему сети и записать в тет-
радь значения полей, определяющих процесс настройки параметров
сети (весов и смещений):
net.initFcn – функция для задания начальных матриц весов и век-
торов смещений;
net.initParam – набор параметров для функции initFcn, ко-
торые можно определить с помощью команды help(net.initFcn), где
initFcn – заданная функция инициализации: initcon, initlay, initnw,
initnwb, initzero;
net.adaptFcn – функция адаптации нейронной сети, используемая
при вызове метода adapt класса network: adaptwb или trains;
net.adaptParam – параметры функции адаптации, определяемые с
помощью команды help(net.adaptFcn);
net.trainFcn – функция обучения нейронной сети, используемая
при вызове метода train класса network: trainb, trainbfg, traingbr,
trainc, traincgb, traincgt, traincgp, trainngd, traingda, traingdm,
traingdx, trainlm, trainoss, trainr, trainrp, trainscg;
net.trainParam – параметры функции обучения, определяемые с
помощью команды help(net.trainFcn);
net.performFcn – функция оценки качества обучения, используе-
мая при вызове метода train: mae, mse, msereg, sse;
net.performParam – параметры функции оценки качества обуче-
ния, определяемые с помощью команды help(net.performFcn);
net.layers{1}.initFcn – функция инициализации параметров слоя:
initnw, initwb;
net.layers{1}.transferFcn – функция активации, которая для
линейного слоя должна быть purelin;
net.layers{1}.netInputFcn – функция накопления для слоя:
netprod, netsum;
net.biases{1}.initFcn – функция инициализации вектора смеще-
ний: initcon, initzero, rands;
58
net.biases{1}.lean – индикатор настройки: 0 – с помощью метода
adapt, 1 – с помощью метода train;
net.biases{1}.learnFcn – функция настройки вектора смещений:
learncon, learngd, learngdm, learnnp, learnwh;
net.biases{1}.learnParam – параметры функции настройки, опре-
деляемые с помощью команды help.(net.biases{1}.learnFcn);
net.inputWeights{1, 1}.initFcn – функция инициализации весов
входа: initzero, midpoint, randnc, randnr, rands;
net.inputWeights{1,1}.learn – индикатор настройки: 0 – с помо-
щью метода adapt, 1 – с помощью метода train;
net.inputWeights{1,1}.learnFcn – функция настройки весов:
learngd, learngdm, learnhd, learnis, learnk, learnlv1, learnlv2,
learnos, learnnp, learnpn, learnsom, learnnwh;
net.inputWeights{1,1}.learnParam – параметры функции настрой-
ки, определяемые с помощью команды help(net.inputWeights {1,1}.
learnParam);
net.inputWeights{1,1}.weightFcn – функция для вычисления
взвешенных входов для слоя: dist, dotprod, mandist,negdist, norm-
prod;
для многослойных сетей параметры net.inputWeights{i,j}, связан-
ные с обучением такие, как initFcn, learn, learnFcn, learnParam,
weightFcn, имеют тот же смысл и могут принимать такие же значе-
ния, что и соответствующие параметры для net.inputWeights{1,1}.
5. Выполнить один цикл адаптации сети с нулевым параметром
скорости настройки:
59
net.IW{1} = [0 0];
net.b{1} = 0;
net.inputWeights{1,1}.learnParm.lr = 0.2;
net.biases{1}.learnParam.lr =0.
for i = 1:30,
[net, a{i}, e{i}] = adapt(net, P, T);
W(i, :) = net.IW{1,1};
end;
cell2mat(a{30}) % – значения выхода на последнем цикле;
cell2mat(e{30}) % – значение ошибки на последнем цикле;
W(30, :) % – веса после 30 циклов;
mse(cell2mat(e{30}) % – функция ошибок: 0.0017176.
60
subplot(3,1,1)
for i = 1:1:30, plot(i, cell2mat(a{i}), ′k′),
hold on
end;
xlabel(′′), ylabel(′Выходы a(i)′)
grid
subplot(3,1,2)
plot(0:30, [[0 0]; W], ′k′)
xlabel(′′), ylabel(′Веса входов W(i) ′)
grid
subplot(3,1,3)
for i = 1:30, E(i) = mse(e{i}); end
semilogy(1:30, E, ′+k′)
xlabel(′Циклы′), ylabel(′Ошибка′), grid
61
W(i, :) = net .IW{1,1};
EE = mse(e{i});
ee(i) = EE;
i = i + 1;
end;
W(63, :)
cell2mat(a{63})
EE = mse(e{63})
mse(e{1})
subplot(3,1,1)
for i = 1:1:63, plot(i, cell2mat(a{i}), ′k′),
hold on
end;
xlabel(′′), ylabel(′Выходы a(i′′), grid
subplot(3,1,2)
plot(0:63, [[0 0]; W], ′k′)
xlabel(′′), ylabel(′Веса входов W(i)′), grid
subplot(3,1,3)
semilogy(1:63, ee, ′+k′)
xlabel(′Циклы′), ylabel(′Ошибка′), grid
62
рекурентного соотношения y (t ) = 2 p(t ) + p(t − 1) , выполнив сле-
дующие действия:
1. Так как для динамических сетей групповой способ представле-
ния обучающего множества не используется, подготовить данные
для последовательной адаптации в виде массивов ячеек значений
входа и цели:
63
subplot(3,1,2)
plot(0:22,[[0 0]; W], ′k′)
xlabel(′′), ylabel(‘Веса входов W(i)′), grid
subplot(3,1,3)
semilogy(1:22, ee, ′+k′)
xlabel(′Циклы ′), ylabel(′Ошибка′)grid
Задание 3. Обучить нейронную сеть, для которой модель и зави-
симость выхода от входов приведены в задании 1, выполнив коман-
ды и используя последовательный и групповой способы представле-
ния обучающей последовательности:
а) для последовательного способа:
64
EE = mse(y-T) % – та же ошибка 1.3817*e-003
65
2. Настроить параметры сети для инициализации с помощью ал-
горитма Нгуена–Видроу для обеспечения возможности использова-
ния метода обратного распространения:
net5.initFcn = ′initlay′; % – для сети;
net5.layers{1}.initFcn = ′initnw′; % – для 1-го слоя;
net5.layers{2}.initFcn = ′initnw′; % – для 2-го слоя;
net5.layers{3}.initFcn = ′initnw′; % – для 3-го слоя.
3. Проинициализировать сеть для её последующего обучения ме-
тодом обратного распространения ошибки:
net5 = init(net5);
net5.IW{1, 1} % – матрица весов для 1-го входа;
net5.IW{1, 2} % – матрица весов для 2-го входа;
net5.LW{2, 1} % – матрица весов для 2-го слоя;
net5.LW{3, 2} % – матрица весов для 3-го слоя;
net5.b{1} % – матрица смещения для 1-го слоя;
net5.b{2} % – матрица смещения для 2-го слоя;
net5.b{3} % – матрица смещения для 3-го слоя.
4. Промоделировать сеть с начальными значениями весов и сме-
щений:
P = [0.5 1 ; 1 0.5]; % – значения входных векторов;
Y = sim(net5) % – моделирование сети.
66
net6.layers{1}.initFcn = ′initnw′;
net6.layers{2}.initFcn = ′initnw′;
net6.layers{3}.initFcn = ′initnw′;
net6.inputWeights{1 ,1}.initFcn = ′initzero′;
net6.inputWeights{1 ,2}.initFcn = ′initzero′;
net6.layerWeights{2 ,1}.initFcn = ′initzero′;
net6.layerWeights{3 ,2}.initFcn = ′initzero′;
net6.biases{1}.initFcn = ′initzero′;
net6.biases{2}.initFcn = ′initzero′;
net6.biases{3}.initFcn = ′initzero′;
net6.init(net6); % – инициализация сети.
3. Выдать на экран матрицы весов и смещения, используя коман-
ды 3-го пункта 5-го задания.
4. Промоделировать сеть и возвратить её к исходным значениям
весов и смещений:
Ynet6 = sim(net6);
net6 = revert(net6).
67
ним нейроном во втором слое, настроить сеть для обучения с исполь-
зованием алгоритма градиентного спуска GD, обучить эту сеть и пу-
тём её моделирования оценить качество обучения. Порядок выпол-
нения задания следующий:
1. Создать нейронную сеть с прямой передачей сигнала:
info = traingd(′pdefaults′)
info =
68
epochs: 100 % – максимальное количество циклов
обучения;
show: 25 % – интервал вывода данных;
goal: 0 % – предельное значение критерия обучения;
time: Inf % – максимальное время обучения;
69
net8.trainParam.epochs = 500;
net8.trainParam.90al = 0.01;
[net8, TR] = train(net8, P, T);
TR % – характеристики процедуры обучения.
6. Произвести моделирование сети и оценить качество ее обуче-
ния:
3. Настроить сеть:
net10.trainParam.epochs = 50;
net10.trainParam.show = 10; % для отображения.
70
net10 = train(net, P, T);
Y = sim(net, P);
plot(P, Y, P, T, ‘+’) % – два графика.
5. Изменяя количество нейронов в первом слое, исследовать ка-
чество аппроксимации.
Задание 11. Создать сеть и произвести ее последовательную адап-
тацию, выполнив следующие команды:
71
вступительные экзамены по математике, физике и русскому языку.
Правила приема таковы:
1. Проходной балл для абитуриентов, не имеющих льгот, должен
быть равен 11;
2. Удовлетворительные оценки по математике и физике для этой
категории абитуриентов недопустимы;
3. Абитуриенты, имеющие льготы, зачисляются при любых по-
ложительных оценках по всем трем предметам.
Для обучения сети следует использовать все изученные методы
адаптации и обучения и провести анализ их эффективности. Следует
также определить минимальное количество слоев и нейронов, обес-
печивающее удовлетворительное решение поставленной задачи. Для
формирования обучающего, контрольного и тестового множества
построить дискретную имитационную модель, используя инструмен-
тальный пакет Simulink.
72
Лабораторная работа № 6
Теоретические сведения
Персептрон – это однослойная нейронная сеть с 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.
73
работки каждой пары входных и выходных значений (обучение с
учителем). Применение функции adapt гарантирует, что любая зада-
ча классификации с линейно отделимыми векторами будет решена за
конечное число циклов настройки. Функция обучения train, когда
настройка параметров сети выполняется не после каждого прохода, а
в результате всех проходов обучающего множества, в ряде случаев
не обеспечивает сходимости процесса настройки, поэтому не исполь-
зуется для обучения персептрона.
Настройка весов и смещений, реализуемая функциями learnp и
learnpn, производится по следующим правилам:
а) для входных сигналов вычисляются выходные;
б) определяются ошибки как разность между целевым выходом и
соответствующим выходным сигналом;
в) производится корректирование весов и смещений путем сло-
жения старых значений с приращениями, каждое из которых равно
произведению соответствующего сигнала на ошибку того нейрона,
для которого корректируется параметр.
Для того, чтобы сделать время обучения нечувствительным к
большим или малым выбросам векторов входа, производят нормиро-
вание входных данных при вычислении приращений весов и смеще-
ний:
pni = pi (sqrt(1+ p12 +…+ pr2)).
Такое нормирование обеспечивается применением функции
learnp для настройки как весов, так и смещений. Также автоматиче-
ски свойству net.adaptFcn задается значение adaptwb, что позволяет
использовать любые функции для настройки весов и смещений, а
свойству net.adaptParam – набор параметров по умолчанию.
Адаптация персептрона производится функцией-методом
adapt(net,P,T), где P – входные векторы; T – целевые значения.
Процесс адаптации продолжается до тех пор, пока не будет достиг-
нуто требуемое значение критерия качества обучения в виде средней
абсолютной ошибки, вычисляемой функцией mae.
74
Практические задания
Задание 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) % – моделирование сети;
75
а затем с помощью моделирования определить классы значений
входного вектора, выполнив следующие действия:
1. Создать персептрон:
net = newp([-2 2; -2 2], 1).
1. Создать персептрон:
net = newp([0 1;0 1], 1).
76
p1=cat(2, p{:});
T1=num2cell(p1(1,:) & p1(2,:)) % – функция AND;
T2=num2cell(p1(1,:) | p1(2,:)) % – функция OR.
77
Задание 5. Создать, обучить и апробировать персептрон для при-
нятия решения о зачислении в высшее учебное заведение абитуриен-
тов, сдавших вступительные экзамены.
78
Лабораторная работа № 7
Теоретические сведения
Линейная сеть – это один слой из S нейронов и R входов, каждый
из которых может состоять из нескольких элементов. Передаточной
функцией каждого нейрона слоя является линейная функция purelin.
Это является единственным отличием линейной сети от персептрона.
Благодаря линейной передаточной функции каждый выход сети мо-
жет принимать любое значение, в то время как выход персептрона
ограничен значениями 1 и 0.
Линейные сети, как и персептроны, способны решать только ли-
нейно отделимые задачи классификации, однако в них используется
правило обучения по методу Вудроу–Хоффа, основанное на исполь-
зовании функции наименьших квадратов, которое является более
мощным, чем правило обучения персептрона.
Помимо основных входов нейроны линейной сети имеют вход для
постоянного смещения, равного единице. Элементы входов и смеще-
ния взвешиваются с помощью функции скалярного произведения
dotprod и суммируются с помощью функции накопления netsum.
Линейная нейронная сеть может быть создана одним из следую-
щих способов:
net=newlin(PR, S, id, lr),
79
net=newlin(PR, S, 0, P),
net=newlind(P, T),
где PR – массив размера R*2 минимальных и максимальных значе-
ний для R векторов входа;
S – число нейронов;
id – описание линии задержки на входе сети, по умолчанию [0];
lr – параметр скорости настройки, по умолчанию 0,01;
P – обучающие последовательности входов размера R*Q, причем
Q – количество последовательностей;
Т – последовательность целей для Р размера S*Q;
0 – нуль. .
Первый способ применяется, когда в сеть включаются задержки,
т. е. для создания динамических адаптивных линейных нейронных
сетей ADALIN (ADApture Linear Neuron networks), которые по-
зволяют корректировать веса и смещения при поступлении на вход
каждого элемента обучающего множества. Такие сети широко при-
меняются при решении задач обработки сигналов и в системах
управления.
Второй способ формирует линейный слой с параметром скорости
настройки, гарантирующим максимальную степень устойчивости для
данного входа Р. В этом случае линии задержки не используются и
сеть является статической.
Для первого и второго способа инициализация сети проводится
при ее создании с помощью функции initzero. Адаптация и обучение
сети затем осуществляется с помощью функции adaptwb, которая
модифицирует веса и смещения, используя функцию Видроу – Хоф-
фа hearnwh до тех пор, пока не будет достигнуто требуемое значе-
ние критерия качества обучения в виде средней квадратичной ошиб-
ки, вычисляемой функцией mse.
Третий способ формирует и настраивает линейную статическую
сеть, решая систему линейных алгебраических уравнений на основе
метода наименьших квадратов. Он используется для подбора коэф-
фициентов аппроксимирующей функции и для идентификации пара-
80
метров динамических систем в задачах управления. Матричная за-
пись решаемой системы линейных алгебраических уравнений такова:
[W b]*[P;ones]=T,
при этом должно выполняться условие
S*R + S = Q.
Функция learnwh вычисляет приращение весов входов и смеще-
ний по следующим векторным формулам:
pn = p/(sqrt(1+P(1)^2)+… +P(R)^2);
dW = lr*e*pn;
db = lr*e.
Практические задания
Задание 1. Выполнить задания с 1-го по 5-е лабораторной рабо-
ты № 6 и для линейной нейронной сети с таким же числом нейронов
и входов, что и у соответствующего персептрона, заменив функцию
newp функцией newlin, оставляя параметры неизменными и исполь-
зуя значения параметров id и lr по умолчанию, т. е. [0] и 0,01 соот-
ветственно.
81
Р = [1 -1.2];
T = [0.5 1];
net = newlind(P,T);
Y = sim(net, P) % – 0.5 и 1;
net.IW{1,1} % – -0.22727;
net.b{1} % – 0.72727;
w_rangle = -1: 0.1: 0 % – диапазон весов;
b_ rangle = 0.5: 0.1: 1 % – диапазон смещений;
ES = errsulf(P, T, w_ rangle, b_ rangle, 'purelin');
contour(w_ rangle, b_ rangle, ES, 20) % – 20 уровней;
hold on
plot(-2.2727e – 001, 7.2727e – 001, 'x') % –точка
hold off % – знаком 'x' отмечены оптимальные значения
веса и % смещения.
82
ES = errsulf(P, T, w_rangle, b_rangle, 'purelin').
83
net.IW{1, 1}, net.b{1} % - [-0.22893] [0.70519];
net.trainParam.goal = 0.00001; % – второе значение
[net, tr] = train(net, P, T);
net.IW{1, 1}, net.b{1} % – [-0.22785] [0.72495]
Задание 4. Сформировать линейную сеть с одним нейроном, од-
ним входом, принимающим значения из диапазона [-1, 1], и линией
задержки типа [0 1 2] для воспроизведения заданного отклика неко-
торой системы, выполнив следующие действия:
84
net = train(net, P3, T3);
net.IW{1, 1}, net.b{1} % – [0.9242] [0.9869] [0.0339] [0.0602]
Y3 = sim(net, P3) % – дискретная модель:
% Yk = 0.9242rk+0.9869 rk-1+0.0339 rk-2+0.0602.
5. Построить графики отклика Т3 и приближений Y1 и Y3:
plot(0:0,01:20, T3, 'G'), hold on % – зеленый;
plot(0:0,01:20, Y1, 'B'), hold on % – синий;
plot(0:0,01:20, Y3, 'R'), hold off % – красный.
85
Задание 7. Сформировать линейную сеть из одного нейрона, од-
ного входа и одного выхода для цифровой фильтрации сигнала, вы-
полнив следующие действия:
86
sys = ss(tf(1, [1 1 1])); % – колебательное звено
time = 0:0.2:10; % – интервал процесса
[Y, time] = step(sys, 0:0.2:10).
4. Настроить сеть:
pi = {0 0} % – начальные значения для задержек;
net.adaptParam.passes = 5;
[net, Y, E, Pf, Af] = adapt(net, P, T, pi);
Y1 = cat(1, Y{:}) % – массив ячеек в массив чисел.
5. Построить графики:
plot(time, Y1, 'b:', time, P, 'r-', …
xlabel('Время, c'), ylabel('Процессы'))
title('Обучение нейронной сети').
87
title('Моделирование нейронной сети').
88
Лабораторная работа № 8
89
Для нейронов выходного слоя функцией взвешивания является
скалярное произведение dotprod, а функцией накопления – функция
суммирования взвешенных входов и взвешенного смещения netsum.
Для того чтобы понять поведение радиальной базисной сети об-
щего вида, необходимо проследить прохождение вектора входа p.
При задании значений элементам вектора входа каждый нейрон
входного слоя выдает значение в соответствии с тем, как близок век-
тор входа к вектору весов каждого нейрона. Таким образом, нейроны
с векторами весов, значительно отличающимися с вектором входа p,
будут иметь выходы, близкие к 0, и их влияние на выходы линейных
нейронов выходного слоя будет незначительное. Напротив, входной
нейрон, веса которого близки к вектору p, выдаст значение, близкое
к единице.
Для построения радиальных базисных сетей общего вида и авто-
матической настройки весов и смещений используются две функции
newrbe и newrb. Первая позволяет построить радиальную базисную
сеть с нулевой ошибкой, вторая позволяет управлять количеством
нейронов входного слоя. Эти функции имеют следующие параметры:
90
щейся функции потребуется большое количество нейронов: слишком
малое значение параметра SPREAD потребует большего количества
нейронов для аппроксимации гладкой функции. Обычно параметр
влияния SPREAD выбирается большим, чем шаг разбиения интерва-
ла задания обучающей последовательности, но меньшим размера са-
мого интервала.
Функция newrbe устанавливает веса первого слоя равным P′, а
смещения – равными 0.8326/ SPREAD, в результате радиальная ба-
зисная функция пересекает значение 0.5 при значениях евклидового
расстояния ±SPREAD. Веса второго слоя LW{2,1} и смещения b{2}
определяются путем моделирования выходов первого слоя A{1} и
последующего решения системы линейных уравнений:
Практические задания
Задание 1. Создать радиальную базисную сеть с нулевой ошибкой
для обучающей последовательности P = 0:3 и T = [0.0 2.0 4.1 5.9],
проанализировать структурную схему построенной сети и значения
параметров ее вычислительной модели, выполнив следующие дейст-
вия:
1. Создать радиальную базисную сеть с нулевой ошибкой:
P = 0:3;
T = [0.0 2.0 4.1 5.9];
net = newrbe(P, T);
91
gensim(net);
92
plot(P1, Y, ′*k′, ′MarkerSize′, 10, ′LineWidth′, 2)
93
plot(P, V, ′*b′, ′MarkerSize′, 10, ′LineWidth′, 2).
94
Лабораторная работа № 9
Теоретические сведения
Радиальная базисная сеть типа GRNN(Generalized Regression
Neural Network), или обобщенная регрессионная сеть имеет архи-
тектуру, аналогичную архитектуре радиальной базисной сети общего
вида, и отличается от нее структурой второго слоя, в котором ис-
пользуется блок normprod для вычисления нормированного скаляр-
ного произведения строки массива весов LW{2,1} и вектора выхода
первого слоя а{1} в соответствии со следующим соотношением:
n{2} = LW{2,1} * a{1}/sum(a{1}).
В общем виде функция normprod определяется так:
normprod(W,P) = W * P/sum(P/1),
где W – матрица весов размера S × R,
P – массив входов размера R × Q,
sum(P,1) – сумма элементов массива Р по столбцам.
Создание сети осуществляется фукцией
net = newgrnn(P,T,SPREAD).
Эта функция устанавливает веса первого слоя равным Р′, а сме-
щение – равным величине 0.8326/SPREAD, что приводит к радиаль-
ным базисным функциям, которые пересекают величину 0.5 при зна-
95
чениях взвешенных входов ± SPREAD. Веса второго слоя устанав-
ливаются равными Т. Смещения отсутствуют.
Первый слой сети GRNN – это радиальный базисный слой с чис-
лом нейронов, равными числу элементов Q обучающего множества.
В качестве начального приближения для матрицы весов выбирается
массив Р′, смещение для этого слоя устанавливается равным вектор-
столбцу с элементами 0.8326/SPREAD. Функция dist вычисляет рас-
стояние между вектором входа и вектором веса нейрона. Вход пере-
даточной функции равен поэлементному произведению взвешенного
входа сети на вектор смещения. Входом каждого нейрона первого
слоя является значение функции radbas. Если вектор веса нейрона
равен транспонированному вектору входа, то взвешенный вход Ра-
вен 0, а выход равен 1. Если расстояние между вектором входа и век-
тором веса нейрона равно SPREAD, то выход нейрона будет равен 0.5.
Второй слой сети GRNN – это линейный слой с числом нейронов,
также равным числу элементов Q обучающего множества, причем в
качестве начального приближения для матрицы весов LW{2,1} вы-
бирается массив Т. Если на вход подается вектор Рi, близкий к одно-
му из векторов входа Р из обучающего множества, то этот вектор
сгенерирует значение выхода слоя, близкое к единице. Это приведет
к тому, что выход второго слоя будет близок к ti.
Если параметр влияния SPREAD мал, радиальная базисная функ-
ция характеризуется резким спадом и диапазон входных значений, на
который реагируют нейроны входного слоя, оказывается весьма ма-
лым. При увеличении этого параметра диапазон увеличивается и вы-
ходная функция становится более гладкой.
Практические задания
Задание 1. Создать обобщенную регрессионную сеть для обу-
чающей последовательности Р=0:3 и Т[0.0 2.0 4.1 5.9], проанализи-
ровать ее структурную схему и значения параметров вычислитель-
ной модели, выполнить моделирование сети для различных входов,
построить графики и оценить влияние на выходные значения пара-
метра SPREAD, выполнив следующие команды:
P = 0:3;
96
T = [0.0 2.0 4.1 5.9];
net = newgrnn(P,T) % – параметр SPREAD = 1.0;
gensim (net)
plot(P,T, ′*r′, ′MarkerSize′, 2, ′LineWidth′, 2)
hold on
V = sim(net, P)
plot(P,V, ′o8′, ′MarkerSize′, 8, ′LineWidth′, 2)
P1 = 0.5:2.5;
Y = sim(net, P1);
plot(P1,V, ′+k′, ′MarkerSize′, 10, ′LineWidth′, 2)
Y = sim(net, 0:0.5:3) % – для нового входа;
net = newgrnn(P, T, 0.1) % – параметр SPREAD = 0.1;
Y = sim(net, 0:0.5:3) % – сравнить результаты.
97
98
Лабораторная работа № 10
Теоретические сведения
Радиальная базисная сеть типа PNN (Probabilistic Neural
Networks), или вероятностная нейронная сеть, имеет архитектуру,
аналогичную архитектуре радиальной базисной сети общего вида, и
отличается от неё структурой второго слоя, в котором используются
функция взвешивания dotprod (скалярное произведение сигналов и
весов), функция накопления netsum и передаточная функция compet –
конкурирующая функция, преобразующая вектор входа слоя нейро-
нов таким образом, чтобы нейрон с самым большим входом имел
выход, равной единице, а все другие нейроны имели выходы, равные
нулю. Смещения используются только в первом слое.
Создание вероятностей сети осуществляется функцией
net=newpnn(P,T,spread),
где Р – массив размера R*Q из Q входных векторов с R элементами;
T – массив размера S*Q из Q векторов цели и S классов;
SPREAD – параметр влияния, значение по умолчанию 1.0.
Для вероятностей сети необходимо задать обучающее множество
из Q пар векторов входа и целей. Каждый вектор цели имеет K эле-
ментов, указывающих класс принадлежности и, таким образом, каж-
99
дый вектор входа ставится в соответствие одному из К классов. В
результате образуется матрица связанности T размера K*Q, состоя-
щая из нулей и единиц, строки которой соответствуют классам при-
надлежности, а столбцы – векторам входа. Таким образом, если эле-
мент Т(i,j) матрицы связанности равен единице, то это означает,
что j-й входной вектор принадлежит к классу i.
Весовая матрица входного слоя IW формируется как и для ради-
альной базисной сети общего вида с использованием векторов входа
из обучающего множества.
Весовая матрица второго слоя соответствует матрице связан-
ности Т, которая строится с помощью функции ind2vec.
Практические задания
Задание 1. Создать вероятностную нейронную сеть для обучающей
последовательности, состоящей из вектора входа Р=[1 2 3 4 5 6 7] и
индекса классов Тс=[1 2 3 2 2 3 1], проанализировать её структурную
схему и параметры вычислительной модели, выполнить моделирова-
ние сети и оценить правильность классификации, выполнив следую-
щие команды:
Р=[1 2 3 4 5 6 7]; % – значения входа;
Tc=[1 2 3 2 2 3 1]; % – индексы классов (3);
T=ind2uec(Tc); % – матрица связанности (целей);
net=newpnn(P,T); % – создание сети PNN;
gensim(net); % – структура сети;
net; % – параметры сети;
Y=sim(net,P); % – моделирование сети;
Yc=iecc2ind(Y); % – классы входных векторов;
% 1 2 3 2 2 3 1.
100
значения в котором определяют класс соответствующего вектора
входа, выполнив команды:
101
Лабораторная работа № 11
Исследование самоорганизующихся
слоев Кохонена
Цель работы: изучение архитектуры самоорганизующихся ней-
ронных слоев Кохонена и специальных функций для их создания,
инициализации, взвешивания, накопления, активации, настройки ве-
сов и смещений, адаптации и обучения; ознакомление с демонстра-
ционными примерами и их скриптами, а также приобретение навы-
ков построения самоорганизующихся слоев для исследования топо-
логической структуры данных, их объединением в кластеры (груп-
пы) и распределением по классам.
Теоретические сведения
Самоорганизующийся слой Кохонена – это однослойная нейрон-
ная сеть с конкурирующей передаточной функцией compet, которая
анализирует выходные значения нейронов слоя и выдаёт в качестве
результата наибольшее из этих значений (значение нейрона-победи-
теля).
Инициализация весов входов производится с помощью функции
средних значений
W = midpoint (S,PR),
где S – число нейронов в слое Кохонена;
PR – матрица размера Rx2, задающая диапазоны Pmin [ j j
]
, Pmax из-
менения R элементов входного вектора;
W – матрица весов размера SxR для входов слоя, столбцы которой
имеют значения
(Pj
min + Pmax
j
).
2
Инициализация весов смещений нейронов слоя производится с
помощью функции равных смещений
B = initcon(S,PR),
102
которое каждому нейрону задаёт одно и то же смещение, равное
exp(1)*S. Например, для S=5 это смещение равно 5*2.71828=
=1.359740*101.
Взвешивание входов слоя Кохонена реализуется в виде отрица-
тельного евклидова расстояния между каждой строкой Wi матрицы
весов W и каждым столбцом Pj матрицы входов P, которое вычисля-
ется функцией negdist(W,P). Суммирование взвешенных входов со
смещениями производится функцией netsum.
Формирование самоорганизующегося слоя Кохонена осуществля-
ется функцией
net = newc(PR,S,KLr,clr),
где KLr – параметр функции настройки весов, значение по умолча-
нию которого равно 0.01;
clr – параметр функции настройки смещений, значение по умол-
чанию которого равно 0.001.
Эта функция формирует однослойную сеть с R нейронами и R
входами. Веса входов устанавливаются равными половине диапазо-
на соответствующего вектора входа для всех нейронов. Также для
всех нейронов устанавливается одно и то же смещение, равное e*s.
Выходы нейронов поступают на конкурирующую передаточную
функцию compet, которая определяет победителя. Номер активного
нейрона-победителя I* определяет ту группу (кластер), к которой
наиболее близок входной вектор.
Для того чтобы сформированная таким образом сеть решала зада-
чу кластеризации данных, необходимо предварительно настроить ее
веса и смещения по обучающей последовательностью векторов с по-
мощью функций настройки learnk и learncon соответственно, ис-
пользуя процедуру адаптации adapt или процедуру обучения train.
Функция learnk рассчитывает приращение весов dW в зависимо-
сти от вектора входа P, выхода а, весов w и параметра скорости на-
стройки lr в соответствии с правилом Кохонена:
103
⎧⎪lr ∗ (p ' − w), a j ≠ 0;
dw = ⎨
⎪⎩0, a j = 0.
Таким образом, вектор веса, наиболее близкий к вектору входа,
модифицируется так, чтобы расстояние между ними стало ещё
меньше. Результат такого обучения заключается в том, что победив-
ший нейрон, вероятно, выиграет конкуренцию и в том случае, когда
будет представлен новый входной вектор, близкий к предыдущему, и
его победа менее вероятна, когда будет представлен вектор, сущест-
венно отличающийся от предыдущего. Когда на вход сети поступает
всё большее и большее число векторов, нейрон, являющийся бли-
жайшим, снова корректирует свой весовой вектор w. В конечном
счёте, если в слое имеется достаточное количество нейронов, то каж-
дая группа близких векторов окажется связанной с одним из нейро-
нов слоя. В этом и заключается свойство самоорганизации слоя
Кохонена.
Одно из ограничений всякого конкурирующего слоя состоит в
том, что некоторые нейроны оказываются незадействованными, или
“мертвыми”. Это происходит оттого, что нейроны, имеющие началь-
ные весовые векторы, значительно удаленные от векторов входа, ни-
когда не выигрывают конкуренции, независимо от продолжительно-
сти обучения. Для ликвидации нечувствительности таких нейронов
используют положительные смещения, которые добавляются к отри-
цательным расстояниям удаленных нейронов. Функция learncon
производит такую корректировку смещений следующим образом.
В начале процедуры настройки сети всем нейронам присваивается
одинаковый характер активности C0 = 1/S. В процессе настройки эта
величина для активных нейронов увеличивается, а для неактивных
нейронов уменьшается:
ΔC = lr ∗ (a − c) .
Нетрудно убедиться, что для всех нейронов, кроме нейрона-
победителя, приращения отрицательны. Функция learcon рас-
считывает приращения вектора смещений следующим образом:
Δb = exp(1 − log(c)) − b .
104
Увеличение смещений для неактивных нейронов позволяет рас-
ширить диапазон покрытия входных значений, и неактивный нейрон
начинает формировать кластер, что улучшает кластеризацию вход-
ных данных.
Практические задания
Задание 1. Создать слой Кохонена для двух векторов входа, про-
анализировать его структурную схему и параметры вычислительной
модели, произвести обучение сети и моделирование, выполнив сле-
дующие команды:
c = 8; % – число кластеров;
n =6; % – число векторов в классе;
x = [-10 10; -5 5]; % – диапазон входов;
[r,q] = size(x); % – r число строк; q – число столбцов;
105
minU = min(x′)′ % – минимальные значения;
maxU = max(x′)′ % – максимальные значения;
v = rand(r,c)*((maxv - minU)*ones(1,c)+minU*ones(1,c));
t = c*n % – число точек;
v = [v v v v v v]; % – 48 двухэлементных векторов;
v =v+randn(r,t)*d; % – координаты точек;
P = v; % – векторы с отклонениями (нормальный закон);
plot (P(1,:),P(2,:), ′+k′)
title (‘Векторы входа’),xlabel(′P(1,:)′), ylabel(′P(2,:) ′)
net =newc([-2 12; -1 6],8 0.1);
wo = net.IW{1,1} % – веса после инициализации;
bo = net.b{1} % – смещения после инициализации;
co = exp(1)/60 % – начальная активность;
net.trainParam.epochs = 500; % – обучение;
net = train(net, P) , a = sim(net, P), ac = vec2ind(a)
net.IW{1} % – веса после обучения;
bn = net.b{1} % – смещения после обучения;
cn = exp(1)/bn % – активность после обучения;
net = newc([-2 12; -1 6], 8 0.1);
co = exp(1). /net.b{1} % – начальная активность;
net.adaptParam.passes = 500;
[net, y,e] = adapt (net, mat2cell(p)) % – адаптация;
a = sim(net, P) % – моделирование после
ac = vec2ind(a) % адаптации.
106
Лабораторная работа № 12
Исследование самоорганизующихся
карт Кохонена
Цель работы: изучение архитектуры самоорганизующихся ней-
ронных сетей в виде карт Кохонена и специальных функций для соз-
дания карты и её топологии, взвешивания, накопления, настройки
весов (размещение нейронов), адаптации и обучения; ознакомление с
демонстрационными примерами и их скриптами, а также приобрете-
ние навыков построения самоорганизующихся карт для решения за-
дач кластеризации входных векторов.
Теоретические сведения
Cамоорганизующаяся карта Кохонена – это однослойная нейрон-
ная сеть без смешения с конкурирующей функцией compet, имею-
щая определенную топологию размещения нейронов в N-мерном
пространстве. В отличие от слоя Кохонена карта Кохонена после
обучения поддерживает такое топологическое свойство, когда близ-
ким входным векторам соответствуют близко расположенные актив-
ные нейроны.
Первоначальная топология размещения нейронов в карте Кохоне-
на формируется при создание карты с помощью функции newsom,
одним из параметров которого является имя топологической функ-
ции gridtop, nextop или randtop, что соответствует размещению
нейронов в узлах либо прямоугольной, либо гексагональной сетки,
либо в узлах сетки со случайной топологией.
Расстояния между нейронами и векторами входов вычисляются с
помощью следующих функций:
dist – евклидово расстояние d=sqrt((posi-pj).^2);
boxdist – максимальное координатное смещение
d=max(abs(posi-pj));
mandist – расстояние суммарного координатного смещения
d=sum(abs(posi-pj));
107
linkdist – расстояние связи
⎧1, dist ( posi − p j ) ≤ 1;% − евклидово пространство;
⎪
⎪2, ∀k , d ik1 = d kj = 1;% − один промежуточный;
⎪3, ∀(k , k ), d k = d
⎪ 1 2 i 1 k1k21 = d k1 j = 1;
d ij = ⎨
⎪........................................................................................
⎪ N , ∀(k , k ...k ), d k = d = ... = d = 1;
⎪ 1 2 n i 1 k1k 2 knj
108
A2 – массив соседства для нейронов, расположенных в окрестно-
сти нейрона-победителя i:
⎧1, a(i, q) = 1;
⎪
A2(i, q) = ⎨0.5, a(j, q) = 1 & D(i, j) ≤ nd;
⎪0, в остальных случаях.
⎩
Здесь а(i,q) – элемент выхода нейронной сети;
D(i,j) – расстояние между нейронами i и j;
nd – размер окрестности нейрона-победителя.
Таким образом, вес нейрона-победителя изменяется пропорцио-
нально половинному параметру скорости обучения, а веса соседних
нейронов – пропорционально половинному значению этого парамет-
ра.
Весь процесс обучения карты Кохонена делится на два этапа:
А) этап упорядоченности векторов весовых коэффициентов в про-
странстве признаков;
Б) этап подстройки весов нейронов по отношению к набору век-
торов входа.
На этапе упорядочения используется фиксированное количество
шагов. Начальный размер окрестности назначается равным макси-
мальному расстоянию между нейронами для выбранной топологии и
затем уменьшается до величины, используемой на следующем этапе,
и вычисляется по следующей формуле:
nd=1.00001+(max(d)-1)(1-s/S),
где max(d) – максимальное расстояние между нейронами; s – номер
текущего шага, а S – количество циклов на этапе упорядочения.
Параметр скорости обучения изменяется по правилу
lr =tlr+(olr-tlr)(1-s/S).
На этапе подстройки, который продолжается в течение оставшей-
ся части процедуры обучения, размер окрестности остается посто-
янным и равным
nd=tnd+0.00001,
а параметр скорости обучения изменяется по следующему правилу
lr= tlr*S/s.
109
Параметр скорости обучения продолжает уменьшаться, но очень
медленно. Малое значение окрестности и медленное уменьшение
параметра скорости обучения хорошо настраивают сеть при сохра-
нении размещения, найденного на предыдущем этапе. Число шагов
на этапе подстройки должно значительно превышать число шагов на
этапе размещения. На этом этапе происходит тонкая настройка весов
нейронов по отношению к набору векторов входов.
Нейроны карты Кохонена будут упорядочиваться так, чтобы при
равномерной плотности векторов входа нейроны также были распре-
делены равномерно. Если векторы входа распределены неравномер-
но, то и нейроны будут иметь тенденцию распределяться в соответ-
ствии с плотностью размещения векторов входа.
Таким образом, при обучении карты Кохонена решается не только
задачи кластеризации входных векторов, но и выполняется частичная
классификация.
Практические задания
Задание 1. Рассчитать положение нейронов на четырехмерной
сетке с прямоугольной топологией размера 5*4*3*2 и сделать по-
пытку построить график расположения нейронов, выполнив сле-
дующие команды:
pos=gridtop(5,4,3,2) % – массив координат узлов размера N*S,
% где N – количество измерений, равное 4,
N
%а S = ∏ dim i – количество узлов сетки,
i =1
% равное произведению числа нейронов по
% каждому измерению 5*4*3*2=120;
plotsom(pos) % – вывод только трех размерностей.
110
Задание 3. Рассчитать положение нейронов на двухмерной сетке с
прямоугольной топологией размера 3*2 и построить график распо-
ложения нейронов, выполнив следующие команды:
рos =gridtop(3,2) % 0 1 0 1 0 1
%0 0 1 1 2 2
plotsom(pos) % – плоский график.
111
Задание 8. Вычислить евклидово расстояние между нейронами се-
ти с теологией, для которой задана матрица для 10 нейронов в трех-
мерном пространстве, выполнив следующие команды:
pos=rand(3,10) % – случайная матрица координат;
d=dist(pos) % – евклидово расстояние между нейронами.
112
Задание 12. Создать гексагональную карту Кохонена разме-
ром 2х3, проанализировать ее структурную схему и параметры вы-
числительной модели, произвести обучение карты и ее моделирова-
ние, а также построить необходимые графики, выполнив следующие
команды:
net = newsom([0 2; 0 1],[2 3]); % – два входа.
net, net.layers{1} % – вычислительная модель.
P = [0.1 0.3 1.2 1.1 1.8 1.7 0.1 0.3 1.2 1.1 1.8 1.7;…….
0.2 0.1 0.3 0.1 0.3 0.2 1.8 1.8 1.9 1.9 1.7 1.8];
plotsom(net.IW{1,1}, net.layers{1}.distances)
hold on
plot(P(1,:),P(2,:),′*k′,′MarkerSize′,10)
net.trainParam.epochs = 2000;
net.trainParam.show = 100;
net = train(net,P);
plot(P(1,:),P(2,:),′*′,′MarkerSize′,10)
hold on
plotsom(net.IW{1,1}, net.layers{1}.distances)
net.IW{1,1}
a = sim(net,[1.5;1] % – a = (3,1) 1.
113
net.trainparam.epochs=2000;
net.trainparam.show=100;
[net,tr]=train(net,P);
plotsom(net.iw{1,1}, net.layers{1}.distances)
figure(2)
a=sim(net,P) % – моделирование на обучающем
% множестве и построение
% столбцовой диаграммы.
a=sim(net,[1;0]) % – отнесен к 10-му кластеру.
114
Лабораторная работа № 13
Исследование самоорганизующихся
LVQ-сетей
Цель работы: изучение архитектуры самоорганизующихся ней-
ронных сетей типа LVQ и специальных функций для их создания,
настройки весов и обучения; ознакомление с демонстрационными
примерами и их скриптами, а также приобретение навыков построе-
ния таких сетей для решения задач классификации входных векто-
ров.
Теоретические сведения
Самоорганизующиеся нейронные сети типа LVQ (Learning
Vector Quantization), или сети для классификации входных векто-
ров, состоят из двух слоёв без смещения. Входной слой является
конкурирующим и используется для кластеризации векторов. Вы-
ходной слой является линейным с передаточной функцией purelin и
обеспечивает соотнесение кластеров с целевыми классами, заданны-
ми пользователем. На каждый кластер во входном слое должен быть
задан один нейрон, причём количество классов не должно быть
больше количества кластеров.
Поскольку заранее известно, как кластеры первого слоя соотно-
сятся с целевыми классами второго слоя, то это позволяет заранее
задать элементы матрицы весов LW второго слоя. Однако чтобы
найти правильный кластер для каждого вектора обучающего множе-
ства, необходимо выполнить процедуру обучения сети.
Для создания LVQ-сетей используется функция newlog, обраще-
ние к которой имеет следующий вид:
net = newlvg(PR, S1, PC, LR, LF),
где PR – массив размером Rх2 минимальных и максимальных значе-
ний R векторов входа;
S1 – число нейронов входного слоя (число кластеров);
115
PC – вектор размером 1хS2, указывающий распределение по до-
лям каждого класса из набора классов S2;
LR – параметр скорости настройки, по умолчанию 0.01;
LF – функция настройки параметров, по умолчанию learnlv2.
В результате выполнения функции newlog создаётся двухслойная
сеть. Первый слой использует функции взвешивания negdist, накоп-
ления netsum и передаточную функцию compet. Второй слой ис-
пользует функции взвешивания dotprod, накопления netsum и пере-
даточную функцию purelin. Слои не имеют смещений. Веса первого
слоя инициализируются с помощью функции midpoint; веса второго
слоя устанавливаются так, чтобы каждому нейрону на выходе соот-
ветствовал единственный нейрон первого слоя. Адаптация и обуче-
ние выполняются с помощью функций adaptwb, которая модифици-
рует веса первого слоя, используя функцию настройки learnlv1.
LVQ – сеть обучается на основе множества пар – выход обучаю-
щей последовательности:
{p1, t1}, {p2, t2}, …, {pQ, tQ}.
Каждый целевой вектор имеет единственный элемент, равный
единице, а остальные элементы равны нулю.
Предположим, что при задании вектора входа p(q) весовые коэф-
фициенты нейрона i* входного слоя наиболее близки к вектору вхо-
да p(q) и нейрон i* выигрывает конкуренцию. Тогда конкурирующая
функция compet выдаст единицу в качестве i*-го элемента вектора
выхода a1 первого слоя сети, причём все другие элементы a1 будут
равны нулю. Во втором, линейном слое, произведение матрицы ве-
сов LW×a1 выявляет некоторый столбец LW, в котором единичное
значение указывает на класс k*. Таким образом, сеть связывает век-
тор входа p(q) с классом k*. Это назначение может оказаться либо
правильным, либо ошибочным. Поэтому в процессе обучения необ-
ходимо откорректировать строку i* матрицы IW таким образом, что-
бы приблизить её к вектору p(q), если назначение правильное, и уда-
лить от вектора p(q) если назначение неправильное:
i*IW(q) = i*IW(q-1)+LR(p(q)-i*IW(q-1)), a2k* = tk* = 1;
i*IW(q) = i*IW(q-1)-LR(p(q)-i*IW(q-1)), (a2k* = 1) ≠ (tk*= 0).
116
Это правило гарантирует, что при правильной классификации
нейрон-победитель приближается к векторам входа данного класса, а
при неправильной классификации удаляется от них. Оно различается
функцией настройки весов слоя LVQ-сети learnlv1. Другая функция
настройки весов learnlv2 позволяет улучшить настройку параметров.
Она производит корректировку двух весовых векторов, близких к
входному. Два весовых вектора с евклидовыми расстояниям di и dj
до вектора входа p считаются близкими, если выполняется условие
min(di*/ dj*, dj*/ di*) > 0.5 ÷ 0.7.
Если при этом строка i* принадлежит к области в пространстве
признаков, соответствующей требуемому классу, а строка j* не при-
надлежит, то корректировка весов производится следующим обра-
зом:
⎧i * IW(q) = i * IW(q − 1) + lr(p(q)) − i * IW(q − 1);
⎨
⎩ j * IW(q) = i * IW(q − 1) + lr(p(q)) − j * IW(q − 1).
Практические задания
Задание 1. Создать нейронную LVQ-сеть для обучающей после-
довательности двухэлементных векторов, имеющих 4 нейрона во
входном слое и 2 нейрона в выходном с распределением [0.6 0.4],
проанализировать её структурную схему и значения параметров вы-
численной модели, обучить сеть и промоделировать её на обучаю-
щей последовательности, выполнив следующие команды:
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 ]; % – индексы классов;
T = ind2vec(Tc); % – разряженная целевая матрица;
T = full(T); % – полная целевая матрица;
net = newlvq(minmax(P), 4, [0.6 0.4]); % – параметры вычисли-
% тельной модели
gensim(net); % – структурная схема LVQ-сети;
net = train(net, P, T); % – обучение сети со значениями
%параметров по умолчанию;
Y = sim(net, P) % – моделирование LVQ-сети;
117
Yc = vec2ind(Y) % – индексы классов, которые
% получила сеть;
% Сравнить Yc и Tc.
Задание 2. Повторить первое задание для всевозможных векторов
индексов Tс и выявить случаи несовпадения Yc и Tc, т. е. случаи не-
правильной классификации.
Tc = [1 1 1 2 2 2 2 1 1 1 ]; % – индексы классов;
T = full(ind2vec(Tc));
net = newlvg(minmax(P), 4, [0.6 0.4]);
net.inputWeights{1, 1}
net.IW{1, 1} % – веса входного слоя после инициализации;
net.LW{2,1} % – веса выходного слоя после инициализации;
net.b{1}, net.b{2}
net.trainParam.epoch = 2000;
net.trainParam.show = 100;
net.trainParam.lr = 0.05;
net = train(net, P, T);
net.IW{1, 1} % – веса выходного слоя после обучения;
net.LW{2, 1} % – веса выходного слоя после обучения;
I1 = find(Tc = = 1); % – вектор индексов первого класса;
I2 = find(Tc = = 2); % – вектор индексов второго класса;
axis([-4, 4, -3, 3]) % – диапазоны для X и Y;
P1 = P(: , I1) % – векторы первого класса;
118
P2 = P(: , I2) % – векторы второго класса;
V = net.IW{1, 1} % – веса выходного слоя;
plot(P1(1, :), P1(2, :), ′+ k′), hold on
plot(P2(1, :), P2(2, :), ′¯b′), hold on
plot(V(:, 1), V(:, 2), ′or′)
Y = sim(net, P)
Yc=vec2ind(Y)
% Построение разделяющей линии для классов:
function P = mesh2P(x, y) % – начало М-функции;
%Вычисление массива координат прямоугольной сетки
[X,Y] = meshgrid(X, Y);
P = cat(3, X, Y);
[n1, n2, n3] = size(P);
P = permute(P, [3 2 1]);
P = reshape(P, [n3 n1*n2]);
% конец М-функции.
X = -4 : 0.2 : 4;
Y = -3 : 0.2 : 3;
P = mesh2P(X, Y);
Y = sim(net, P);
Yc = vec2ind(Y);
I1 = find(Yc = = 1); I2 = find(Yc = = 2);
plot(P(1, I1),P(2, I2), ′+k′), hold on
plot(P(1, I1),P(2, I2), ′*b′).
119
Лабораторная работа № 14
Теоретические сведения
Сети Элмана относятся к классу рекуррентных нейронных сетей.
Характерной особенностью архитектуры рекуррентных сетей являет-
ся наличие блоков динамической задержки и обратных связей. Это
позволяет таким сетям обрабатывать динамические модели.
Сети Элмана состоят их двух слоёв – выходного и входного, при
этом входной слой охвачен динамической обратной связью с исполь-
зованием линии задержки. Динамическая обратная связь позволяет
учесть предысторию наблюдаемых процессов и накопить информа-
цию для выработки правильной стратегии управления. В ряде при-
менений используется несколько слоёв нейронов.
Во входном слое двухслойной сети Элмана используется переда-
точная функция гиперболического тангенса transig, в выходном
слое – линейная функция purelin. Такое сочетание передаточных
функций позволяет максимально точно аппроксимировать функции с
конечным числом точек разрыва. Для этих целей необходимо также,
чтобы выходной слой имел достаточно большое число нейронов.
Все эти слои Элмана имеют смещения. Функциями взвешивания и
накопления являются функции dotprod и ntesum соответственно.
Выход последнего слоя является выходом сети. Веса и смещения
инициализируются с помощью функции initnw, реализующей алго-
ритм Нгуена–Видроу. Aдаптация реализуется с помощью функции
adaptwb, которая устанавливает режим, при котором веса и смеще-
120
ния каждого слоя могут быть настроены с использованием собствен-
ных функций настройки. Для сетей Элмана такими функциями могут
быть либо функция настройки методом градиентного спуска с воз-
мущением leargdm. Критерием качества обучения может быть одна
из двух функций: mse или msereg.
Сети Элмана создаются функцией
net = newelm(PR, [S1, S2, …, SN],
{TF1, TF2, …, TFN},
BTF, BLF, PF),
где PR – массив размера R × 2 минимальных и максимальных значе-
ний для R векторов входа;
S1, S2, …, SN – количество нейронов в слоях;
TF1, TF2, …, TFN – функции активации в слоях, по умолчанию
tansig;
BTF – обучающая функция, реализующая метод обратного рас-
пространения, по умолчанию traingdx;
BLF – функция настройки, реализующая метод обратного распро-
странения, по умолчанию learngdm;
PF – критерий качества обучения, по умолчанию mse.
Динамическое описание входного слова определяется рекуррент-
ными уравнениями:
⎧⎪n1 (k ) = LW 11a 1 (k − 1) + IW 11 p + b1 , a 1 (0) = a 10 ;
⎨ 1
⎪⎩a (k ) = transig (n1 (k )).
Второй линейный слой является безынерционным и описывается
соотношениями:
n2(k) = LW21a1(k) + b2;
a2(k) = purelin(n2(k)).
121
случае, когда во входной последовательности встретились две еди-
ницы подряд:
P = round ( rand ( 1, 20 ) );
T = [ 0 ( P ( 1 : end – 1 ) + P ( 2 : end ) = = 2 ) ];
Pseq = con2seq(P); % – массив ячеек Pseq;
Tseq = con2seq(T); % – массив ячеек Tseq;
net – newelm ( [0 1], [10, 1], {′tansig′, ′logsig′}) % – сеть с 10 ней-
% ронами во входном слое;
gensim(net)
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}) % – нулевые ошибки.
p1 = sin(1 : 20);
p2 = sin(1 : 20) * 2;
t1 = ones(1, 20);
t2 = ones(1, 20) * 2.
p = [p1 p2 p1 p2];
122
t = [t1 t2 t1 t1].
4. Сформировать обучающие последовательности:
6. Обучить сеть:
net.trainParam.epochs = 1000;
net.trainParam.show = 25;
net.trainParam.goal = 0.01;
[net, tr] = train(net, Pseq, Tseq);
net.IW{1, 1}, net.LW{1, 1}, net.LW{2, 1}.
figure(2)
a = sim(net, Pseq);
time = 1 : length(p);
plot(time, t, ′- -′, time, cat(2, a {:} ) )
axis([1 80 0.8 2.2]).
123
8. Проверить сеть на произвольной последовательности:
124
Лабораторная работа № 15
Теоретические сведения
Сеть Хопфилда относится к классу рекуррентных нейронных
сетей. Она имеет один нейронный слой с функциями взвешивания
dotprod, накопления netsum и линейной ограниченной функцией
активизации satlins. Слой охвачен динамической обратной связью с
весами LW{1,1} и имеет смещения.
Сети Хопфилда обладают тем отличительным свойством, что при
поступлении на вход некоторого вектора признаков в виде началь-
ных условий, они за конечное число тактов времени приходят в со-
стояние устойчивого равновесия, зависящего от входного вектора.
Это позволяет ассоциировать входной вектор с некоторым состояни-
ем сети, или объектом предметной области. Состояния устойчивого
равновесия называются также аттракторами сети. Помимо целевых
аттракторов в сети могут иметь место паразитные, которые не соот-
ветствуют никаким векторам входа. При создании сети Хопфилда
специальные алгоритмы синтеза сводят к минимуму число таких
паразитных точек равновесия и обеспечивают максимальный размер
области притяжения для точек равновесия.
Функция для создания сети Хопфилда имеет вид:
net=newhop(T),
где Т – массив размера R*Q,объединяющий Q целевых векторов со
значениями +1 или -1 для элементов;
R – число элементов вектора входа.
125
После того как начальные условия заданы в виде массива T, опре-
деляющего ряд целевых вершин замкнутого гиперкуба, сеть для ка-
ждой вершины генерирует выход, который по обратной связи пода-
ётся на вход. Этот процесс при создании сети повторяется много раз,
пока её выход не установится в положение равновесия для каждой из
целевых вершин. При подаче затем произвольного входного вектора
сеть Хопфилда переходит в результате рекурсивного процесса к од-
ной из точек равновесия, наиболее близкой к входному сигналу.
Динамическая модель рекуррентного слоя одной из модификаций
сети Хопфилда описывается следующим образом:
Практические задания
Задание 1. Создать сеть Хопфилда с двумя устойчивыми точками
в трёхмерном пространстве, выполнив следующие команды:
126
% к устойчивому состоянию
% [-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
127
Лабораторная работа № 16
Теоретические сведения
Применение нейронных сетей для решения задач управления ди-
намическими процессами позволяет выделить два этапа проектиро-
вания систем управления такими процессами:
1. Этап идентификации динамического процесса, для которого
проектируется система управления.
2. Этап синтеза закона управления и его реализация с помощью
нейронной сети.
На этапе идентификации разрабатывается модель управляемого
процесса в виде нейронной сети, которая на этапе синтеза использу-
ется для построения регулятора.
Динамические модели систем управления с нейросетевыми регу-
ляторами размещены в разделе Control Systems библиотеки блоков
для моделирования нейронных сетей Neural Network Blockset, дос-
туп к которым обеспечивается браузером Library Browser пакета
Simulink или командой neural. В этой библиотеке имеются также
следующие разделы:
Net Input Function – раздел блоков функций накопления: netprod
и netsum;
Transfer Function – раздел блоков передаточных функ-
ций(функций активации): hardlim, hardlims, purelin, satlin, satlins,
poslin, logsig, transig, radbas, tribas, softmax и compet;
128
Weight function – раздел блоков функций взвешивания: dotprod,
normprod, dist и negdist.
В разделе блоков управляющих систем Control Systems имеется
три вида нейронных регуляторов:
Neural Net Predictive Controller – регулятор с предсказанием бу-
дущих реакций процесса на случайные сигналы управления. Алго-
ритм оптимизации вычисляет управляющие сигналы, которые мини-
мизируют разность между желаемыми и действительными измене-
ниями сигнала на выходе модели и таким образом оптимизируют
управляемый процесс. Построение модели управляемого процесса
выполняется автономно с использованием нейронной сети, которая
обучается в групповом режиме с использованием одного из алгорит-
мов обучения. Реализация такого регулятора требует значительного
объема вычислений, поскольку расчеты по оптимизации выполняют-
ся на каждом такте управления.
Narmal2(Nonlinear Autoregressive – Moving Average) – регуля-
тор на основе модели авторегрессии со скользящим средним. Дан-
ный регулятор представляет собой модифицированную нейросете-
вую модель управляемого процесса, полученную на этапе автоном-
ной идентификации. Вычисления в реальном времени связаны толь-
ко с реализацией нейронной сети.
Model Reference Controller – регулятор на основе эталонной мо-
дели. Такой регулятор требует обучения нейронной сети управляе-
мого процесса и нейронной сети регулятора. При этом обучение ре-
гулятора оказывается достаточно сложным, поскольку обучение ос-
новано на динамическом варианте метода обратного распростране-
ния ошибки, так как нейронная сеть использует линии задержки. Ре-
гуляторы на основе эталонной модели применимы к различным
классам управляемых процессов.
Для каждой из трёх архитектур регуляторов используется одна и
та же процедура идентификации управляемого процесса. Нейронная
модель во всех случаях представляет собой двухслойную сеть с пря-
мой передачей сигнала и с линиями задержки на каждом слое. Вход-
ной, или скрытый (hiden) слой может иметь произвольное число
нейронов. Выходной слой имеет только один нейрон. Для входного
слоя функции взвешивания, накопления и активизации являются со-
129
ответственно dotprod, netsum и logsig. Выходной слой имеет такие
же функции взвешивания и накопления, а функцией активизации для
него является линейная функция purelin. Известно, что сети с такой
архитектурой могут воспроизводить весьма сложные нелинейные
зависимости между входом и выходом сети.
Настройка параметров нейронной сети, являющейся моделью
объекта, выполняется автономно методом последовательного обуче-
ния с использованием данных, полученных при испытаниях реально-
го объекта. Для обучения сети может быть использован любой из
обучающих алгоритмов для нейронных сетей. Использование кон-
трольного и тестового множеств обучающих данных позволяет из-
бежать явления переобучения сети. Изменяя число нейронов в пер-
вом слое, количество линий задержки на входе и выходе сети, а так-
же интервал квантования, или дискретности, можно обеспечить тре-
буемую точность моделирования управляемого процесса.
Диалоговая панель для идентификации управляемого процесса
Plant Identification входит в состав всех трёх регуляторов раздела
Control Systems библиотеки нейронных блоков системы Simulink,
является универсальным средством и может быть использована для
построения нейросетевых моделей любых динамических объектов,
которые могут быть представлены блоками этой системы.
С помощью управляющих элементов панели Plant Identification
можно задать архитектуру нейронной сети, параметры обучающей
последовательности и параметры обучения, а также управлять про-
цессом идентификации и оценивать качество этого процесса.
Набор управляющих элементов для задания архитектурных па-
раметров нейронной сети следующий:
1. Size of the Hiden Layer – количество нейронов на входном или
скрытом слое;
2. No. Delayed Plant Inputs – число линий задержки для входного
слоя;
3. No. Delayed Plant Outputs – число линий задержки для выход-
ного слоя;
130
4. Samling Interval – интервал квантования или шаг дискретно-
сти, в секундах, между двумя последовательными моментами отсчё-
та данных;
5. Notmalize Training Data – переключатель нормирования для
преобразования обучающих данных к диапазону [0 1].
Набор управляющих элементов для задания характеристик обу-
чающей последовательности таков:
1. Training Samples – число точек отсчёта для получения обу-
чающей последовательности в виде пар значений вход-выход для
управляемого процесса, определяемого моделью Simulink;
2. Maximum Plant Input – максимальное значение входного сиг-
нала;
3. Minimum Plant Input – минимальное значение входного сиг-
нала;
4. Maximum Interval Value (sec) – максимальный интервал иден-
тификации, в секундах;
5. Minimum Interval Value (sec) – минимальный интервал иден-
тификации, в секундах;
6. Limit Output Data – переключатель для ограничения значений
выходного сигнала;
7. Maximum Plant Output – максимальное значение выходного
сигнала, задаваемое при включённом переключателе Limit Output
Data;
8. Minimum Plant Output – максимальное значение выходного
сигнала, задаваемое при включённом переключателе Limit Output
Data;
9. Simulink Plant Model – для задания модели управляемого про-
цесса, реализованной с помощью блоков Simulink, имеющий порты
входа и выхода и сохранённой в файле *.mdl; выбор модели произ-
водится с помощью кнопки Browse; имя модели отображается в спе-
циальном окне.
Параметры обучения задаются следующим образом:
1. Training Epochs – количество циклов обучения;
2. Training Function – для задания обучающей функции;
131
3. Use Current Weights – переключатель для использования те-
кущих весов нейронной сети;
4. Use Validation Data – переключатель для использования кон-
трольного множества в объёме 25 % от обучающего множества;
5. Use Testing Data – переключатель для использования тестово-
го множества в объёме 25% от обучающего множества.
Для идентификации управляемого процесса необходимо выпол-
нить следующие действия:
1. Задать архитектуру нейронной сети, которая будет моделью
управляемого процесса.
2. Задать параметры обучения.
3. Выбрать модель Simulink для управляемого процесса.
4. Сгенерировать обучающую последовательность заданного
объёма, запустив модель Simulink с помощью кнопки Generate
Training Data. Генерация обучающей последовательности произво-
дится с помощью воздействия ряда ступенчатых сигналов на модель
управляемого процесса и снятия значений на выходе и входе модели
через каждый шаг квантования. Графики входного и выходного сиг-
нала отображаются в окне Plant Input-Output Data.
5. По завершении генерации обучающей последовательности не-
обходимо либо принять эти данные, нажав на кнопку Accept Data, и
тогда они будут использованы для обучения нейронной сети, либо
отвергнуть их, нажав кнопку Reject Data, и повторить процесс иден-
тификации управляемого процесса, представленного моделью Simu-
link.
6. После получения обучающей последовательности необходимо
установить требуемые параметры обучения и с помощью кнопки
Train Network запустить процесс обучения нейронной сети.
7. После завершения обучения его результаты отображаются на
графиках изменения ошибки сети для обучающей, контрольной и
тестирующей последовательностей, а также выходных значений мо-
дели и сети при подаче на вход указанных последовательностей.
8. Если результаты обучения приемлемы, то надо сохранить па-
раметры нейросетевой модели управляемого процесса и приступить
132
к синтезу регулятора того или иного класса, нажав кнопки Apply
и Ok.
9. Если результаты обучения неприемлемы, то следует нажать
кнопку Cаncel и повторить процесс идентификации сначала, изменяя
архитектуру сети и параметры обучающей последовательности.
10. Обучающую последовательность можно импортировать из
рабочей области или из файла, нажав на кнопку Import Data. Если
необходимо обучающую последовательность сохранить в рабочей
области или в файле для подбора параметров архитектуры нейрон-
ной сети, то следует после получения данных нажать на кнопку
Export Data.
11. Удалить только что сгенерированные данные при необходи-
мости можно с помощью кнопки Erase Generated Data.
Таким образом, диалоговая панель Plant Identification позволяет
идентифицировать управляемый процесс, представленный в виде
имитационной модели Simulink, построить двухслойную нейронную
сеть прямой передачи сигнала с необходимым числом нейронов и
линий задержки, обучить эту сеть для получения нейронной модели
управляемого процесса, оценить качество обучения и работу ней-
ронной сети. Для регулятора на основе авторегрессии со скользящим
средним, этап его синтеза отсутствует, так как такой регулятор пред-
ставляет собой полученную нейросетевую модель управляемого
процесса с предсказанием. Для регуляторов на основе эталонной мо-
дели с предсказанием, этап синтеза необходим.
Управление с предсказанием использует принцип управляющего
горизонта, когда нейросетевая модель управляемого процесса пред-
сказывает реакцию объекта управления на определенном интервале
времени в будущем. Предсказания используются программой чис-
ленной оптимизации для того, чтобы вычислить управляющий сиг-
нал, который минимизирует следующий критерий качества управле-
ния:
N2 Nu
Y= ∑
j= N1
[Yr (t + j) − Ym (t + j)]2 + ρ ∑[U′(t + j − 1) − U′(t + j − 2)] ,
j=1
2
133
U′ (t) – пробный управляющий сигнал;
Yr(t) – желаемый управляющий сигнал;
Ym(t) – истинная реакция модели управляемого сигнала;
ρ – коэффициент, определяющий вклад, вносимый мощностью
управления в критерий качества.
Структурная схема регулятора с предсказанием представлена на
рисунке.
Yr U′ Ym
Оптимизация U Модель объекта в виде
нейронной сети
U Управляемый Yp
процесс
Блок оптимизации определяет значения U′, которые минимизи-
руют критерий качества управления, а соответствующий сигнал
управляет процессом.
Синтез регулятора с предсказанием осуществляется с помощью
диалоговой панели Neural Network Predictive Control, на которой
имеются следующие управляющие элементы:
Cost Horizon (N2) – верхний предел суммирования в показателе
качества, при этом нижний предел N1 всегда равен единице;
Control Horizon (Nu) – верхний предел при оценке мощности
управления;
Control Weightin Factor (ρ) – коэффициент веса для составляю-
щей мощности управления;
Search Parameter (α) – параметр одномерного поиска, задающий
порог уменьшения показателя качества;
Minimization Routine – параметр для выбора процедуры одно-
мерного поиска;
Iterations Per Sample Time – число итераций на один такт дис-
кретности.
134
После установки параметров оптимизации необходимо их ввести
в регулятор с помощью кнопок Apply и OK и произвести моделиро-
вание полученной системы.
Для регулятора на основе эталонной модели необходимо постро-
ить две нейронные сети: сеть для модели объекта управления и сеть
для самого регулятора. Нейронная сеть модели объекта управления
строится точно так же, как и для регуляторов рассмотренного вида.
Для этих целей надо на основной панели Model Reference Control,
которая вызывается двойным щелчком левой кнопки мыши по блоку
регулятора, воспользоваться кнопкой Plant Identification. Щелчок по
этой кнопке вызывает диалоговую панель Plant Identification, кото-
рая имеет такой же набор управляющих элементов, как и для других
регуляторов. С помощью этой панели надо задать архитектуру ней-
ронной сети для управляемого объекта, задать характеристики обу-
чающей последовательности и параметры обучения, произвести
идентификацию управляемого объекта и обучить нейронную сеть. С
помощью кнопок Apply и OK завершить построение модели объекта
и возвратиться к основной диалоговой панели Model Reference
Control для синтеза нейронной модели регулятора.
Архитектура нейронной модели регулятора аналогична архитек-
туре нейронной модели объекта, поэтому управляющие элементы на
панели Model Reference Control такие же, что и на панели Plant
Identification, отсутствуют управляющие элементы для задания ха-
рактеристик выходного сигнала, так как он непосредственно посту-
пает на вход модели объекта, а обучающая последовательность раз-
бивается на сегменты, для чего имеется специальное поле Controller
Training Segments.
Для синтеза регулятора необходимо определить все требуемые
параметры на панели, сгенерировать обучающие последовательно-
сти, нажав на кнопку Training Data и обучить нейронную сеть с по-
мощью кнопки Train Controller, используя текущие веса и режим
обучения с накоплением (если необходимо). Затем нажать на кнопку
Apply для завершения процесса синтеза регулятора.
По окончании построения регулятора необходимо нажать но
кнопку OK, вернуться в окно Simulink и выполнить моделирование
135
работы системы нейронного регулирования для оценки характери-
стик регулятора.
Практические задания
Задание 1. Создать нейронную модель регулятора с предсказани-
ем для управлением каталитическим реактором с непрерывным по-
мешиванием. Динамическая модель управляемого процесса описы-
вается следующими обыкновенными нелинейными дифференциаль-
ными уравнениями:
⎧ dh
⎪⎪ = w1 (t ) + w2 (t ) − 0,2 h ;
dt
⎨ dCb w (t ) w (t ) K1Cb
⎪ = (Cb1 − Cb) 1 + (Cb2 − Cb ) 2 − ,
⎪⎩ dt h h (1 + K 2Cb )2
где h – уровень жидкости в резервуаре, который не регулируется;
w1(t) – скорость потока продукта с концентрацией Cb1;
w2(t) – скорость потока продукта с концентрацией Cb2;
Cb – концентрация продукта на выходе объекта;
K1 и K2 – константы скорости расхода продукта.
Цель регулирования состоит в поддержании концентрации про-
дукта путем регулирования скорости потока w2(t).
Для синтеза модели процесса использовать следующие значения
его параметров:
Cb1 = 29,4; Cb2 = 29,4; K1 = K2 = 1; w1(t) = 1; w2(t) = 0,1.
Основные этапы синтеза таковы:
1. Построение модели Simulink для управляемого процесса и её
исследование.
2. Идентификация процесса и синтез его нейронной модели.
3. Задание параметров оптимизации и синтез регулятора.
4. Моделирование регулируемой системы и анализ качества ре-
гулирования.
136
Задание 2. Создать нейронную модель регулятора с использова-
нием нелинейной авторегрессии со скользящим средним. Управляе-
мым объектом является магнит, который движется в электромагнит-
ном поле электромагнита. Уравнение движения этой системы имеет
вид
d2y α i 2 (t ) β dy (t )
= − g + − ,
dt 2 Μ y (t ) Μ dt
где y(t) – расстояние движущегося магнита от электромагнита;
g – ускорение силы тяжести;
α – постоянная магнитного поля, зависящая от числа витков об-
мотки и намагниченности электромагнита;
i(t) – управляющий ток электромагнита:
М – масса магнита;
β – коэффициент вязкого трения.
137
3. Идентификация эталонной модели и синтез регулятора.
4. Моделирование регулируемой системы и анализ качества ре-
гулирования.
138
Cписок литературы
1. Дьяконов, В. Matlab 6: учебный курс [Текст] / В. Дьяконов. –
СПб.: Питер, 2001. – 592 с.
2. Медведев, В. Г. Нейронные Сети Matlab 6 / В. Г. Медведев;
под общ. ред. к.т.н. В. Г. Потемкина. – М.: ДИАЛОГ-МИФИ, 2002. –
496 с. – (Пакеты прикладных программ; Кн.4).
3. Галушкин, А. И. Теория нейронных сетей [Текст] / А. И. Га-
лушкин. – М.: ИПРЖР, 2000. – 416 с.
4. Галушкин, А. И. Нейрокомпьютеры [Текст]. – М.: ИПРЖР,
2000. – 532 с.
5. Нейрокомпьютеры и интеллектуальные работы [Текст] / под
ред. В. Г. Неелова. – Киев: Пресса Украины, 1999. – 150 с.
6. Дунин-Барковский, В. П. Информационные процессы в ней-
ронных структурах [Текст] / В. П. Дунин-Барковский. – М.: Наука,
1978.
7. Сивохин, А. В. Искусственные нейронные сети [Текст] /
А. В. Сивохин; учеб. пособие / под ред. профессора Б. Г. Хмелев-
ского. – Пенза: Изд-во Пенз. гос. ун-та, 2002. – 70 с.
8. Щербаков, М. А. Искусственные нейронные сети: Конспект
лекций [Текст] / М. А. Щербаков. – Пенза: Изд-во Пенз. гос. тех. ун-
та, 1996. – 44 с.
9. Осовский, С. Нейронные сети для обработки информации
[Текст] / С. Осовский; пер. с польского И. Д. Рудинского. – М.: Фи-
нансы и статистика, 2002. – 344 с.
10. Дьяконов, В. П. Matlab 6/6.1/6.5 + Simulink 4/5. Основы приме-
нения. [Текст]. Полное руководство пользователя / В. П. Дьяконов. –
М.: СОЛОН-Пресс, 2002. – 768 с.
139
СОДЕРЖАНИЕ
Введение...................................................................................................................... 3
Лабораторная работа № 1. Основы программирования в системе MATLAB....... 5
Лабораторная работа № 2. Массивы, структуры, ячейки
и классы системы MATLAB.................................................................................... 15
Лабораторная работа №3. Модели искусственного нейрона................................ 28
Лабораторная работа №4. Искусственные нейронные сети ................................. 41
Лабораторная работа № 5. Методы и алгоритмы обучения искусственных
нейронных сетей....................................................................................................... 49
Лабораторная работа № 6. Исследование персептронных сетей ......................... 73
Лабораторная работа № 7. Исследование линейных нейронных сетей............... 78
Лабораторная работа № 8. Исследование радиальных базисных сетей
общего вида .............................................................................................................. 87
Лабораторная работа № 9. Исследование радиальных базисных сетей
типа GRNN................................................................................................................ 93
Лабораторная работа № 10. Исследование радиальных базисных сетей
типа PNN ................................................................................................................... 96
Лабораторная работа № 11. Исследование самоорганизующихся
слоев Кохонена ......................................................................................................... 99
Лабораторная работа № 12. Исследование самоорганизующихся
карт Кохонена......................................................................................................... 104
Лабораторная работа № 13. Исследование самоорганизующихся LVQ-сетей . 112
Лабораторная работа № 14. Исследование сетей Элмана................................... 117
Лабораторная работа № 15. Исследование сетей Хопфилда .............................. 122
Лабораторная работа № 16. Применение нейронных сетей для
проектирования систем управления динамическими процессами..................... 125
Список литературы ................................................................................................ 135
140