Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
31
Добавлен:
20.03.2016
Размер:
367.62 Кб
Скачать

Лабораторная работа #1

Знакомство с программой моделирования искусственных нейронных сетей NNC1

(Neural Network Constructor)

Цель работы: ознакомиться с пользовательским интерфейсом, функциональными возможностями, командами программы NNC. Научиться создавать искусственные нейронные сети (ИНС) различной конфигурации, изменять функции нейронов, создавать обучающие последовательности и производить обучение ИНС различными методами.

Отчет о работе должен содержать: постановку задачи (объект с известным числом входов и выходов), обучающую последовательность, апробированные варианты структуры сети и результаты ее обучения (средняя абсолютная погрешность).

Далее следует описание NNC - интерактивной программы, с помощью которой можно вы­полнять компьютерное моделирование нейронных сетей прямого распространения. Она написана на языке высокого уровня DELPHI и работает под управлением операционной системы Microsoft Windows на IBM-совместимых компьютерах.

Ис­пользуя NNC, пользователь может легко создавать, обучать и использовать нейронные сети. Так как нейронные сети могут аппроксимировать любую непрерывную функцию, отображающую одно конечномерное пространство в другое с любой желаемой степе­нью точности, это позволяет пользователю создавать прогностические мо­дели в различных предметных областях. NNC v. 3.01 - свободное программное обеспе­чение и оно доступно в сети Интернет (адрес http://vkrepets.chat.ru/NNC.exe). Данная программа позволяет использовать до 60 входных нейронов, варьировать функцией нейрона, количеством слоев и связей сети. Она содержит в себе готовые алгоритмы обучения по следующим методам: покоординатный спуск, случайный поиск, метод Ньютона, статистический градиентный метод, комбинации этих методов.

Интерфейс NNC - однооконный. В единственном окне программа может отображать графическое представление нейронной сети, представле­ние нейронной сети в виде матрицы инцидентности и таблицу с данными, на основании которых обучается нейронная сеть. NNC предусматривает стандартный Microsoft Windows интерфейс пользователя для стандартных команд, как, например, открытие и сохранение файлов. NNC имеет строку меню, инструментальную панель и строку со­стояния. Пользователь может спрятать инструментальную панель и строку состояния. Достаточно полно все возможности программы представлены в сети Интернет по адресу http://lmgdd.ibmh.msk.su/NNC.

Пользователь может создавать новые нейроны, выбирать типы нейронов и уда­лять существующие нейроны. Также пользователь может перемещать нейроны, созда­вать новые связи и удалять существующие связи между двумя нейронами.

Здесь (см. рис.1) и далее представлено описание программы построения, настройки и эксплуатации нейронных сетей NNC.

Рис. 1. Главное меню программы

Управление построением, настройкой и эксплуатацией нейронных сетей настолько просто, что позволяет даже легко работать с программой. Создание нейронной сети может осуществляться с помощью манипулятора "мышь". Можно создавать и удалять нейроны и связи между ними, передвигать нейроны по полю и задавать типы нейронов, от которых зависит функция активации нейрона (см. рис.2).

Рис. 2. Допустимые манипуляции мыши

На этом этапе никакого контроля не проводится, то есть можно создавать произвольные нейронные сети. Также предусмотрена возможность сохранения и загрузки ранее созданных нейронных сетей.

После создания или загрузки существующей нейронной сети на экране монитора появляется ее изображение в виде графа, аналогичное изображению, показанному на рис. 3.

Рис. 3. Граф нейронной сети

После создания макета нейронной сети необходимо дополнить ее матрицей наблюдений и (по желанию) текстовым описанием нейронов. Для наполнения файла текстовым описанием нейронов и для исследования весов связей нейронной сети программой предусмотрено представление графа нейронной сети в виде матрицы инцидентности (см. рис. 4).

Рис. 4. Матрица инцидентности графа нейронной сети

Для наполнения нейронной сети информацией о матрице наблюдений предусмотрено следующее окно (см. рис. 5.).

Рис. 5. Матрица наблюдений

Вводить информацию можно с клавиатуры, но наиболее удобно делать это с помощью буфера обмена среды Windows. Экспорт и импорт данных программой не предусмотрен, поэтому, если существует потребность ввести в программу уже существующую матрицу наблюдений, имеет смысл воспользоваться электронными таблицами (типа Microsoft Excel) для импорта данных, а затем перенести их в программу построения нейронных сетей через буфер обмена (Clipboard).

Созданную и наполненную информацией нейронную сеть необходимо сохранить на жестком диске, так как при настройке и при эксплуатации сети необходимо ее присутствие на диске. Для удобства пользователя предусмотрено окно, содержащее информацию о нейронной сети. Оно вызывается в пункте меню View|Info... и выглядит, как показано на рис. 6.

Рис. 6. Окно информации о нейронной сети

Команды меню

File|New - Создает новый файл. Доступно с помощью сочетания Ctrl+N. Вынесено в виде кнопки на панель инструментов (Toolbar).

File|Open - Вызывает оно диалога открытия существующего файла. Доступно с помощью сочетания Ctrl+O. Вынесено в виде кнопки на панель инструментов.

File|Save - Сохраняет изменения, внесенные в текущий файл. Выполняется только при условии, что изменения имели место, то есть в том случае, если во втором поле строки состояния (Statusbar) имеется сообщение "modified". В случае отсутствия пути и имени файла на жестком диске ("Untitled" в заголовке программы) вызывает опцию "Save As...". Доступно с помощью сочетания Ctrl+S. Вынесено в виде кнопки на панель инструментов.

File|Save As... - Вызывает окно диалога сохранения файла.

File|Exit - Завершает работу программы. Доступно с помощью сочетания Ctrl+F4.

Edit|Copy - Копирует выделенную часть таблицы в буфер обмена (Clipboard). Работает в окне со списком нейронов и в окне с матрицей наблюдений. Доступно с помощью сочетания Ctrl+Ins. Вынесено в виде кнопки на панель инструментов.

Edit|Paste - Вставляет в таблицу информацию из буфера обмена. Работает в окне со списком нейронов и в окне с матрицей наблюдений. Доступно с помощью сочетания Shift+Ins. Вынесено в виде кнопки на панель инструментов.

Edit|Delete - Удаляет выделенную часть матрицы наблюдений. Работает только в окне с матрицей наблюдений. Доступно с помощью клавиши Del.

Edit|Select All - Выделяет таблицу целиком. Работает в окне со списком нейронов и в окне с матрицей наблюдений. Доступно с помощью сочетания Ctrl+A.

View|Graph - Активизирует окно с представлением нейронной сети в виде графа. Доступно с помощью сочетания Ctrl+G. Вынесено в виде фиксируемой кнопки на панель инструментов.

View|Labels - Активизирует окно со списком нейронов и представлением нейронной сети в виде матрицы инцидентности. Доступно с помощью сочетания Ctrl+L. Вынесено в виде фиксируемой кнопки на панель инструментов.

View|Data - Активизирует окно с матрицей наблюдений. Доступно с помощью сочетания Ctrl+D. Вынесено в виде фиксируемой кнопки на панель инструментов.

View|Grid - Фиксируемый переключатель. Удаляет/проявляет сетку в окне с представлением нейронной сети в виде графа.

View|Toolbar - Фиксируемый переключатель. Удаляет/проявляет панель инструментов (Toolbar).

View|Statusbar - Фиксируемый переключатель. Удаляет/проявляет строку состояния (Statusbar).

View|Scale|50% - Устанавливает масштаб отображения любого окна равным половине исходного размера.

View|Scale|100% - Устанавливает масштаб отображения любого окна равным исходному размеру.

View|Scale|200% - Устанавливает масштаб отображения любого окна равным 200% от исходного размера. На панель инструментов вынесены две кнопки "Zoom In" и "Zoom Out", позволяющие увеличивать и уменьшать масштаб отображения в два раза.

View|Info... - Вызывает окно с информацией о нейронной сети (см. рисунок). Доступно с помощью сочетания Ctrl+I.

Run|Reset links - Устанавливает веса существующих связей нейронной сети равными случайным числам из диапазона (-1.0,-0.1) или диапазона (0.1,1.0).

Run|Check ejections - Проверяет корректность матрицы наблюдений на наличие больших отклонений.

Run|Parameters|Epsilon - Устанавливает параметр точности, до которой будут проводиться вычисления при настройке нейронной сети. Возможные значения параметра - 1.0e-3, 1.0e-4, 1.0e-5, 1.0e-6, 1.0e-7, 1.0e-8.

Run|Parameters|Metrics - Устанавливает параметр показателя степени метрического пространства, в котором будут проводиться вычисления при настройке нейронной сети. Возможные значения параметра - 1, 2, 4, 8 и 64. Параметр равный 1 соответствует метрическому пространству с метрикой l1, в котором расстояние вычисляется как сумма модулей. Параметр равный 2 соответствует евклидовому пространству с квадратичной метрикой. Параметр равный 4 соответствует метрическому пространству с метрикой l4, в котором расстояние вычисляется как сумма четвертых степеней. Параметр равный 8 соответствует метрическому пространству с метрикой l8, в котором расстояние вычисляется как сумма восьмых степеней. Параметр равный 64 соответствует метрическому пространству с метрикой l64, в котором расстояние вычисляется как сумма шестьдесят четвертых степеней. Пространство с такой метрикой уже является близким по своим свойствам к метрическому пространству с равномерной метрикой.

Run|Parameters|Algorithm - Выбирает алгоритм минимизации, используемый при настройке нейронных сетей. В описываемой версии доступны пять различных алгоритмов минимизации. Это метод покоординатного спуска (Coordinate-wise descent), метод случайного поиска (Random search), метод наискорейшего спуска (Steepest descent), метод статистического градиента (Statistical gradient method) и метод Ньютона (Newton method). Также доступны две схемы минимизации. Это случайный поиск плюс метод Ньютона (Random + Newton) и метод наискорейшего спуска плюс метод Ньютона (Steepest descent + Newton).

Run|Options|Reset links before full training - Фиксируемый переключатель. По умолчанию не включен. Включенный переключатель устанавливает веса существующих связей нейронной сети равными случайным числам из диапазона (-1.0,-0.1) или диапазона (0.1,1.0) перед началом полного обучения нейронной сети.

Run|Options|Check ejections before tuning - Фиксируемый переключатель. По умолчанию не включен. Включенный переключатель проверяет корректность матрицы наблюдений на наличие больших отклонений перед началом обучения нейронной сети или перед коррекцией существующих связей.

Run|Options|Check ejections before run - Фиксируемый переключатель. По умолчанию включен. Включенный переключатель проверяет корректность матрицы наблюдений и вновь введенных данных на наличие больших отклонений перед эксплуатацией настроенной нейронной сети.

Run|Options|Create robust model - Фиксируемый переключатель. По умолчанию включен. Включенный переключатель мультипликативно добавляет функцию влияния в минимизируемый функционал, что позволяет робастно оценивать параметры нейронной сети и строить робастные модели.

Run|Tuning|Correcting weights of existing links - Корректирует параметры нейронной сети с целью минимизации в метрическом пространстве с метрикой, выбранной в пункте меню "Run|Parameters|Metrics". Численная минимизация ведется методом, обозначенным в пункте меню "Run|Parameters|Algorithm". Перед коррекцией параметров нейронной сети проводится анализ ее связей. Автоматически удаляются входящие связи в нейроны типа "Constant" и типа "Input". Также автоматически удаляются исходящие связи из нейронов типа "Output". В случае обнаружения циклов или обратных связей в нейронной сети пользователю выдается сообщение об обнаружении и процесс настройки не запускается. В процессе минимизации на мониторе появляется окно, показанное на рис. 7.

Рис. 7. Окно информации о выполнении расчета

В этом режиме пользователь может переключиться в основное окно, но все функции, связанные с модификацией, открытием и сохранением файлов являются недоступными.

Run|Tuning|Find global minimum - Корректирует параметры нейронной сети, стартуя из случайной точки метрического пространства. Делает 100 итераций или работает до прерывания пользователем. Остальные свойства аналогичны свойствам, описанным в разделе "Run|Tuning|Correcting weights of existing links". По окончании поиска или после прерывания пользователем выбирается решение, соответствующее более глубокому минимуму функционала.

Run|Tuning|Full training with regularization - Корректирует параметры нейронной сети, реализует процедуру скользящего контроля и отбрасывает малозначимые связи в соответствии с критерием Фишера. В этом режиме пользователь может переключиться в основное окно, но все функции, связанные с модификацией, открытием и сохранением файлов являются недоступными. В случае прерывания процесса пользователем выбирается набор значений весов связей нейронной сети, соответствующий лучшему показателю качества на контроле.

Run|Run|Run mode - Переходит в режим / выходит из режима "Run mode". В этом режиме также все функции, связанные с модификацией, открытием и сохранением файлов являются недоступными. Также отключаются функции, связанные с настройкой и коррекцией параметров нейронной сети. При входе в "Run mode" программа автоматически переходит в окно с матрицей наблюдений и устанавливается в первый свободный ряд ниже матрицы наблюдений. В этом режиме можно вводить новую информацию в строки матрицы наблюдений ниже тех строк, на основании которых проводилось обучение нейронной сети. Остальные клетки становятся недоступными для модификации. Вносить новую информацию наиболее удобно через буфер обмена (Clipboard). В этом режиме во втором поле строки состояния (Statusbar) сообщение "Modified" не появляется. При выходе из режима "Run mode" вся вновь введенная информация исчезает.

Run|Run|Run - Находит модельное значение для всех строк, отображающихся в окне с матрицей наблюдений. В окне появляется дополнительный столбец с заголовком "Model value", в котором отображаются рассчитанные нейронной сетью значения. В случае включенных переключателей проводится предварительный анализ выборки на наличие больших отклонений. При переключении в другое окно дополнительный столбец исчезает.

Help|Mouse - Вызывает окно с информацией о возможностях использования манипулятора "мышь" при создании нейронной сети (см. рис. 2).

Help|About... - Вызывает окно с информацией о программе (см. рис. 8).

Рис. 8. Окно информации о программе

Построение нейронной сети

Чтобы создать, настроить и эксплуатировать модель, основанную на нейронной сети, следует выполнить несколько простых шагов.

Шаг 1. Создание макета нейронной сети. Определить, какое количество независимых переменных будет содержать модель. Пусть таких переменных будет P штук. Зависимая переменная, как правило, ровно одна на каждую нейронную сеть. После запуска программы NNC в окне с представлением нейронной сети в виде графа следует поместить ровно P нейронов, имеющих тип "Input". Затем там же следует поместить один нейрон, имеющий тип "Output" и один нейрон, имеющий тип "Constant". Новые нейроны создаются путем двойного щелчка по левой кнопке мыши. Нейрон появляется в ближайшем к указателю мыши узле сетки, если этот узел свободен. При необходимости, нейроны можно передвигать по полю в любое место. Типы нейронов выбираются из всплывающего меню, которое появляется при щелчке по правой кнопке мыши, указывающей на желаемый нейрон. Затем на поле следует поместить желаемое количество скрытых нейронов и определить их типы. Лишние или ошибочно созданные нейроны удаляются путем выбора соответствующего пункта во всплывающем меню, которое появляется при щелчке по правой кнопке мыши, указывающей на желаемый нейрон. После создания нейронов, их следует соединить связями. Новая связь создается (удаляется, если она уже существовала) в результате движения мыши от одного нейрона к другому с нажатой правой кнопкой. На этом этапе можно соединять любые нейроны в произвольном порядке. Однако рекомендуется не создавать циклы и обратные связи, поскольку в случае обнаружения таковых процесс настройки не будет запущен.

Шаг 2. Наполнение сети описанием нейронов. Переключиться в окно с представлением нейронной сети в виде матрицы инцидентности. Окно является информационным. Единственный столбец, который может быть изменен пользователем - столбец с текстовым описанием нейронов. В него следует ввести информацию с клавиатуры или через буфер обмена.

Шаг 3. Наполнение нейронной сети матрицей наблюдений. Переключиться в окно с матрицей наблюдений. В окне отображается P+1 столбцов, соответствующих P нейронам, имеющим тип "Input" и 1 нейрону, имеющему тип "Output". Столбец, соответствующий нейрону с типом "Output" находится на последнем месте. Столбцы, соответствующие нейронам с типом "Input" упорядочены по возрастанию их номеров. В строки матрицы ввести информацию об имеющихся наблюдениях. Внизу матрицы всегда присутствует одна резервная строка. Именно в нее следует вводить новую информацию. Как только строка перестает быть пустой, она приобретает номер, а следом за ней появляется новая резервная строка. Также как и в случае с наполнением сети текстовым описанием нейронов, ввод информации можно осуществлять с клавиатуры или с помощью буфера обмена. Пропуски в данных матрицы наблюдений не допускаются (заполняются нулями). Для построения качественной модели, обладающей достаточной устойчивостью к небольшим изменениям исходных данных количество наблюдений должно превышать количество связей нейронной сети в 5-10 раз. В этом случае можно с уверенностью говорить, что настроенная нейронная сеть адекватно аппроксимирует генеральную совокупность, представленную конечной выборкой. Если количество наблюдений превышает количество связей нейронной сети в 2-5 раз, то с большей или меньшей степенью уверенности мы можем построить модель, адекватную генеральной совокупности. При превышении количеством наблюдений количества связей нейронной сети в 1-2 раза мы можем говорить только о более или менее корректной аппроксимации предложенной выборки. В случае если количество наблюдений не превышает количества связей, мы можем получить идеальное качество настройки на обучающее множество, однако прогностические способности такой модели могут оказаться крайне низкими.

Шаг 4. Сохранение сети. После наполнения файла всей необходимой информацией, а также после внесения любых изменений в имеющуюся нейронную сеть во втором поле строки состояний появляется надпись "Modified". Это означает, что файл был изменен, и его полезно сохранить на жестком диске компьютера. Это можно сделать путем нажатия на кнопку с изображением дискеты или путем одновременного нажатия на Ctrl+S или путем выбора в меню пункта File|Save.

Шаг 5. Проверка корректности исходных данных. Выбрать в меню пункт Run|Check ejections. В случае если программа обнаруживает большое отклонение в некотором наблюдении, пользователю выдается сообщение, аналогичное показанному на рисунке. В скобках указывается, на сколько конкретно данное наблюдение отличается от медианы выборки. По окончании проверки пользователю выдается сообщение о некорректности (см. рис. 9) или корректности (см. рис. 10) предложенного для построения модели набора данных.

Рис. 9. Сообщение о некорректности набора данных

для построения модели

Рис. 10. Сообщение о корректности данного набора данных

Если набор данных является корректным, можно переходить к шагу 6. В противном случае, пользователю следует обратить особое внимание на обозначенные наблюдения и, либо исправить имеющиеся в них ошибки, либо удалить их, либо оставить все как есть. Однако в последнем случае можно получить не совсем адекватную модель.

Шаг 6. Выбор параметров модели. Выбрать точность вычислений, метрику метрического пространства, алгоритм минимизации и признак робастности модели. По умолчанию точность вычислений устанавливается 1е-5, пространство является евклидовым, а алгоритм минимизации является случайным поиском. Робастность по умолчанию присутствует.

Шаг 7. Поиск "хорошего" решения. Выбрать в меню пункт Run|Tuning|Find global minimum. Перед запуском настройки нейронной сети проводится анализ ее связей. Автоматически удаляются входящие связи в нейроны типа "Constant" и типа "Input". Также автоматически удаляются исходящие связи из нейронов типа "Output". В случае обнаружения циклов или обратных связей в нейронной сети пользователю выдается сообщение об обнаружении и процесс настройки не запускается. При поиске глобального минимума на мониторе появляется окно, показанное на рис. 11.

Рис. 11. Окно информации о результатах выполненного расчета

В процессе поиска глобального минимума программа корректирует параметры нейронной сети, стартуя из случайной точки метрического пространства. Программа делает 100 итераций или работает до прерывания пользователем. По окончании поиска или после прерывания пользователем автоматически выбирается решение, соответствующее более глубокому минимуму функционала.

Шаг 8. Регуляризация решения. В случае выполнения шага 7, переключатель пункта меню Run|Options|Reset links before full training должен быть отключен. Также, в случае выполнения шага 7 и если позволяют вычислительные мощности, рекомендуется увеличить точность вычислений на 1 порядок (например, если было 1е-5, сделать 1е-6). Выбрать в меню пункт Run|Tuning|Full training with regularization. Перед запуском процедуры регуляризации проводится анализ связей нейронной сети, аналогичный описанному в предыдущем разделе анализу. В этом режиме программа реализует процедуру скользящего контроля и отбрасывает малозначимые связи в соответствии с критерием Фишера. В процессе реализации процедуры скользящего контроля на мониторе появляется окно, показанное на рис. 12.

Рис. 12. Окно информации о результатах упрощения сети

Программа работает до тех пор, пока качество при настройке превышает максимальное качество при контроле или до прерывания пользователем. После окончания работы или в случае прерывания процесса пользователем программа автоматически выбирает набор значений весов связей нейронной сети, соответствующий лучшему показателю качества на контроле. В этом режиме на диске создается файл с расширением *.tmp. Этот файл содержит информацию о показателях качества (R2 - квадрат парного коэффициента корреляции, MAE - средняя абсолютная ошибка, MSE - среднеквадратичная ошибка и ME - максимальная ошибка при настройке и при контроле) и веса связей нейронной сети для каждого шага процедуры регуляризации.

Шаг 9. Коррекция решения. Выбрать в меню пункт Run|Tuning|Correcting weights of existing links. Программа корректирует параметры нейронной сети с целью более качественной минимизации в метрическом пространстве с метрикой, выбранной в пункте меню Run|Parameters|Metrics. Численная минимизация ведется методом, обозначенным в пункте меню Run|Parameters|Algo-rithm. Перед коррекцией параметров нейронной сети проводится анализ ее связей, аналогичный вышеописанному анализу. В процессе минимизации на мониторе появляется окно, показанное на рис. 11. После окончания коррекции весов на диске создается файл с расширением *.txt. В этом файле содержится информация о времени настройки, количестве тактов работы, используемом алгоритме. Также в нем приводится таблица фактических и вычисленных нейронной сетью значений и, если включен признак робастности модели, вес каждого наблюдения, с которым оно входило в процесс обучения. В конце файла расположена информация о качестве модели (R2 - квадрат парного коэффициента корреляции, MAE - средняя абсолютная ошибка, MSE - среднеквадратичная ошибка и ME - максимальная ошибка при настройке). Такой файл создается на каждой итерации поиска глобального минимума и на каждой итерации процедуры скользящего контроля.

Шаг 10. Эксплуатация настроенной нейронной сети. Выбрать в меню пункт Run|Run|Run mode. При входе в этот режим программа автоматически переходит в окно с матрицей наблюдений и устанавливается в первый свободный ряд ниже матрицы наблюдений. В этом режиме можно вводить новую информацию в строки матрицы наблюдений ниже тех строк, на основании которых проводилось обучение нейронной сети. Остальные клетки становятся недоступными для модификации. Вносить новую информацию наиболее удобно через буфер обмена. В этом режиме во втором поле строки состояния сообщение "Modified" не появляется. Все функции, связанные с модификацией, открытием и сохранением файлов являются недоступными. Также отключаются функции, связанные с настройкой и коррекцией параметров нейронной сети. После введения новой информации следует выбрать в меню пункт Run|Run|Run. Программа автоматически найдет модельные значения для всех строк, отображающихся в окне с матрицей наблюдений. В окне появляется дополнительный столбец с заголовком "Model value", в котором отображаются рассчитанные нейронной сетью значения. В случае включенных переключателей проводится предварительный анализ выборки и вновь введенных данных на наличие больших отклонений. Информацию можно скопировать в буфер обмена и перенести для анализа в любое приложение Windows. При переключении в другое окно дополнительный столбец исчезает. При выходе из режима "Run mode" (повторный выбор в меню пункта Run|Run|Run mode) вся вновь введенная информация исчезает.

Вопросы для самопроверки

  1. Какие действия необходимо выполнить для определения структуры ИНС в программе NNC?

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

  3. Охарактеризуйте различные алгоритмы обучения сети по методам: покоординатного спуска, случайного поиска, градиентному методу. Эти вопросы ранее изучались Вами в курсе «Численные методы».