Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
ЛАБОРАТОРНАЯ РАБОТА 3
РЕАЛИЗАЦИЯ НЕЙРОННЫХ СЕТЕЙ В ПАКЕТЕ MATLAB. ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ТУЛБОКСА NNTOOL
Цель и содержание: приобретение практических навыков применения нейронных сетей при решении плохо формализованных задач с использованием пакета Matlab, выявление важных показателей в обучающей выборке, в наибольшей степени влияющих на результат.
Теоретическое обоснование
NNTool графический интерфейс для работы с нейронными сетями пакета Matlab позволяет выбирать структуры НС из обширного перечня и предоставляет множество алгоритмов обучения для каждого типа сети.
В лабораторной работе рассмотрены следующие вопросы, относящиеся к работе с NNTool:
Методика и порядок выполнения работы
Чтобы запустить NNTool, необходимо выполнить одноимённую команду в командном окне MATLAB:
>> nntool
После этого появится главное окно NNTool, именуемое "Окном управления сетями и данными" (Network/Data Manager) (рис. 3.1).
Рисунок 3.1 Главное окно NNTool
Панель "Сети и данные" (Networks and Data) имеет функциональные клавиши со следующими назначениями:
На панели "Только сети" (Networks only) расположены клавиши для работы исключительно с сетями. При выборе указателем мыши объекта любого другого типа, эти кнопки становятся неактивными.
При работе с NNTool важно помнить, что клавиши View, Delete, Initialize, Simulate, Train и Adapt (изображены на рис. 3.1 как неактивные) действуют применительно к тому объекту, который отмечен в данный момент выделением. Если такого объекта нет, либо над выделенным объектом
невозможно произвести указанное действие, соответствующая клавиша неактивна.
Рассмотрим создание нейронной сети с помощью NNTool на примере.
Пусть требуется создать нейронную сеть, выполняющую логическую функцию "И".
Создание сети
Выберем сеть, состоящую из одного персептрона с двумя входами. В процессе обучения сети на её входы подаются входные данные и производится сопоставление значения, полученного на выходе, с целевым (желаемым). На основании результата сравнения (отклонения полученного значения от желаемого) вычисляются величины изменения весов и смещения, уменьшающие это отклонение.
Итак, перед созданием сети необходимо заготовить набор обучающих и целевых данных. Составим таблицу истинности для логической функции "И", где P1 и Р2 - входы, а А желаемый выход (табл. 3.1).
Таблица 3.1. Таблица истинности логической функции "И"
Р1 |
Р2 |
А |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
Чтобы задать матрицу, состоящую из четырёх векторов-строк, как входную, воспользуемся кнопкой New Data. В появившемся окне следует произвести изменения (рис. 3.2), и нажать клавишу "Создать" (Create).
Рисунок 3.2 Задание входных векторов
После этого в окне управления появится вектор data1 в разделе Inputs. Вектор целей задаётся схожим образом (рис. 3.3).
Рисунок 3.3 Задание целевого вектора
После нажатия на Create в разделе Targets появится вектор target1. Данные в поле "Значение" (Value) могут быть представлены любым понятным MATLAB выражением. К примеру, предыдущее определение вектора целей можно эквивалентно заменить строкой вида
bitand([0 0 1 1], [0 1 0 1]).
Теперь следует приступить к созданию нейронной сети. Выбираем кнопку New Network и заполняем форму (рис. 3.4).
Рисунок 3.4 Окно «Создание нейронной сети»
При этом поля несут следующие смысловые нагрузки:
Таблица 3.2. Типы нейронных сетей NNTool
№ п/п |
Тип сети |
Название сети |
Число слоев |
Обучаемые параметры |
1 |
Competitive |
Конкурирующая сеть |
1 |
IW{1, 1}, b{ 1} |
2 |
Cascade-forward backprop |
Каскадная сеть с прямым распространением сигнала и обратным распространением ошибки |
2 |
IW{1, 1}, b{1} LW{2, 1} IW{2, 1}, b{2} |
3 |
Elman backprop |
Сеть Элмана с обратным распространением ошибки |
2 |
IW{1, 1}, b{1} LW{2, 1}, b{2} LW{2, 1}, |
4 |
Feed-forward backprop |
Сеть с прямым распространением сигнала и обратным распространением ошибки |
2 |
IW{1, 1}, b{1} LW{2, 1}, b{2} |
5 |
Time delay backprop |
Сеть с запаздыванием и обратным распространением ошибки |
2 |
IW{1, 1}, b{1}, LW{2, l},b{2} |
6 |
Generalized regression |
Обобщенная регрессионная сеть |
2 |
IW{1, 1}, b{1}, LW{2, l} |
7 |
Hopfield |
Сеть Хопфилда |
1 |
LW{l, l},b{l} |
8 |
Linear layer (design) |
Линейный слой (создание) |
1 |
IW{1, 1}, b{1} |
9 |
Linear layer (train) |
Линейный слой (обучение) |
1 |
IW{1, 1}, b{1} |
10 |
LVQ |
Сеть для классификации входных векторов |
2 |
IW{1, 1}, LW{2, 1} |
11 |
Perceptron |
Персептрон |
1 |
IW{1, 1), b{l} |
12 |
Probabalistic |
Вероятностная сеть |
2 |
IW{1, 1}, b{l}, LW{2, 1} |
13 |
Radial basis (exact fit) |
Радиальная базисная сеть с нулевой ошибкой |
2 |
IW{ 1, 1}, b{ 1}, LW{2, 1} |
14 |
Radial basis (fewer neurons) |
Радиальная базисная сеть с минимальным числом нейронов |
2 |
IW{1, 1}, b{ 1}, LW{2, 1}, b{2} |
15 |
Self-organizing map |
Самоорганизующаяся карта Кохонена |
1 |
IW{1, 1} |
С помощью клавиши "Вид" (View) можно посмотреть архитектуру создаваемой сети (рис. 3.5). Так, мы имеем возможность удостовериться, все ли действия были произведены верно. На рис. 5 изображена персептронная сеть с выходным блоком, реализующим передаточную функцию с жёстким ограничением. Количество нейронов в слое равно одному, что символически отображается размерностью вектора-столбца на выходе слоя и указывается числом непосредственно под блоком передаточной функции. Рассматриваемая сеть имеет два входа, так как размерность входного вектора-столбца равна двум.
Рисунок 3.5 Предварительный просмотр создаваемой сети
Итак, структура сети соответствует нашему заданию. Теперь можно закрыть окно предварительного просмотра, нажав клавишу "Закрыть" (Close), и подтвердить намерение создать сеть, нажав "Создать" (Create) в окне создания сети. В результате проделанных операций в разделе "Сети" (Networks) главного окна NNTool появится объект с именем network1.
Обучение
Наша цель построить нейронную сеть, которая выполняет функцию логического "И". Очевидно, нельзя рассчитывать на то, что сразу после этапа создания сети последняя будет обеспечивать правильный результат (правильное соотношение "вход/выход"). Для достижения цели сеть необходимо должным образом обучить, то есть подобрать подходящие значения параметров. В MATLAB реализовано большинство известных алгоритмов обучения нейронных сетей, среди которых представлено два для персептронных сетей рассматриваемого вида. Создавая сеть, мы указали LEARNP в качестве функции, реализующей алгоритм обучения (рис. 3.3).
Вернёмся в главное окно NNTool. На данном этапе интерес представляет нижняя панель "Только сети" (Networks only). Нажатие любой из клавиш на этой панели вызовет окно, на множестве вкладок которого представлены параметры сети, необходимые для её обучения и прогона, а также отражающие текущее состояние сети.
Отметив указателем мыши объект сети network1, вызовем окно управления сетью нажатием кнопки Train. Перед нами возникнет вкладка "Train" окна свойств сети, содержащая, в свою очередь, ещё одну панель вкладок (рис. 3.6). Их главное назначение - управление процессом обучения. На вкладке "Информация обучения" (Training info) требуется указать набор обучающих данных в поле "Входы" (Inputs) и набор целевых данных в поле "Цели" (Targets). Поля "Выходы" (Outputs) и "Ошибки" (Errors) NNTool заполняет автоматически. При этом результаты обучения, к которым относятся выходы и ошибки, будут сохраняться в переменных с указанными именами.
Рисунок 3.6 Окно параметров сети, открытое на вкладке "обучение" (Train)
Завершить процесс обучения можно, руководствуясь разными критериями. Возможны ситуации, когда предпочтительно остановить обучение, полагая достаточным некоторый интервал времени. С другой стороны, объективным критерием является уровень ошибки. На вкладке "Параметры обучения" (Training parame-ters) для нашей сети (рис. 3.7) можно установить следующие поля:
Рисунок 3.7 Вкладка параметров обучения
Принимая во внимание тот факт, что для задач с линейно отделимыми множествами (а наша задача относится к этому классу) всегда существует точное решение, установим порог достижения цели, равный нулю. Значения остальных параметров оставим по умолчанию. Заметим только, что поле времени обучения содержит запись Inf, которая определяет бесконечный интервал времени (от английского Infinite бесконечный).
Следующая вкладка "Необязательная информация" (Optional Info) показана на рис. 3.8.
Рисунок 3.8 Вкладка необязательной информации
Рассмотрим вкладку обучения (Train). Чтобы начать обучение, нужно нажать кнопку "Обучить сеть" (Train Network). После этого, если в текущий момент сеть не удовлетворяет ни одному из условий, указанных в разделе параметров обучения (Training Parameters), появится окно, иллюстрирующее динамику целевой функции - кривую обучения. В нашем случае график может выглядеть так, как показано на рис. 3.9.
Рисунок 3.9 Кривая обучения
Кнопкой "Остановить обучение" (Stop Training) можно прекратить этот процесс. Из рисунка видно, что обучение было остановлено, когда функция цели достигла установленной величины (goal = 0).
Следует отметить, что для персептронов, имеющих функцию активации с жёстким ограничением, ошибка рассчитывается как разница между целью и полученным выходом. Итак, алгоритм обучения нашёл точное решение задачи. В методических целях убедимся в правильности решения задачи путём прогона обученной сети. Для этого необходимо открыть вкладку "Прогон" (Simulate) и выбрать в выпадающем списке "Входы" (Inputs) заготовленные данные. В данной задаче естественно использовать тот же набор данных, что и при обучении data1. При желании можно установить флажок "Задать цели" (Supply Targets). Тогда в результате прогона дополнительно будут рассчитаны значения ошибки. Нажатие кнопки "Прогон сети" (Simulate Network) запишет результаты прогона в переменную, имя которой указано в поле "Выходы" (Outputs). Теперь можно вернуться в основное окно NNTool и, выделив мышью выходную переменную network1, нажать кнопку "Просмотр" (View). Содержимое окна просмотра совпадает со значением вектора целей − сеть работает правильно.
Следует заметить, что сеть создаётся инициализированной, то есть значения весов и смещений задаются определённым образом. Перед каждым следующим опытом обучения обычно начальные условия обновляются, для чего на вкладке "Инициализация" (Initialize) предусмотрена функция инициализации. Так, если требуется провести несколько независимых опытов обучения, инициализация весов и смещений перед каждым из них осуществляется нажатием кнопки "Инициализировать веса" (Initialize Weights).
Вернёмся к вкладке "Необязательная информация" (Optional Info) (рис. 8). Чтобы понять, какой цели служат представленные здесь параметры, необходимо обсудить два понятия: переобучение и обобщение.
При выборе нейронной сети для решения конкретной задачи трудно предсказать её порядок. Если выбрать неоправданно большой порядок, сеть может оказаться слишком гибкой и может представить простую зависимость сложным образом. Это явление называется переобучением. В случае сети с недостаточным количеством нейронов, напротив, необходимый уровень ошибки никогда не будет достигнут. Здесь налицо чрезмерное обобщение. Для предупреждения переобучения применяется следующая техника. Данные делятся на два множества: обучающее (Training Data) и контрольное (Validation Data). Контрольное множество в обучении не используется. В начале работы ошибки сети на обучающем и контрольном множествах будут одинаковыми. По мере того, как сеть обучается, ошибка обучения убывает, и, пока обучение уменьшает действительную функцию ошибки, ошибка на контрольном множестве также будет убывать. Если же контрольная ошибка перестала убывать или даже стала расти, это указывает на то, что обучение следует закончить. Остановка на этом этапе называется ранней остановкой (Early stopping). Таким образом, необходимо провести серию экспериментов с различными сетями, прежде чем будет получена подходящая. При этом чтобы не быть введённым в заблуждение локальными минимумами функции ошибки, следует несколько раз обучать каждую сеть. Если в результате последовательных шагов обучения и контроля ошибка остаётся недопустимо большой, целесообразно изменить модель нейронной сети (например, усложнить сеть, увеличив число нейронов, или использовать сеть другого вида). В такой ситуации рекомендуется применять ещё одно множество − тестовое множество наблюдений (Test Data), которое представляет собой независимую выборку из входных данных. Итоговая модель тестируется на этом множестве, что даёт дополнительную возможность убедиться в достоверности полученных результатов. Очевидно, чтобы сыграть свою роль, тестовое множество должно быть использовано только один раз. Если его использовать для корректировки сети, оно фактически превратится в контрольное множество. Установка верхнего флажка (рис. 3.8) позволит задать контрольное множество и соответствующий вектор целей (возможно, тот же, что при обучении). Установка нижнего флажка позволяет задать тестовое множество и вектор целей для него.
Обучение сети можно проводить в разных режимах. В связи с этим, в NNTool предусмотрено две вкладки, представляющие обучающие функции: рассмотренная ранее вкладка Train и "Адаптация" (Adapt). Adapt вмещает вкладку информация адаптации (Adaption Info), на которой содержатся поля, схожие по своему назначению с полями вкладки Training Info и выполняющие те же функции и вкладку параметры адаптации (Adaption Parameters). Последняя содержит единственное поле "Проходы" (passes). Значение, указанное в этом поле, определяет, сколько раз все входные векторы будут представлены сети в процессе обучения. Параметры вкладок "Train" и "Adapt" в MATLAB используются функциями train и adapt, соответственно.
Выявление показателей, влияющих на валовую прибыль предприятия
Пусть требуется на основе экспертных данных выявить факторы, наиболее сильно влияющие на ежемесячную прибыль предприятия (табл. 3.3).
Для начала проведем предварительный анализ задачи, выделив наименее важные показатели. Это нужно потому, что количество наборов параметров близко к количеству самих параметров, и в данном представлении задача может не иметь видимого решения. В результате ряд следующих показателей может быть исключен из дальнейшего рассмотрения:
объем реализации по линии бюджета поскольку данные являются неполными, содержат пропуски;
затраты поскольку мы уже рассматриваем их по частям: на материалы и зарплату;
объем реализованной продукции, рентабельность, так как они связаны жесткой аналитической зависимостью с другими показателями;
численность практически постоянная величина;
цена единицы продукции никак не связана с прибылью и другими показателями.
В результате оставлены факторы: затраты на материалы, объем заработной платы, производительность, курс доллара.
При выполнении лабораторной работы используйте навыки, приобретенные при выполнении предыдущей лабораторной работы.
Таблица 3.3 − Показатели, характеризующие деятельность предприятия
Фактор |
ед. изм. |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
Объем реализации (без НДС) |
тыс. руб. |
354 |
310 |
277 |
302 |
327 |
211 |
263 |
168 |
278 |
292 |
305 |
326 |
в том числе бюджет |
тыс. руб. |
20 |
37 |
27 |
30 |
18 |
10 |
19 |
|||||
Затраты, в том числе |
тыс. руб. |
255 |
281 |
319 |
251 |
215 |
203 |
208 |
172 |
323 |
262 |
239 |
475 |
материалы |
тыс. руб. |
53 |
58 |
44 |
63 |
38 |
32 |
41 |
33 |
45 |
50 |
39 |
58 |
заработная плата |
тыс. руб. |
122 |
126 |
126 |
104 |
112 |
74 |
102 |
76 |
123 |
117 |
107 |
218 |
Численность |
чел. |
59 |
62 |
62 |
63 |
62 |
62 |
62 |
63 |
63 |
62 |
62 |
62 |
Производительность |
руб./чел. |
6003 |
5002 |
4474 |
4798 |
5273 |
3410 |
4237 |
2673 |
4406 |
4711 |
4833 |
5253 |
Цена ед. продукции |
руб. |
0,08 |
0,08 |
0,08 |
0,06 |
0,07 |
0,06 |
0,08 |
0,08 |
0,12 |
0,10 |
0,15 |
0,15 |
Рентабельность |
% |
38,9 |
10,4 |
20,4 |
52,0 |
4,1 |
26,3 |
11,5 |
27,4 |
||||
Курс $ |
руб. |
6,0 |
6,1 |
6,1 |
6,1 |
6,2 |
6,2 |
6,2 |
7,9 |
16,1 |
16,0 |
17,9 |
20,1 |
Прибыль валовая |
тыс. руб. |
99 |
29 |
-42 |
51 |
112 |
8 |
55 |
-4 |
-45 |
30 |
66 |
Задание
Цель работы не точность прогноза, а знакомство с основными понятиями и принципами функционирования нейронных сетей.
Обязательно для изучения:
Контрольные вопросы