Автор работы: Пользователь скрыл имя, 23 Мая 2013 в 17:44, дипломная работа
В рамках дипломного проекта необходимо разработать программу, которая по-зволяла бы студенту изучать особенности построения и использования нейронных сетей.
Разрабатываемая программа должна позволять студенту создавать нейронную сеть и обучать ее для решения определенных задач. Программа должна предоставлять удобный интерфейс и давать студенту возможность сохранять модель созданной нейрон-ной сети и загружать ее для дальнейших исследований. Также программа должна иметь локальную базу данных для хранения информации, необходимой для обучения сети.
Перечень условных обозначений 3
Введение 5
1 Анализ технологии обработки информации в предметной области и определение требований к АСОИ 6
1.1 Сбор и анализ исходной информации 6
1.2 Определение требований к проектируемой АСОИ 17
1.2.1 Диаграмма вариантов использования 21
1.2.2 Диаграмма деятельности 33
1.2.3 Модель данных 34
Выводы 37
2 Создание модели АСОИ 38
2.1 Диаграмма классов 38
2.2 Диаграмма последовательности 45
2.3 Диаграмма состояний 46
2.4 Диаграмма деятельности 54
2.5 Диаграмма компонентов 54
2.6 Диаграмма размещения 57
Выводы 58
3 Разработка программного обеспечения 59
3.1 Выбор среды программирования 59
3.2 Разработка таблиц баз данных АСОИ 59
3.3 Разработка запросов 59
3.4 Разработка форм 61
3.5 Разработка вычислительных процедур обработки данных 62
3.6 Тестирование программного обеспечения 65
Заключение по проекту 69
4 Экономическая часть 70
4.1 Общая постановка к технико-экономическому обоснованию 70
4.2 Расчет трудоемкости (производительности) 71
4.3 Расчет единовременных затрат 76
4.4 Расчет годовых текущих издержек 80
4.5 Расчет показателей экономической эффективности 83
4.6 Организация внедрения системы и рекомендации по ее эксплуатации 84
4.7 Выводы и рекомендации 85
5 Охрана труда 86
5.1 Идентификация и анализ вредных и опасных факторов в проектируемом объекте 86
5.2 Технические, технологические, организационные решения по устранению опасных и вредных факторов, разработка защитных средств 89
5.3 Разработка мер безопасности при эксплуатации объекта проектирования 93
6 Энерго- и ресурсосбережение 96
Список использованных источников 104
В настоящее время используется огромное разнообразие обучающих алгоритмов.
Целью обучения сети является такая подстройка ее весов, чтобы приложение некоторого множества входов приводило к требуемому множеству выходов. Для краткости эти множества входов и выходов будут называться векторами. При обучении предполагается, что для каждого входного вектора существует парный ему целевой вектор, задающий требуемый выход. Вместе они называются обучающей парой. Как правило, сеть обучается на многих парах. Например, входная часть обучающей пары может состоять из набора нулей и единиц, представляющего двоичный образ некоторой буквы алфавита. На рисунке 7 показано множество входов для буквы «А», нанесенной на сетке. Если через квадрат проходит линия, то соответствующий нейронный вход равен единице, в противном случае он равен нулю. Выход может быть числом, представляющим букву «А», или другим набором из нулей и единиц, который может быть использован для получения выходного образа. При необходимости распознавать с помощью сети все буквы алфавита, потребовалось бы 26 обучающих пар. Такая группа обучающих пар называется обучающим множеством (массивом).
Рисунок 7 – Распознавание изображения
Перед началом обучения всем весам должны быть присвоены небольшие начальные значения, выбранные случайным образом. Это гарантирует, что в сети не произойдет насыщения большими значениями весов, и предотвращает ряд других патологических случаев. Например, если всем весам придать одинаковые начальные значения, а для требуемого функционирования нужны неравные значения, то сеть не сможет обучиться.
Обучение сети обратного распространения требует выполнения следующих операций:
Операции, выполняемые шагами 1 и 2, сходны с теми, которые выполняются при функционировании уже обученной сети, т. е. подается входной вектор и вычисляется получающийся выход. Вычисления выполняются послойно. На рисунке 8 сначала вычисляются выходы нейронов слоя j, затем они используются в качестве входов слоя k, вычисляются выходы нейронов слоя k, которые и образуют выходной вектор сети.
На шаге 3 каждый из выходов сети, которые на рисунке 8 обозначены OUT, вычитается из соответствующей компоненты целевого вектора, чтобы получить ошибку. Эта ошибка используется на шаге 4 для коррекции весов сети, причем знак и величина изменений весов определяются алгоритмом обучения (см. ниже).
После достаточного числа повторений этих четырех шагов разность между действительными выходами и целевыми выходами должна уменьшиться до приемлемой величины, при этом говорят, что сеть обучилась. Теперь сеть используется для распознавания и веса не изменяются.
На шаги 1 и 2 можно смотреть как на «проход вперед», так как сигнал распространяется по сети от входа к выходу. Шаги 3, 4 составляют «обратный проход», здесь вычисляемый сигнал ошибки распространяется обратно по сети и используется для подстройки весов. Эти два прохода теперь будут детализированы и выражены в более математической форме.
Проход вперед. Шаги 1 и 2 могут быть выражены в векторной форме следующим образом: подается входной вектор Х и на выходе получается вектор Y. Векторная пара вход-цель Х и Т берется из обучающего множества. Вычисления проводятся над вектором X, чтобы получить выходной вектор Y.
Как мы видели, вычисления в многослойных сетях выполняются слой за слоем, начиная с ближайшего к входу слоя. Величина NET каждого нейрона первого слоя вычисляется как взвешенная сумма входов нейрона. Затем активационная функция F «сжимает» NET и дает величину OUT для каждого нейрона в этом слое. Когда множество выходов слоя получено, оно является входным множеством для следующего слоя. Процесс повторяется слой за слоем, пока не будет получено заключительное множество выходов сети.
Этот процесс может быть выражен в сжатой форме с помощью векторной нотации. Веса между нейронами могут рассматриваться как матрица W. Например, вес от нейрона 8 в слое 2 к нейрону 5 слоя 3 обозначается . Тогда NET-вектор слоя N может быть выражен не как сумма произведений, а как произведение Х и W. В векторном обозначении . Покомпонентным применением функции F к NET-вектору N получается выходной вектор О. Таким образом, для данного слоя вычислительный процесс описывается следующим выражением:
. (6)
Выходной вектор одного слоя является входным вектором для следующего, поэтому вычисление выходов последнего слоя требует применения уравнения (6) к каждому слою от входа сети к ее выходу.
Обратный проход. Подстройка весов выходного слоя. Так как для каждого нейрона выходного слоя задано целевое значение, то подстройка весов легко осуществляется с использованием модифицированного дельта-правила. Внутренние слои называют «скрытыми слоями», для их выходов не имеется целевых значений для сравнения. Поэтому обучение усложняется.
На рисунке 9 показан процесс обучения для одного веса от нейрона р в скрытом слое j к нейрону q в выходном слое k. Выход нейрона слоя k, вычитаясь из целевого значения (Target), дает сигнал ошибки. Он умножается на производную сжимающей функции [OUT(1 – OUT)], вычисленную для этого нейрона слоя k, давая, таким образом, величину
δ = OUT(1 – OUT)(Target – OUT) (7)
Затем δ умножается на величину OUT нейрона j, из которого выходит рассматриваемый вес. Это произведение в свою очередь умножается на коэффициент скорости обучения η (обычно от 0,01 до 1,0), и результат прибавляется к весу. Такая же процедура выполняется для каждого веса от нейрона скрытого слоя к нейрону в выходном слое.
Следующие уравнения иллюстрируют это вычисление:
, (8)
, (9)
где – величина веса от нейрона p в скрытом слое к нейрону q в выходном слое на шаге n (до коррекции). Отметим, что индекс k относится к слою, в котором заканчивается данный вес, т. е. с которым он объединен. – величина веса на шаге n + 1 (после коррекции); – величина δ для нейрона q, в выходном слое k, – величина OUT для нейрона р в скрытом слое j.
Рисунок 8 – Настройка веса в выходном слое
Подстройка весов скрытого слоя. Рассмотрим один нейрон в скрытом слое, предшествующем выходному слою. При проходе вперед этот нейрон передает свой выходной сигнал нейронам в выходном слое через соединяющие их веса. Во время обучения эти веса функционируют в обратном порядке, пропуская величину δ от выходного слоя назад к скрытому слою. Каждый из этих весов умножается на величину δ нейрона, к которому он присоединен в выходном слое. Величина δ, необходимая для нейрона скрытого слоя, получается суммированием всех таких произведений и умножением на производную сжимающей функции:
. (10)
Когда значение δ получено, веса, питающие первый скрытый уровень, могут быть подкорректированы с помощью уравнений (8) и (9), где индексы модифицируются в соответствии со слоем.
Рисунок 9 – Настройка веса в скрытом слое
Для каждого нейрона в данном скрытом слое должно быть вычислено δ и подстроены все веса, ассоциированные с этим слоем. Этот процесс повторяется слой за слоем по направлению к входу, пока все веса не будут подкорректированы.
Несмотря на многочисленные успешные применения обратного распространения, оно не является панацеей. Больше всего неприятностей приносит неопределенно долгий процесс обучения. В сложных задачах для обучения сети могут потребоваться дни или даже недели, она может и вообще не обучиться. Длительное время обучения может быть результатом неоптимального выбора длины шага. Неудачи в обучении обычно возникают по двум причинам: паралича сети и попадания в локальный минимум [1].
Паралич сети. В процессе обучения сети значения весов могут в результате коррекции стать очень большими величинами. Это может привести к тому, что все или большинство нейронов будут функционировать при очень больших значениях OUT, в области, где производная сжимающей функции очень мала. Так как посылаемая обратно в процессе обучения ошибка пропорциональна этой производной, то процесс обучения может практически замереть. В теоретическом отношении эта проблема плохо изучена. Обычно этого избегают уменьшением размера шага η, но это увеличивает время обучения. Различные эвристики использовались для предохранения от паралича или для восстановления после него, но пока что они могут рассматриваться лишь как экспериментальные.
Локальные минимумы. Обратное распространение использует разновидность градиентного спуска, т. е. осуществляет спуск вниз по поверхности ошибки, непрерывно подстраивая веса в направлении минимума. Поверхность ошибки сложной сети сильно изрезана и состоит из холмов, долин, складок и оврагов в пространстве высокой размерности. Сеть может попасть в локальный минимум (неглубокую долину), когда рядом имеется гораздо более глубокий минимум. В точке локального минимума все направления ведут вверх, и сеть неспособна из него выбраться. Статистические методы обучения могут помочь избежать этой ловушки, но они медленны. Предложен метод, объединяющий статистические методы машины Коши с градиентным спуском обратного распространения и приводящий к системе, которая находит глобальный минимум, сохраняя высокую скорость обратного распространения.
Разработанная АСОИ представляет собой программный модуль для лабораторного практикума по созданию и исследованию нейронных сетей. Пользователем данной системы будет являться студент, выполняющий лабораторную работу.
Программа представляет собой Windows-приложение с использованием базы данных (для хранения обучающих массивов и пар) под управлением системы управления базами данных (СУБД) SQL Server 2005 Express. С помощью нее студент сможет создать модель нейронной сети, которую затем можно использовать для решения определенных задач. Также студенту будет дана возможность создавать обучающие массивы и использовать их для обучения нейронной сети. Программа также позволит студенту сохранять текущую модель нейронной сети в файл и загружать модель из файла. Подробная структура процесса взаимодействия студента с программой показана на диаграмме бизнес-процессов графической части.
Функциональные и нефункциональные требования к программе представлены на диаграмме требований графической части. Рассмотрим каждое из требований.
Таблица 2 – Функциональные требования к проектируемой АСОИ
1.0 - Есть возможность сохранить модель нейронной сети | |
«Functional» |
Студент может сохранить модель нейронной сети в файл (с расширением .nnt), который затем может использовать для загрузки в программу и продолжения работы. |
2.0 - Есть возможность создания новой модели нейронной сети или загрузки и изменения ранее созданной модели нейронной сети | |
«Functional» |
Студент может загрузить модель нейронной сети и менять ее структуру или создать новую модель. |
2.1 - Есть возможность задать количество слоев в сети | |
«Functional» |
Программа позволяет студенту создавать как однослойные, так и многослойные нейронные сети (максимальное число слоев 3). |
Продолжение таблицы 2
2.2 - Есть возможность задать количество нейронов в каждом слое | |
«Functional» |
Программа позволяет студенту задавать число нейронов в каждом слое сети (в диапазоне от 1 до 2 147 483 648). |
2.3 - Есть возможность задать тип активационной функции | |
«Functional» |
Программа позволяет студенту задавать тип активационной функции, которая будет использоваться во всех нейронах сети (линейная, сигмоидальная или гиперболический тангенс). |
2.4 - Есть возможность задать порог линейной активационной функции | |
«Functional» |
Программа позволяет студенту задавать значения порога линейной активационной функции (в случае ее выбора в соответствии с требованием 2.3). |
3.0 - Есть возможность опроса нейронной сети | |
«Functional» |
Программа позволяет студенту опросить сеть в соответствии со значениями входных сигналов. |
3.1 - Есть возможность задать набор входных сигналов | |
«Functional» |
Программа позволяет пользователю задавать значения входных сигналов и получить значения выходных сигналов, как результат опроса. |
4.0 - Есть возможность работы с обучающими массивами | |
«Functional» |
Программа позволяет студенту создавать обучающие массивы для дальнейшего их использования в алгоритме обучения сети. Все массивы и их элементы (обучающие пары) сохраняются в базе данных. |
4.1 - Есть возможность создать обучающий массив | |
«Functional» |
Программа позволяет студенту создавать обучающий массив (пустой) для дальнейшего его использования в алгоритме обучения нейронной сети. |
4.2 - Есть возможность изменить обучающий массив | |
«Functional» |
Программа позволяет студенту изменить элементы обучающего массива (обучающие пары). |
4.2.1 - Есть возможность создать обучающую пару | |
«Functional» |
Программа позволяет студенту создавать обучающие пары выбранного обучающего массива. |
4.2.2 - Есть возможность изменить обучающую пару | |
«Functional» |
Программа позволяет студенту менять обучающую пару (набор значений входных и выходных сигналов). |
4.2.2.1 - Есть возможность добавить входной сигнал | |
«Functional» |
Программа позволяет студенту задавать значение нового входного сигнала выбранной пары. |