Текст работы - Московский институт электроники и математики

advertisement
ПРАВИТЕЛЬСТВО РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение
высшего профессионального образования
Национальный исследовательский университет
«Высшая школа экономики»
Московский институт электроники и математики
Факультет Прикладной математики и кибернетики
Кафедра Высшей математики
Дипломная работа
по специальности 230401.65 «Прикладная математика»
Разработка оболочки системы поддержки
принятия решений, основанной на
эволюционном подходе
Студент группы М105
Бухаров О.Е.
Руководитель
доцент, к.т.н.
Боголюбов Д.П.
Консультант
аспирант
Мизикин А.А.
Зав. кафедрой
доцент, к.ф.-м.н.
Кузьмина Л.И.
Москва 2013
Аннотация
В данной работе рассматриваются преимущества эволюционного
подхода для задач поддержки принятия решений. Анализируются методы
прогнозирования и выявления сложных неочевидных зависимостей.
Приводятся
преимущества
использования
нейронных
сетей
для
определения сложных неочевидных зависимостей между параметрами
систем и осуществления прогнозирования. Предложена и реализована
модель оболочки системы поддержки принятия решений, основанная на
связке интервальных нейронных сетей и генетического алгоритма.
Рассматривается техника использования графических процессоров для
решения
неграфических
распараллеливания
задач. Описывается
предложенной
оболочки.
модель эффективного
Детально
описывается
реализованная оболочка системы поддержки принятия решений и ее
оптимизация за счет использования параллельных вычислений на
графическом процессоре видеокарты.
2
Оглавление
Введение ............................................................................................................... 4
Глава 1. Введение в предметную область ........................................................ 8
1.1. Анализ предметной области .................................................................... 8
1.2. Анализ общих методов поддержки принятия решений ...................... 18
1.3 Актуальность создания алгоритма прогнозирования временных
рядов. ............................................................................................................... 22
1.4 Постановка задачи ................................................................................... 24
Глава 2. Методы реализации алгоритмов прогнозирования временных
рядов ................................................................................................................... 26
2.1 Использование интервальных нейронных сетей .................................. 26
2.2 Использование генетических алгоритмов ............................................. 31
2.3 Использование архитектуры параллельных вычислений на
графических процессорах ............................................................................. 40
Глава 3. Реализация прогнозирования временных рядов ............................. 45
3.1 Функциональная схема системы прогнозирования временных рядов и
детали реализации .......................................................................................... 45
3.2 Моделирование процесса прогнозирования временных рядов .......... 49
Заключение ........................................................................................................ 53
Список использованной литературы: ............................................................. 56
Приложение. Элементы исходного кода оболочки СППР ........................... 61
Ядро прямого распространения сигнала в нейронной сети ...................... 61
Ядро обучения сети на основе обратного распространения ошибки ....... 63
Приложение. Публикации по теме диплома сделанные во время работы
над дипломом..................................................................................................... 69
3
Введение
В условиях постоянно нарастающих объемов информации и
повышения сложности технических, социальных, экономических и прочих
систем, человеку, задействованному в управлении этими системами,
становится все труднее оценить всю поступающую в органы управления и
непосредственно к лицу, принимающему решения, информацию, а также
оценить влияние множества различных факторов на поведение системы.
Это мешает ему оперативно и безошибочно выбирать оптимальное
решение.
Для достижения наилучших результатов, как в качественном, так и в
количественном отношении и при этом минимизации рисков серьезных
убытков и аварий, в современной науке активно развивается направление
систем поддержки принятия решений. Перед данными системами ставится
задача помочь людям, принимающим решение, в условиях большого
количества данных и сложных реакций управляемой системы на
проявление внешних факторов. Детально и качественно анализируя
предметную область, системы поддержки принятия решений должны
оперативно
предоставлять
информацию
о
пользователю
наблюдаемой
или
полную
и
объективную
управляемой
системе,
спрогнозированные показатели, варианты оптимальных или необходимых
решений для разных условий.
Предпосылкой к использованию систем поддержки принятия
решений чаще всего бывает наличие следующих факторов:

жесткая конкуренция, отсутствие права на ошибку;

необходимость оперативного планирования;

необходимость оперативно выявлять негативные тенденции;

необходимость анализировать в реальном времени большое
количество информации для прогнозирования и оценки
состояния управляемой или наблюдаемой системы.
4
текущего
Одной из наиболее
распространенных задач применения систем
поддержки принятия решений является прогнозирование. Очень часто в
условии сложных систем невозможно обнаружить точное решение или
найти точные значения параметров системы в будущем. Во многих таких
ситуациях бывает полезно иметь приблизительную оценку ключевых
показателей систем, основанную на анализе состояния системы в прошлом
и настоящем.
Следует заметить, что большинство систем находится в постоянном
развитии - их последующее состояние зависит от ряда предыдущих
состояний и от последовательности их прохождения. В системах могут
наблюдаться тенденции к периодическим изменениям и цикличности.
Исходя из этого, при анализе системы, помимо статистического
разнообразия значений параметров, следует учитывать их взаимосвязи со
временем. Таким образом, информацию о состоянии системы в прошлом и
настоящем можно рассматривать как наборы временных рядов.
Несмотря на то, что разработано достаточно большое количество
систем поддержки принятия решений и статистических приложений,
позволяющих прогнозировать временные ряды, редкие из них способны
давать значимые результаты в условии больших систем со сложными
взаимозависимостями и недоопределенными данными [1]. Также, для
получения
конкурентного
преимущества,
повышения
точности
и
оперативности прогнозирования и улучшения качества результатов,
создание более оперативной и более точной системы поддержки принятия
решений всегда будет оставаться актуальным. Яркой иллюстрацией
данного утверждения могут служить автоматические системы торговли на
биржах (торговые роботы). Несмотря на то, что эти системы не могут
полностью предсказать цену активов, многие из них могут достаточно
точно спрогнозировать некоторые скачки в краткосрочной перспективе и
оперативно отреагировать на изменение курса актива. И чем точнее и
быстрее торговый робот предскажет скачок, тем большую прибыль он
5
сумеет принести, пока остальные игроки не отреагируют на сложившуюся
ситуацию.
Целью данной работы является разработка оболочки (без привязки к
конкретной предметной области) системы поддержки принятия решений
для прогнозирования значений временного ряда, которая могла бы
работать с недоопределенными данными. Прогноз должен строиться
системой на основе базы данных статистической информации, хранящейся
в виде временных рядов.
Возможность
работы
с
недоопределенными
данными
в
рассматриваемой оболочке достигается за счет работы с интервальными
значениями. Для этого в работе рассмотрена интервальная арифметика и
разработан алгоритм обучения интервальных нейронных сетей.
Улучшение показателей точности для систем со сложными связями
реализуется за счет использования связки из интервальных нейронных
сетей и генетических алгоритмов. В работе рассматривается использование
нейронных сетей и генетических алгоритмов по отдельности, а также
предлагается принципиально новая схема их взаимодействия.
Скоростные характеристики улучшаются за счет использования
архитектуры распараллеленных вычислений на процессорах графического
адаптера (видеокарты). Для этого был произведен анализ архитектуры
параллельных вычислений и разработан метод параллельной обработки
полученной связки эволюционных алгоритмов.
Научная новизна состоит в повышении точности прогнозирования
параметров управляемой или наблюдаемой системы, необходимых лицу,
принимающему решение, а также в повышении скорости расчетов,
необходимых для осуществления прогнозирования или оценивания.
Практическая
значимость
работы
заключается
программного продукта, реализующего полученные методы.
6
в
разработке
Апробация работы
Основные
положения
дипломной
работы
докладывались
и
обсуждались на:
1.
Научно-технической конференции студентов, аспирантов и
молодых специалистов, МИЭМ НИУ ВШЭ, 2013.
2.
Всероссийская
Научно-техническая
конференции
"Новые
информационные технологии", МГУПИ, 2013.
Публикации
Всего автором опубликовано 3 научных работы, из них одна в
журналах из перечня ВАК:
«Разработка оболочки системы поддержки принятия решений с
использованием эволюционных алгоритмов» - журнал "Промышленные
АСУ и Контроллеры", М.: Издательство «НАУЧТЕХЛИТИЗДАТ», 2013 г.
- в печати.
7
Глава 1. Введение в предметную область
1.1. Анализ предметной области
Системы поддержки принятия решений
Лицу,
принимающему
решение,
в
процессе
нахождения
оптимального решения и прогнозирования возможных результатов часто
приходится иметь дело с системой сложных зависимостей между
различными факторами или ресурсами, влияющими на его цели или
желаемые исходы. Чтобы принять правильное решение, максимально
удовлетворяющее условиям и поставленным целям, наблюдаемую систему
необходимо подвергнуть качественному всестороннему анализу. Чем
глубже лицо, принимающее решение, изучит все факторы и учтет их
влияние друг на друга, тем качественнее будет принимаемое им решение
или прогноз. Чем сложнее анализируемая система и чем больше вносящих
свой вклад факторов, тем труднее и более длительно по времени ее
изучение [1].
Под сложной системой здесь и далее понимается система,
взаимодействующие между собой части (подсистемы) которой, в свою
очередь, тоже являются системами. В результате взаимодействий
подсистем, система обретает новые свойства. Если эти взаимодействия
сложны или неочевидны для наблюдателя, то и анализ системы будет
затруднен.
Принятие решений по сложным системам (таким как управление
организациями,
промышленными
процессами,
инвестиционными
портфелями или контроля ядерных электростанций и т.д.) зачастую
является слишком сложной задачей для познавательных способностей
человека. Даже если отдельные взаимодействия между внутренними
переменными системы хорошо изучены, предсказать, как система будет
реагировать на редкие внешние воздействия бывает трудно.
8
Существует большое количество эмпирических свидетельств того,
что человеческое интуитивное суждение и принятое им решение могут
быть далеки от оптимальных. Количество ошибок и неточностей,
допущенных человеком, увеличивается пропорционально сложности
системы и обратно пропорционально количеству времени, отведенного на
принятие решения. Так как во многих случаях качество и оперативность
принимаемых решений жизненно важны, помощь в принятии решений
стала одним из основных прикладных направлений науки и техники в
последние десятилетия.. Научные дисциплины, такие как статистика,
экономика и исследование операций разработали достаточное количество
различных методов, направленных на выбор рационального решения. В
последнее время качество этих методов улучшается за счет использования
накопленных знаний в таких областях, как информатика, когнитивная
психология и искусственный интеллект. Предлагаемые методы и
алгоритмы реализуются в виде компьютерных программ, в качестве
автономных
инструментов
или
в
качестве
интегрированных
вычислительных сред для комплексного решения. Общее название таких
сред - системы поддержки принятия решений (СППР). Наиболее общее
определение СППР дано в литературе [2]. СППР – это интерактивные
компьютерные системы, которые помогают пользователям судить о
процессе, выбирать решение или прогнозировать результаты. Другое
название, используемое как синоним СППР - система, основанная на
знаниях. Данное название относится к их попыткам формализовать знания
предметной области для использования автоматических рассуждений.
Системы поддержки принятия решений набирают популярность в
различных областях, в том числе бизнесе, машиностроении, военном деле
и медицине. Они особенно ценны в ситуациях, в которых объем доступной
информации намного превышает возможности человека, принимающего
решения, и в задачах, для решения которых точность и оперативность
имеют значение. Системы поддержки принятия решений могут помочь
9
человеку в изучении предметной области за счет интеграции различных
источников
информации,
обеспечивая
доступ
к
необходимым
интеллектуальным знаниям, помогая при этом структурировать решения.
Они могут также поддерживать выбор среди четко определенных
альтернатив, опираясь на формальные подходы, такие как методы
инженерной экономики, исследования операций, статистики и теории
принятия решений. СППР могут использовать методы искусственного
интеллектадля
решения
эвристических
проблем,
неразрешимых
формальными
методами.
Надлежащее
применение
инструментов
поддержки
принятия
решений
повышает
производительность
и
эффективность, а также дает предприятиям сравнительное преимущество
перед конкурентами, позволяя принимать оптимальные решения для
технологических процессов и их параметров, для бизнес-планирования
операций, логистики, или инвестиций [2].
Чтобы проанализировать предметную область и сформировать
решение СППР могут применять различные методы такие, как поиск
информации, знаний или закономерностей в базах данных, рассуждение на
основе прецедентов, ситуационное моделирование и ситуационный анализ,
интеллектуальный анализ информации, моделирование субъективных
представлений экспертов о ситуации, нейронные сети, генетические
алгоритмы и др.
Интеллектуальной СППР, или ИСППР называют систему поддержки
принятия решений построенную на базе алгоритмов искусственного
интеллекта. Благодаря таким ИСППР можно осуществлять нахождение
оптимального
решения
даже
в
многокритериальных
слабоструктурированных или неструктурированных задачах.
Классификация СППР
Вследствие отсутствия строгого единого определения для систем
поддержки принятия решений, мы также сталкиваемся с отсутствием
общепринятой классификации. Наиболее общая классификация ранжирует
10
СППР в соответствии с основными выполняемыми ими операциями, от
ориентированных на данные систем до модель-ориентированных систем
(Alter S.L. 1980). Данная классификация была основана на анализе 56
различных СППР и включает в себя следующие семь типов [3]:

Файловая система, предоставляющая пользователю удобный
доступ к элементам данных.

Системы анализа данных, позволяющие обрабатывать данные с
использованием автоматизированных приложений, специализированных
для определенных задач или общих методов.

Системы анализа данных, которые обеспечивают доступ к ряду
ориентированных на поиск решений баз данных и малых моделей.

Бухгалтерские и финансовые модели, целью которых является
просчет последствий возможных действий.

Наглядные (репрезентативные) модели, которые оценивают
последствия действий на основе имитационных моделей.

Оптимизационные модели, целью которых является выработка
основных поведенческих принципов, путем создания оптимального
решения в соответствии с серией ограничений.

Модели-советчики,
которые
выполняют
логическую
обработку, позволяющую найти конкретное решение для хорошо
структурированной или глубоко изученной задачи.
Кроме данной системы типов исследователями СППР были
разработаны
и
другие,
основанные
на
различных
критериях
классификации: по типу взаимодействия с пользователем [4], по типу
оказываемой поддержки [5], и другим [6, 7].
Следует заметить, что исходя из проведенных исследований [8],
количество производимой человечеством информации увеличивается
более чем в два раза за период времени равный двум годам. В связи с этим
все
труднее
искать
и
получать
нужные
данные
из
общего
информационного потока. Для того чтобы справиться с этой задачей
11
сейчас активно развивается новая область Data Mining, которая стремиться
решить проблему поиска новых знаний, необходимой информации и
взаимного
влияния
различных
факторов
в
больших
массивах
неструктурированных данных. Также для решения задачи извлечения
информации
из
огромных
объемов
неструктурированных
данных
значительного многообразия активно развивается новый класс подходов,
методов и инструментов - "Большие данные" (Big Data). Данный класс
противопоставляет себя стандартным системам управления базами данных
за счет использования средств массово-параллельной обработки постоянно
увеличивающихся в масштабе неструктурированных данных [9].
Одним из наиболее сложных и трудоемких процессов является
процесс получения знаний на первых шагах создания интеллектуальных
экспертных систем (ЭС) и СППР. Этот процесс не всегда достигает
желаемого результата в силу того, что для слабоструктурированных
предметных областей базы данных часто содержат разнотипную,
неполную, а иногда и нечеткую, и даже противоречивую информацию.
Класс слабоструктурируемых проблем (ill-structured) затрагивает широкую
область реальных ситуаций, которым присущи следующие признаки:
неточные двусмысленные определения, изменяющиеся понятия, большая
зависимость ситуаций от контекста, наличие противоречивости и
неполноты
имеющихся
ненадежность
и
данных,
неопределенность
разнотипность
информации
неоднозначность,
[10].
Исходя
из
вышесказанного, привлечение интеллектуальных методов Data Mining для
решения существующих проблем является одним из перспективных
решений. В рамках области Data Mining исследователи различают 6
различных типов задач:

поиск зависимостей,

классификация по группам,

выявление аномалий и отклонений,

регрессионный анализ,
12

обобщение,

нахождение шаблонов возникновения подпоследовательностей
в последовательностях данных.
Последний
тип
задач
все чаще привлекает к себе
новых
исследователей, так как он находит широкое применение в анализе
действий
пользователей
интернета,
нахождении
лингвистических
зависимостей в текстах на естественных языках, анализе истории болезней
для определения возможных заболеваний, определении аминокислотной
или нуклеотидной последовательности ДНК, а также в предсказании
биржевых показателей.
Определение оболочки системы поддержки принятия решений
Под термином оболочка СППР в данной работе понимается "пустая"
экспертная система, т.е. экспертная система без привязки к конкретной
предметной области и базы знаний. Преимущество оболочки в том, что для
создания из нее готовой экспертной системы она не требуются изменение
кода. Необходимо лишь ее обучение специалистом по предметной области
или на основе заполнения базы знаний. Однако, в случае если предметная
область плохо укладывается в используемую в оболочке модель, обучить
ее будет трудно.
Актуальность прогнозирования временных рядов
Одной из наиболее перспективных и сложных задач является
прогнозирование временных рядов - наблюдаемых в разные моменты
времени статистических данных о значении каких-либо переменных
изучаемого процесса. Каждая единица статистических данных называется
отсчетом или измерением, также допустимо называть его уровнем на
соответствующий ему момент времени. Принципиальным отличием
временного ряда от обычной выборки заключается в том, что помимо
статистических характеристик и разнообразия выборки при анализе
учитываются связь данных со временем [11]. Задачи прогнозирования
13
временных рядов встречаются во многих сферах жизнедеятельности
человека. Перечислю некоторые из них:
Диагностические задачи в медицине. Объектами данных задач
1)
являются
пациенты.
Признаками
-
результаты
обследований,
присутствующие симптомы заболеваний и применявшиеся ранее методы
лечения. Примеры признаков: возраст, пол, наличие всевозможных болей,
венозное и артериальное давление, частота сердечных сокращений и т.д.
Признаковое описание пациента является формализованной историей
болезни. Накопив достаточное количество прецедентов в электронном
виде, можно решать различные задачи:

классифицировать
вид
заболевания
(дифференциальная
диагностика);

составить оптимальный режим и способ лечения;

предсказать продолжительность и исход заболевания;

оценить риск осложнений;

определить синдромы - наиболее характерные для данного
заболевания (совокупности симптомов).
Преимущества таких систем перед врачами заключается в том, что
они позволяют оперативно анализировать и обобщать большое количество
прецедентов, и принимать на их основе обоснованное решение.
2)
Задача прогнозирования спроса потребителя. Актуальна для
супермаркетов, торговых розничных сетей и оптовиков. Для качественного
управления торговой сетью важно с минимальной погрешностью
прогнозировать объёмы продаж для определенного товара на некоторое
количество дней вперёд. Опираясь на эти прогнозы, магазины планируют
объемы закупок, формируют ассортимент, определяют оптимальные цены.
Отличительной особенностью данной задачи является количество товаров,
которое может насчитывать десятки или даже сотни тысяч различных
наименований. Прогнозирование продаж и принятие решений по каждому
товару
«вручную»
заняло
бы
слишком
14
много
человеко-часов
и
потребовало
серьезных
затрат.
Данными,
на
основе
которых
осуществляется прогнозирование, являются временные ряды цен и
объёмов продаж по отдельным товарам и магазинам. Современные
технологии позволяют собирать эту информацию прямо с кассовых
аппаратов. Для увеличения качества прогнозов следует также принимать
во внимание различные внешние факторы, которые могут повлиять на
спрос,
такие
как
уровень
заработных
плат,
налогов,
инфляции,
географические условия, социально-демографические условия, рекламные
кампании, акции конкурирующих магазинов и поставщиков, политические
санкции и др.
3)
Инвестиционные задачи на финансовом рынке. Для данной
задачи умение хорошо прогнозировать цены на финансовые инструменты
самым непосредственным образом превращается в прибыль. Если
инвестор ожидает, что ценная бумага вырастет, он покупает ее, желая
продать позже по более высокой цене. И, наоборот, ожидая снижение
цены, инвестор продаёт ценные бумаги, чтобы позже выкупить их обратно
по более низкой цене. Задача инвестора в том, чтобы правильно
предугадать направление будущего изменения цены - роста или падения.
Все
большей
популярностью пользуются
автоматизированные
торговые стратегии - алгоритмы, позволяющие принимать торговые
решения без человеческого участия. На данный момент многие банки и
предприятия уже используют автоматизированные торговые системы
(торговые роботы), позволяющие приносить доход своим владельцам.
Цель этих систем упростить работу биржевых игроков, а в будущем и
полностью взять на себя осуществление торговых операций.
Некоторые из параметров перечисленных задач могут быть
недоопределены, заданы неточно или в виде интервала значений.
Здесь и далее под недоопределенными данными понимается
информация,
содержащая
недоопределенные
значения,
являющиеся
оценкой реальных значения на основе доступной в данный момент
15
информации. Такое значение является промежуточным между полной
определенностью (точное значение) и полной неопределенностью (весь
универсум). Например, измеренная величина плюс-минус погрешность
измерителя, интервал цен, заданный максимальной и минимальной ценой
валюты в течение дня на валютном рынке. Некоторые измеряемые
показатели могут изменяться несколько раз за относительно короткий
промежуток времени, и учет каждого их значения является менее удобным
чем интервалов их изменения.
Для работы с такими данными логично использовать интервальные
значения - не одно значение, а континуальное множество значений в
промежутке между парой значений, задающей границы интервала. Для
интервала характерно свойство, что вместе с любыми двумя числами он
содержит и любое, лежащее между ними.
Для некоторых задач интервал также являться и решением, например
при прогнозировании изменения котировок, оптимального режима работы
или температурного диапазона.
Классификация временных рядов
Существует несколько различных классификаций временных рядов.
Рассмотрим основные из них:
1.
По характеру представления измерений:
 ряды средних величин;
 относительных показателей;
 абсолютных показателей.
2.
По типу временного параметра:
 Моментные временные ряды. Для временных рядов такого
типа измерения отвечают за состояние наблюдаемых величин в
определенные моменты времени.
 Интервальные временные ряды. Для интервальных рядов
измерения отвечают за состояние наблюдаемых величин за
определенные временные промежутки.
16
По длине промежутка между моментами времени, к которым
3.
относятся измерения:
 полные (равноотстоящие) - когда измерения следуют друг за
другом через равные промежутки времени или моменты начала
и окончания измерений отстоят друг от друга всегда на равный
временной интервал;
 неполные (неравноотстоящие) - в том случае, если описанные
выше условия не выполняются.
По способу формирования данных временные ряды делятся на:
4.
 детерминированные - являющиеся значениями какой-либо
некоторой
неслучайной
функции
от
времени
(ряд
упорядоченной по месяцам информации о продолжительности
месяца в днях);
 случайные - являются результатом реализации некоторого
случайного процесса.
В зависимости от наличия основной тенденции:
5.

стационарные
ряды
характеристики
со
-
не
временем
меняющие
свои
основные
(математическое
ожидание
постоянно и автокорреляционная функция процесса зависит
только от величины интервала между измерениями);
 нестационарные
-
не
отвечающие
вышеприведенному
критерию.
Говоря о прогнозировании временных рядов, в данной работе
имеется ввиду задача изучения и анализа временного ряда наблюдений над
некоторыми параметрами исследуемого процесса для обучения на их
основе интервальной нейронной сети. В дальнейшем с ее помощью
находить интервалы значений прогнозируемой величины на заданный
момент в будущем (к моменту в времени t + ∆t). Величина ∆t именуется
глубиной прогнозирования.
17
1.2. Анализ общих методов поддержки принятия решений
Для
анализа
прогнозирования
большого
поведения
объема
информации
управляемой
системы
в
интересах
и
выработки
управляющего решения разработаны и используются различные методы.
Рассмотрим основные из них:
1. Информационный поиск - процесс поиска среди большого
количества текстов или документов таких, которые содержат информацию
по интересующему предмету, соответствуют заданному условию поиска
или содержат в себе необходимые данные, факты, сведения [12].
Обычно, информационный поиск состоит из трех шагов:
 Формулировка критериев поиска и создание запроса;
 Выявление
документов,
в
которых
может
содержаться
интересующая информация;
 Детальный
поиск
в
отобранных
документах
и
оценка
результатов поиска.
2. Деревья принятия решений - представляет собой граф с одной
начальной вершиной. На ребрах которого записаны атрибуты, от которых
зависит целевая функция. В конечных вершинах (из которых не выходят
ребра) указаны значения целевой функции, а в остальных вершинах
указываются атрибуты, по которым различаются случаи. Чтобы получить
решение с использованием дерева, необходимо пройти по нему до
конечной вершины (листа) и подсчитать соответствующее значение с
помощью целевой функции [13].
3. Кластерный анализ - набор различных алгоритмов классификации,
позволяющих на основе сходства частных признаков или набора признаков
разбивать
на
отдельные
группы
наблюдаемые
наборы
признаков
(ситуации). В случае правильного применения алгоритма кластеризации,
после его работы справедливо следующее утверждение - для любого
набора признаков, набор оказавшийся с ним в одном кластере более схож с
ним, чем любой набор из другого кластера. А значит и решение,
18
принимаемое по наблюдаемому набору признаков должно быть схоже с
решениями в данном кластере.
4. Рассуждение на основе прецедентов - подход предполагающий
решение новых задач за счет использования и/или адаптации решений для
уже известных задач.
Обычно, формирование решения на основе прецедентов состоит из
четырех шагов:
 Выбор схожего прецедента из базы данных;
 Адаптация решения по найденному прецеденту к решаемой
задаче;
 Проверка созданного решения;
 Добавление в базу данных информации по решенной задачи
вместе с ее решением.
5. Имитационное моделирование - это метод, направленный на
изучение наблюдаемой реальной системы путем замены ее достаточно
точной моделью. Проводя эксперименты с моделью, исследователь (лицо,
принимающее решение) может без каких-либо рисков изучить какие
факторы и как влияют на систему, а также смоделировать результат того
или иного решения с целью выявить наилучшее [14].
6. Генетические алгоритмы - алгоритмы для решения сложных
неформализованных задач, применяются при очень больших размерах
задач и при отсутствии упорядоченности в исходных данных. Данные
алгоритмы подражают эволюционной теории Дарвина, осуществляя поиск
решения путем последовательного улучшения наборов потенциальных
решений. Улучшение каждого следующего набора происходит за счет
скрещивания и мутаций лучших представителей предыдущего набора
решений.
7. Когнитивное моделирование - метод, применяющийся для поиска
решения
в
слабоструктурированных
19
системах
с
многоаспектными
взаимосвязанными процессами, без достаточного количества информации
о развитии процессов.
В данной модели информация о системе представляется в виде
набора
понятий
и
связывающей
их
причинно-следственной
сети,
называемой когнитивной картой. Данная карта является отражением
субъективных представлений эксперта о законах и закономерностях,
присущих моделируемой системе. Для получения оптимальной стратегии
управления
при
помощи
когнитивной
карты
используют
методы
аналитической обработки, направленные на исследование структуры
системы и получение прогнозов её поведения при различных стратегиях
управления [15].
8. Статистические методы прогнозирования - математические
методы прогнозирования, осуществляющие прогнозирование на основе
объективных данных о наблюдаемом процессе.
Статистические методы ставят перед собой задачу нахождения
некоторого функционала от наблюдаемых параметров процесса, значения
которого являлись бы прогнозом. От этого функционала требуется
минимизация математического ожидания квадрата нормы разности между
его значением в некоторый будущий момент времени и реальным
значением прогнозируемой величины. В зависимости от конкретного
метода прогнозирования на функционал накладываются различные
ограничения.
9. Нейронные сети - методы, моделирующие биологическую модель
нервных систем для решения задач прогнозирования, классификации или
управления. Достигается это путем воспроизведения достаточно сложных
зависимостей с большим числом переменных на входе.
Основным преимуществом нейронных сетей является способность к
обучению. Благодаря этому нейронные сети способны автоматически
приобретать знания, но не способны эти знания объяснить. Обученная
нейронная сеть представляется пользователю некоторым черным ящиком.
20
Одной из наиболее популярных нейросетевых моделей является
многослойный персептрон, основанный на послойном взаимодействии
искусственных нейронов. Каждый нейрон слоя получает на вход сумму
взвешенных выходов нейронов предыдущего слоя. На выходе каждый
нейрон имеет значение своей функции активации от входа.
Для обучения многослойного персептрона применяют алгоритм
обратного распространения ошибки, основанный на методе градиентного
спуска.
10. Системы с нечёткой логикой - системы, работающие с
лингвистическими
переменными
и
аппаратом
нечеткой
логики,
допускающим принятие функцией принадлежности значений в интервале
от 0 до 1 и логические операции над нечеткими множествами.
Системы с нечеткой логикой хорошо подходят для объяснения
получаемых с их помощью результатов, но не могут сами приобретать
знания на основе которых должно приниматься решение.
Системы с нечеткой логикой имеет смысл использовать в
следующих случаях:
 для сложных процессов, в отсутствии других стандартных
математических моделей;
 если знания эксперта о процессах или системе можно
сформулировать только в лингвистической форме.
Основными недостатком систем с нечеткой логикой является то, что
набор нечетких правил и вид функции принадлежности задается
субъективно человеком-экспертом и может оказаться неправильным или
неполным [16].
11. Экспертные методы прогнозирования - методы, опирающиеся в
прогнозировании на оценки людей-экспертов.
Одним из распространенных экспертных методов является метод
Дельфи. Суть метода состоит в опросе различных экспертов и обобщения
их мнений в единую оценку. Для прогнозирования этим методом каких21
либо показателей необходимо выделить экспертную группу специалистов
в этой области, провести несколько опросов, анкетирований или мозговых
штурмов, проверить согласованность мнений экспертов, проанализировать
полученные выводы и сформировать итоговое решение.
1.3
Актуальность
создания
алгоритма
прогнозирования
временных рядов.
Рассмотрим подробнее наиболее распространенные статистические
методы прогнозирования временных рядов [17 и 18]:
Таблица 1.
Распространенные статистические методы прогнозирования временных рядов
Статистический метод
Экстраполяционные
методы
прогнозирования
Предпосылки для
применения
Во временном ряду
наблюдается тренд
или долгосрочные
тенденции
Методы
корреляционного
анализа данных
Наблюдается
зависимость между
значениями разных
временных рядов
Модели, в параметры
которых
закладывается один из
видов интервенции
(устойчивое
скачкообразное,
устойчивое
постепенное,
скачкообразное
временное)
Временной ряд с
резкими
изменениями
тенденции процесса
под внешним или
внутреннем
воздействием
(обычно внешним)
Пример модели
y = a0 + a1t + a2t2
+…antn+ε
(линейная регрессия)
X 1  1  
1
( X  2 )
2 2
y = a0 + a1t + a2t2 +
w*1{t1<t<t2}
(степенной полином со
скачкообразным
временным
воздействием)
22
Пример данных
Статистический метод
Предпосылки для
применения
Гармонические модели У временного ряда
или модели
присутствуют
авторегрессии
постоянные
скользящего среднего колебания
относительно тренда
с неизвестным в
начале исследования
периодом
GARCH модели Наблюдения с
обобщенная
большими и малыми
авторегрессионная
отклонениями от
условно
средних имеют
гетероскедастичная
тенденцию к
модель
образованию
кластеров
Приведем
позволяющих
краткую
строить
Пример модели
Пример данных
p
d X t  c   ai d X t i 
i 1
q
  b j t j   t
j 1
ARIMA(p,d,q)
y t  x 't   u t
p
   0    i u t2i 
2
t
i 1
q
   j t2 j
j 1
GARCH(p,q)
сравнительную
оценки
характеристику
параметров
или
методов,
осуществлять
прогнозирование, исключив из рассмотрения остальные:
Таблица 2
Сравнение методов прогнозирования временных рядов
Метод
Требование к Возможность
Конечное
Скорость
анализа
квалификации самостоятельного количество информации
пользователя
извлечения
возможных принятия решения
знаний из данных решений
Деревья
принятия небольшие
отсутствует
да
низкая
присутствует
да
высокая
в малой степени
да
высокая
в малой степени
нет
низкая
решений
Кластерный анализ
средние
Рассуждения на основе средние
прецедентов
Статистические методы большие
прогнозирования
Нейронные сети
небольшие
присутствует
нет
высокая
Экспертные методы
средние
присутствует
нет
низкая
23
и
Рассмотрев существующие методы можно прийти к следующим
выводам:
 Существующие методы испытывают трудности в нахождении
переменных оказывающих наибольшее влияние на прогнозируемую
величину. Особенно при наличии большого числа таких переменных и
сложных нелинейных зависимостей между ними и прогнозируемой
величиной.
 Редкие методы, помимо статистических, позволяют работать с
недоопределенными данными.
 Не существует легкого в применении универсального (не
зависящего от конкретной предметной области) метода, требующего
небольших временных затрат.
1.4 Постановка задачи
Рассмотрев задачу поддержки принятия решений с использованием
методов
прогнозирования
существующие
подходы
или
к
оценки
её
заданного
решению,
параметра,
можно
и
сформулировать
следующие требования к разрабатываемой оболочке:
1.
должен
Алгоритм, на основе которого будет работать оболочка СППР,
обеспечивать
интересующего
максимальную
значения
при
точность
наличии
прогнозирования
сложных
неочевидных
зависимостей между параметрами.
2.
Должна
быть
обеспечена
возможность
работы
с
недоопределёнными данными.
3.
Быстродействие
итоговой
реализации
должно
быть
достаточным для прогнозирования оценок временных рядов не прибегая к
использованию
суперкомпьютеров
(группы компьютеров).
24
или
вычислительных
кластеров
Таким образом, исходя из требований к оболочке СППР приходим к
следующей постановке задачи:
1.
Модифицировать
алгоритм
обратного
распространения
ошибки для обучения интервальных нейронных сетей, позволяющих
работать с интервальными данными.
2.
Модифицировать генетический алгоритм для определения
оптимальной
структуры
интервальной
нейронной
сети
и
набора
параметров на основании которых стоит осуществлять прогнозирование, а
также количества информации об этих параметрах для оперативного и
точного решения.
3.
Реализовать
разработанный
алгоритм
с
использованием
архитектуры распараллеленных вычислений на процессорах графического
адаптера, для сокращения временных затрат.
4.
Применить
полученную
систему
к
реальным
задачам
прогнозирования, для сравнения с существующими системами и методами.
25
Глава 2. Методы реализации алгоритмов прогнозирования
временных рядов
2.1 Использование интервальных нейронных сетей
В работе [19] доказывается, что любая непрерывная функция n
переменных может быть с наперед заданной точностью приближена
нейронными сетями с использованием любой непрерывной функции
активации одного переменного.
Являясь моделью сложной многомерной нелинейной регрессии,
нейронная
сеть
потенциально
превосходит
по
точности
вышеперечисленные методы, а также обладает рядом преимуществ[20]:
а)
Возможность работы с шумовыми и неинформативными
входными сигналами – нейронная сеть самостоятельно может определить
их непригодность для решения поставленной задачи и явно отбросить их,
обнулив соответствующие коэффициенты.
б)
Возможность
получать
в
качестве
входных
данных
разнотипную информацию – непрерывнозначную и дискретнозначную,
качественную и количественную, что представляется нелегкой задачей для
многих методов.
в)
Возможность одновременно решать несколько задач при
наличии у нейронной сети нескольких выходов.
г)
Существуют
алгоритмы,
позволяющие
решать
обратные
задачи, используя нейронные сети, обученные для решения прямой задачи.
Например, можно на выходе нейронной сети подключить новую
нейронную сеть и обучить её таким образом, чтобы на выходе были
входные данные для первой нейронной сети. Таким образом, можно
получить решение задачи, которую остальные методы могут решить лишь
в обратную сторону.
26
д)
Нейронная сеть имеет меньшие требования к квалификации
пользователя, чем, например, сложные статистические модели способные
давать аналогичные результаты.
е)
Изначально задав синаптические веса нейронной сети, можно
воссоздать и проверить предполагаемые статистические модели, а также
улучшить их путем тренировки сети [21].
Интервальные нейронные сети
В случае прогнозирования интервальных значений необходимо
использовать
интервальные
нейронные
сети.
Как
наглядно
проиллюстрировано в работе профессора Ishibuchi [22], при применении
«обычных» НС могут возникнуть ошибки прогнозирования, связанные с
превышением нижней границы прогнозируемого интервала над верхней.
Рисунок 1 Слева интервальная нейронная сеть, справа две стандартные
нейронные сети. Вертикальными линиями изображены выходные интервалы
обучающих наборов.
Интервальная нейронная сеть – это система соединённых и
взаимодействующих между собой интервальных нейронов, имеющих на
входе и на выходе значения заданные в виде интервала (не одно значение,
а континуальное множество значений в промежутке между парой
значений, задающей границы интервала).
27
u11
u21
f
[X1L:X1U]
X1
X1
Input 1
[Y1L:Y1U]
u12
X1
f
Output 1
f
Output k
X2
Xn
f
X1n
X1
Xm2
u2k
[XnL:XnU]
[YkL:YkU]
u1m
Input n
Xn
Xm
f
Рисунок 2 Схема интервальной нейронной сети с одним скрытым слоем (n – число
входных нейронов, m – число скрытых нейронов, k – число выходных нейронов)
На каждый из входных нейронов подается интервальное значение, на
основе которого планируется получить прогноз. У входных нейронов на
выходе находится то же значение, что и на входе. Для всех остальных
нейронов, на выходе мы получаем интервальные значения, получаемые по
формуле:
 N

Y  f   wi X i  ui  ,
 i 1

где Y - выход нейрона сети, wi- вес i -го входа (для каждого нейрона свой),
f - функция активации, N - число входов нейрона, ui - вес смещения (у
каждого нейрона свой), Xi – интервальное значение, поданное на i-ый вход
нейрона[6]. Значение Y вычисляется с учетом правил интервальной
арифметики:
A  B  [a L , aU ]  [bL , bU ] 
 [min{ a  b | a [aL , aU ], b [bL , bU ]}, max{ a  b | a [aL , aU ], b [bL , bU ]}] ,
где  – любая операция. Например:
A  B  [a L , aU ]  [bL , bU ]  [aL  bL , aU  bU ] ,
A  B  [a L , aU ]  [bL , bU ]  [a L  max{ bL , bU }, aU  min{ bL , bU }] ,
28
[a L  w, aU  w], w  0
,
A  w  [a L , aU ]  w  
[aU  w, a L  w], w  0
A  B  [aL , aU ]  [bL , bU ]  [min{ a L bL , aU bU , aL bU , aU bL }, max{ a L bL , aU bU , a L bU , aU bL }] .
Использование интервальных значений позволяет прогнозировать и
использовать в качестве входных параметров:
 Стандартные
интервальные
параметры
(цена
открытия/закрытия, покупки/продажи),
 Интервальные значения, позволяющие сократить количество
входных значений (вместо ежеминутного курса пускать на вход сети
интервал от минимальной до максимальной цены за час или день),
 Величины, значения которых из-за неточности измерительных
приборов искажены ошибками округления,
 Случайные величины (принимающие значения на интервале).
 Обычные – не интервальные параметры, приравняв нижнюю и
верхнюю границу интервала.
На
основе
статей
[22,
23]
разработан
алгоритм
обучения
интервальной сети (обобщение алгоритма обратного распространения
ошибки):
Обозначим входы нейронной сети как I i  [ I iL , I iU ] ; выходы скрытого
слоя
H j  f ( Net j )
-
,
где
f – функция

num _ inp
num _ inp
Net j   w ji  I i   j    w ji  I iL   w ji  I iU   jL ;
i 1
i 1
 i 1
w

0
w
ji
ji  0

num _ inp
выходы
выходного
слоя

num _ hid
num _ hid
L
   wkj  H j   wkj  H Uj   kL ;
j 1
 j 1
w

0
w
0
kj
kj

- Ok  f ( Netk ) ,
num _ inp
w
i 1
w ji 0
ji
I
активации,
где Netk 
num _ hid
U
j
значения Tk  [t kL , t kU ] .
29


  w ji  I    ;
i 1

w ji 0

num _ inp
/U
i


wkj  H   wkj  H   

j 1
j 1

wkj  0
wkj  0

num _ hid
L
j
U
k
а
L
i
num _ hid
w
j 1
;
kj
U
j
 H j k 
целевые
Функция ошибки: E 


2
2
1 num _ out L

t k  okL   t kU  okU  .

2 k 1

E 
 w ji (t  1) , где ,

 w ji 
Изменение весов происходит по правилу: w ji (t )    
 - коэффициент обучения,  - коэффициент импульса, а E / w ji
вычисляется согласно следующим расчетам:
Между скрытым и выходным слоем, если wkj  0 :




2


t kL  okL / 2 
t kU  okU
wkj
wkj
E / wkj 





2
/2 

okL net kL


L
L 2
t

o
/
2
 U t kU  okU
k
k
L
L
ok
net k wkj
ok


 



2
 


 
neto
net kU

wkj
U
k
U
k
/2
  t kL  okL okL 1  okL h Lj  t kU  okU okU 1  okU hUj ,
если wkj  0 :

 


E / wkj   t kL  okL okL 1  okL hUj  t kU  okU okU 1  okU h Lj ;
Между входным и скрытым слоем, если w ji  0 :


t kL  okL
w ji
E / w ji 





2

/2 


t kU  okU
w ji

2

/2 
L
L
U
U
okL  num _ out net kL okj net kj num _ out net kL okj net kj 

L
L 2
 L tk  ok  / 2
 
 

ok
net kL k 1, wkj 0 okjL net kjL w ji k 1, wkj 0 okjU net kjU w ji 

okU
 U
U 2


t

o
/
2
k
k
okL
net kU

 t
num _ out
k 1, wkj 0

 t
num _ out
k 1, wkj 0
U
k
L
k
 
 num _ out net kU okjU net kjU num _ out net kU okjL net kjL 
 
 

U
U
L
L
k 1, wkj 0 okj net kj w ji k 1, wkj 0 okj net kj w ji 
 
 okL okL 1  okL wkj h Lj (1  h Lj ) I iL 
 
 
 okU okU 1  okU wkj hUj (1  hUj ) I iU 
 t
num _ out
k 1, wkj 0
 t
 
 
 
 okL okL 1  okL wkj hUj (1  hUj ) I iU 
U
k
 okU okU 1  okU wkj h Lj (1  h Lj ) I iL ,
num _ out
k 1, wkj 0
 
L
k
если w ji  0 :
E / w ji  

 t
num _ out
k 1, wkj  0
U
k
 t
num _ out
k 1, wkj 0
L
k
 
 
 
 okL okL 1  okL wkj h Lj (1  h Lj ) I iU 
 
 oUk oUk 1  oUk wkj hUj (1  hUj ) I iL 
 t
num _ out
k 1, wkj 0
30
U
k
 t
num _ out
k 1, wkj  0
L
k
 
 
 okL okL 1  okL wkj hUj (1  hUj ) I iL 
 
 
 oUk oUk 1  oUk wkj h Lj (1  h Lj ) I iU .
2.2 Использование генетических алгоритмов
Если на вход нейронной сети подать значения всех известных
параметров, то это значительно замедлит скорость ее работы, а так же
увеличится вероятность нахождения сетью реально не существующих
зависимостей. С другой стороны, подавая на вход нейронной сети лишь
часть параметров, кажущихся лицу, принимающему решение, наиболее
значимыми, можно упустить из виду параметры, реально вносящие вклад в
значение прогнозируемой величины.
С целью решить эту задачу было разработано несколько алгоритмов.
Наиболее популярный для применения в нейронных сетях – алгоритм,
основанный на последовательном увеличении количества входных
параметров при помощи добавления наиболее значимого, пока добавление
нового параметра будет давать заметный результат. На первом шаге
алгоритма для каждого параметра обучается своя сеть с единственным
входом. Параметр, на основе которого сеть дает наименьшую ошибку при
прогнозировании, считается наиболее значимым и добавляется к числу
значимых. На каждом следующем шаге для каждого параметра, не
входящего в число значимых, обучается сеть, которой на вход подаются
все значимые плюс данный параметр. Параметр, "чья" сеть дает
наименьшую
ошибку,
при
прогнозировании
добавляется
к
числу
значимых. Алгоритм повторяется до тех пор, пока добавление нового
значимого параметра уменьшает ошибку прогнозирования.
Корреляционный анализ не подходит в качестве метода обработки
входных параметров для решения поставленной задачи, так как
корреляция отражает лишь линейную зависимость величин, но не отражает
их функциональной связности. Например, если вычислить коэффициент
корреляции между величинами A = sin(x) и B = cos(x), то он будет близок к
нулю, то есть (линейная) зависимость между величинами отсутствует.
Между тем, величины A и B очевидно связаны функционально по закону
sin2(x) + cos2(x) = 1.
31
В качестве метода решения данной задачи нами был выбран
генетический алгоритм. Генетический алгоритм - адаптивный метод
поиска,
который
все
чаще
используется
для
решения
задач
функциональной оптимизации. Он основан на генетических процессах
биологических организмов: биологические популяции развиваются в
течение нескольких поколений, подчиняясь законам естественного отбора
и принципу "выживает наиболее приспособленный" (survival of the fittest),
открытому Чарльзом Дарвином. Аналогично этому процессу, генетические
алгоритмы способны "развивать" - улучшать решения реальных задач, если
те закодированы соответствующим образом. Они оперируют наборами
"особей" - популяцией, где каждая особь представляет собой возможное
решение поставленной задачи. Каждой особи присваивается мера ее
приспособленности
в
соответствии
с
тем,
насколько
хорошо
представленное ей решение задачи. Оценивание качества решения
осуществляется при помощи функции приспособленности (целевой
функции).
Наиболее приспособленные особи отбираются для создания нового
поколения (воспроизведения потомства) с помощью перекрестного
скрещивания с другими особями популяции. В результате этого
появляются
новые
особи,
которые
сочетают
в
себе
некоторые
характеристики, унаследованные ими от родительских особей. Из-за того
что вероятность наименее приспособленных особей быть отобранными для
воспроизведения потомков меньше чем у остальных, следует, что те
свойства, которыми они обладали, будут постепенно исчезать из
популяции в процессе эволюции. Так воспроизводится каждое новое
поколение
допустимых
решений,
выбирая
более
качественных
представителей предыдущего поколения, скрещивая их и получая
множество новых решений. Каждое новое поколение, по отношению к
предыдущему, содержит большее количество характеристик, которыми
обладают хорошие члены предыдущего поколения. Благодаря этому, из
32
поколения в поколение, характеристики более качественных особей
распространяются по всей популяции. Таким образом, скрещивание
наиболее приспособленных особей позволяет исследовать наиболее
перспективные направления пространства поиска. В конечном итоге,
популяция будет сходиться в среднем к оптимальному решению
задачи [24].
Таблица 3. Сравнительная характеристика методов
Метод
Нахождение
линейной
зависимости
Последовательное
увеличение числа
параметров
Корреляционный анализ
Генетический алгоритм
Нахождение
функциональной
зависимости
Скорость получения
первых значимых
результатов
да
да
Низкая
да
да
нет
да
Высокая
Высокая
Опишем более подробно принцип работы генетического алгоритма
для взаимодействия с нейронными сетями.
Начальные
поколения
наборов
параметров
(особей)
для
генетического алгоритма определяются случайным образом. Далее,
наиболее приспособленными особями считаются наборы, обученные на
которых сети дают минимальные ошибки. Новое поколение особей
получается путем скрещивания наиболее приспособленных особей
предыдущего поколения и мутации.
Отбор особей для скрещивания осуществляется с использованием
"рулеточного
отбора".
Данный
вид
отбор
представляет
собой
вероятностный метод случайного выбора особей, где каждая особь имеет
априорную вероятность быть выбранной, соотносящуюся со значением ее
функции приспособленности. Каждой особи ставится в соответствие
относительная
приспособленность
-
число
из
диапазона
[0;1],
определяемое отношением значения ее целевой функции к сумме значений
целевых функций всех особей популяции. После определения отношений
33
отрезок [0;1] разбивается на число отрезков равное количеству особей в
популяции так, что длина каждого отрезка соответствует относительной
приспособленности соответствующей ему особи. Необходимое количество
раз запускается генератор непрерывной случайной величины, равномерно
распределенной на интервале [0,1] (базовой случайной величины). Особи
для скрещивания выбираются в соответствии с отрезками, на которые
попали
сгенерированные
величины.
Данный
метод
наглядно
проиллюстрирован на рисунке 3.
Рисунок 3 Иллюстрация рулеточного отбора
Преимуществом
данного
метода
является
возможность
использования для следующего поколения всех особей, сохраняя при этом
высокие шансы за более приспособленными. Это позволяет периодически
разбавлять генофонд и, благодаря этому, предотвращать сходимость к
локальному экстремуму целевой функции.
Скрещивание
(кроссовер)
происходит
следующим
образом
-
случайно определяется точка внутри хромосомы (набора параметров),
называемая точкой разрыва, в которой обе хромосомы делятся на две
части. Соединив первую часть одной хромосомы со второй частью другой
и наоборот, в результате получают две новые хромосомы. На каждом
цикле, для предотвращения преждевременной сходимости, с некоторой
низкой
вероятностью
осуществляется
мутация
особей,
которая
заключается в изменении отдельного гена-параметра в особи на другой из
общего набора параметров.
34
Рисунок 4 Иллюстрация процедуры кроссовера
Рисунок 5 Иллюстрация процедуры мутации
Получение новых поколений продолжается до тех пор, пока
популяция не сойдется или не будет превышено заданное пользователем
максимальное количество поколений.
Иллюстрация работы генетического алгоритма
Продемонстрируем принцип работы генетического алгоритма на
следующем простом искусственном примере [25]:
Рассмотрим
задачу
нахождения
хромосомы,
которая
имеет
максимальное количество единиц. Пусть хромосомы состоят из 12 генов, а
каждая популяция состоит из 8 хромосом. Следовательно, наилучшая
хромосома будет состоять из 12 единиц. Рассмотрим решение этой задачи
с использованием генетического алгоритма.
Создание
или
генерация
начальной
популяции.
Для
этого
потребуется сгенерировать 8 двоичных последовательностей, каждая
длиной по 12 бит. Их можно получить, например, разыгрывая базовую
случайную величину 96 раз (при получении значения из интервала [0;0.5]
приписывается значение 1, в случае значения из интервала (0.5,1] - 0) или
использованием
любого
генератора
двоичных
случайных
чисел.
Сформируем исходную популяцию, использовав любой из предложенных
методов:
35
ch1 = [010111101010];
ch2 = [110000101101];
ch3 = [111000001001];
ch4 = [100010000001];
ch5 = [001101011000];
ch6 = [100010000101];
ch7 = [001000001010];
ch8 = [110011010110].
Оценим приспособленность хромосом в созданной популяции. Так
как в нашем простом примере мы ищем такую хромосому, которая
содержит
максимальное
число
единиц.
Следовательно,
функция
принадлежности должна зависеть от количества единиц в хромосоме.
Будем обозначать функцию принадлежности символом F. А за ее значение
брать сумму генов хромосомы. В этом случае значения для каждой
хромосомы из полученной популяции будут следующие:
F(ch1) = 7;
F(ch2) = 6;
F(ch3) = 5;
F(ch4) = 3;
F(ch5) = 5;
F(ch6) = 4;
F(ch7) = 3;
F(ch8) = 7.
Хромосомы ch1 и ch8 имеют наибольшие значения функции
приспособленности. В данной популяции они являются основными
претендентами на решение задачи. Если условие остановки алгоритма не
выполняется, то на следующем шаге производится отбор особей текущей
популяции для последующего скрещивания.
Селекция производится рулеточным методом. Для каждой из 8
хромосом исходной популяции получаем сектора единичного отрезка,
выраженные
отношением
значения
функции
приспособленности
отдельной особи к сумме значений функции приспособленности всех
особей (рисунок 6).
v(ch1) = 0.175;
v(ch2) = 0.15;
v(ch3) = 0.125;
v(ch4) = 0.075;
v(ch5) = 0.125;
v(ch6) = 0.1;
v(ch7) = 0.075;
v(ch8) = 0.175.
36
Рисунок 6 Разбиение отрезка для рулеточного отбора
Розыгрыш
с
помощью
построенного
случайному выбору числа из интервала
разбиения
сводится
указывающего
[0,1],
к
на
соответствующий сектор отрезка, т.е. на соответствующую этому отрезку
конкретную хромосому.
Разыграем 8 случайных чисел:
0.79
0.44
0.9
0.74
0.04
0.86
0.48
0.23
ch8
ch4
ch2
Соответственно выбраны хромосомы:
ch7
ch3
ch8
ch6
ch1
Как видно, хромосома ch8 была выбрана дважды, а хромосома ch1 единожды. Эти хромосомы имеют наибольшее значение функции
принадлежности. Однако, также выбраны и хромосомы ch4 и ch7, имеющие
наименьшие
значения
функции
принадлежности.
На
основе
всех
отобранных хромосом будет создаваться следующее поколение.
Применение операторов скрещивания. В рассматриваемом примере
не будем подвергать отобранные для селекции хромосомы мутации, и всех
их добавим в популяцию хромосом, для скрещивания. Случайным образом
сформируем из этих хромосом четыре пары родителей:
ch7 и ch8
ch3 и ch1
ch6 и ch4
ch8 и ch2
Также случайным образом определим точки скрещивания для
каждой из пар. Для первой пары lk = 4, для второй lk = 3, для третьей lk = 11,
для четвертой lk = 5. Сам процесс скрещивания протекает так, как показано
на рисунке 7. По завершению работы оператора скрещивания получаем 4
пары потомков.
37
Первая пара родителей
[001000001010]
[110011010110]
Первая пара потомков
Скрещивание
[001011010110]
[110000001010]
lk = 4
Вторая пара родителей
[111000001001]
[010111101010]
Вторая пара потомков
Скрещивание
[111111101010]
[010000001001]
lk = 3
Третья пара родителей
[100010000101]
[100010000001]
Третья пара потомков
Скрещивание
[100010000101]
[100010000001]
lk = 11
Четвертая пара родителей
[110011010110]
[110000101101]
Четвертая пара потомков
Скрещивание
[110010101101]
[110001010110]
lk = 5
Рисунок 7 Процесс скрещивания хромосом
Если бы при отборе пар для скрещивания были объединены
хромосомы ch8 с ch8 и ch7 с ch2 вместо ch7 с ch8 и ch8 с ch2, а другие остались
бы в прежних парах без изменения, то скрещивание ch8 с ch8 дало бы пару
идентичных родительским хромосом при любой разыгранной точки
скрещивания. Отметим, что для хромосом, имеющих наибольшее значение
функции принадлежности, такая ситуация более вероятна. Таким образом
чем больше у хромосомы значение функции приспособленности, тем
больше шансов оказаться в следующей популяции.
После скрещивания отобранных особей мы получим (согласно
рисунку 7) новую популяцию потомков:
Ch1 = [001011010110];
Ch2 = [110000001010];
38
Ch3 = [111111101010];
Ch4 = [010000001001];
Ch5 = [100010000101];
Ch6 = [100010000001];
Ch7 = [110010101101];
Ch8 = [110001010110].
С целью отличить вновь полученные хромосомы от хромосом
предыдущей популяции, будем начинать их обозначение с заглавной
буквы С.
Согласно генетическому алгоритму мы вновь возвращаемся ко
второму этапу - оценке приспособленности хромосом из только что
сформированной
популяции.
Значения
функций
приспособленности
хромосом новой популяции:
F(Ch1) = 6;
F(Ch2) = 4;
F(Ch3) = 9;
F(Ch4) = 3;
F(Ch5) = 4;
F(Ch6) = 3;
F(Ch7) = 7;
F(Ch8) = 6.
Видно, что у популяция потомков среднее значение функции
приспособленности выше, чем у родительской популяции. Заметим, что
после скрещивания была получена хромосома Ch3 значением функции
приспособленности которой больше, чем у любой хромосомы из
родительской популяции. Но могло произойти и обратное, если бы при
случайном выборе родительских хромосом наиболее приспособленная не
попала в выборку. Несмотря на это средняя приспособленность новой
популяции в редких случаях оказывается ниже предыдущей, благодаря
тому,
что
хромосомы
с
большими
значениями
функции
приспособленности имеют больше шансов появиться в следующих
поколениях.
39
2.3 Использование архитектуры параллельных вычислений на
графических процессорах
Для обеспечения приемлемого времени реализации эволюционного
подхода (связки генетического алгоритма и интервальных нейронных
сетей) в разрабатываемой оболочке применяется техника Generalpurpose graphics processing units (GPGPU - использование графического
процессора видео карты для общих вычислений).
Вычисления на GPU (графическом процессоре) заключаются в
использовании CPU (центрального процессора) совместно с GPU для
ускорения
вычислений
за
счет
масштабного
распараллеливания
алгоритмов. Данный метод вычислений был изобретен более десяти лет
назад и сейчас активно используется для решения широкого круга задач,
требующих быстрого выполнения громоздких расчетов.
Несмотря на то, что ядра графического процессора не отличаются
таким высоким быстродействием, как ядра центрального процессора,
превосходство графического процессора достигается за счет их количества
(от порядка 300 ядер на стандартных графических картах, и до более чем
4000 ядер на одной из последних разработок фирмы ASUS).
Один из наиболее дорогих продуктов линейки «домашних»
процессоров компании Intel, Intel Core i7-975 XE 3,33 ГГц 2009 года
выпуска, предлагает пиковую производительность 53.3 ГФлопс, тогда как
видеокарта Nvidia Tesla K20X (2688 ядер) за счет параллельных
вычислений
может
предложить
теоретическую
пиковую
производительность 3.95 ТФлопс [26]. Причем стоимость графической
карты значительно меньше аналогичного ей по производительности
кластера из CPU.
Минусом, при использовании GPU для вычислений, является
отсутствие возможности работы ядер видеокарты с оперативной памятью
компьютера, относительно небольшая скорость копирования данных из
оперативной памяти в память GPU, а также сложность массового
40
распараллеливания
некоторых
алгоритмов
для
одновременного
использования всех доступных ядер.
Краткий обзор архитектур параллельных вычислений на GPU
Архитектура
CUDA
DirectCo
mpute
AMD
C++ AMP
FireStream
Специализация на Nvidia
Нет
видео картах
Языки
C, С++, C
программирования Fortran
Нет
Нет
Нет
C
C
С++
Кроссплатформенно Да
сть
Возможность
Да
использовать
массивы
переменной длины
Да
Windows
Да
Windows
Нет
Да
Нет
Да
Архитектура
OpenCL
DirectCo
mpute
AMD
C++ AMP
FireStream
OpenCL
OpenCL,
OpenGL,
DirectCo
mpute
CUDA
OpenCL
Поддерживаемые
технологии
OpenGL, OpenGL,
Direct3D OpenAL
,
OpenCL
DirectCo
mpute
Наличие удобных Да
Да
Нет
средств разработки
Комментариии
Да
Да
Расширен
ие
OpenCL
Расширен
ие
DirectCo
mpute
Анализируя источники [27-30] и построенную на их основе таблицу,
можно прийти к выводу, что архитектура CUDA является наиболее
универсальной и удобной для разработчика.
Обзор архитектуры CUDA
Для
реализации
разрабатываемой
системы
использовалась
архитектура Nvidia CUDA (Compute Unified Device Architecture) –
программно-аппаратная архитектура компании Nvidia, позволяющая
41
производить параллельные вычисления с использованием графических
процессоров компании Nvidia [31], поддерживающих технологию GPGPU.
Компания Nvidia одна из первых представила данную технологию на
своей видеокарте восьмого поколения – G80(GeForce 8800 GTX, 2006 год)
и до сих пор поддерживает и развивает ее на своих продуктах.
Nvidia не разглашает точные цифры продаж своих устройств, однако
можно утверждать, что с текущим развитием игровой индустрии продажи
видеокарт GeForce исчисляются сотнями миллионов. Таким образом,
практически у каждого современного компьютера есть аппаратная
поддержка CUDA. Nvidia Quatro используется во многих компаниях,
занимающихся компьютерной графикой, Nvidia Tesla используется в
вычислительных центрах множества институтов и НИИ.
Одним из достоинств платформы Nvidia CUDA является широкое
распространение
поддерживающих
ее
продуктов
среди
обычных
пользователей, предприятий, занимающихся компьютерной графикой, и
научных центров. Чтобы работать с GPGPU, раньше приходилось иметь
дело со сложными API (Applied Programming Interface) видеоадаптеров,
CUDA же построена таким образом, что код можно писать на диалекте
языка Fortran, C или C++, последний встречается в литературе под
названиями CUDA C или C for CUDA. Кроме того, Nvidia обеспечивает
поддержку CUDA в различные популярных средах разработки и бесплатно
предоставляет доступ к средствам разработки CUDA приложений на
официальном сайте.
Для начинающих CUDA-разработчиков существует множество книг,
обучающих
программированию
сообщества, наборы
готовых
на
GPU,
официальные
интернет
инструментов и библиотек. Многие
российские ВУЗы читают своим студентам курсы параллельного
программирования на CUDA.
Концепция архитектуры CUDA заключается в том, что GPU является
массивно-параллельным сопроцессором для CPU. Программы, написанные
42
на CUDA работают как на GPU, так и на CPU, выполняя последовательные
части кода на CPU, а код соответствующий массивно-параллельным
вычислениям на GPU, в виде выполняющейся одновременно группы
нитей.
Создание, управление и уничтожение нити на GPU требует гораздо
меньше времени и ресурсов чем на CPU благодаря тому, что все настройки
нити определяются заранее. При этом для эффективной нагрузки GPU
требуется использовать несколько десятков тысяч нитей, в то время как на
CPU достаточно пары десятков.
В CUDA реализуется SIMD-модель (Single Instruction, Multiple Data)
-
принцип
компьютерных
вычислений,
позволяющий
обеспечить
параллелизм на уровне данных. При решении задач CUDA использует
очень много нитей, выполняемых параллельно, обычно при этом каждая
нить работает с одним элементом вычисляемых данных.
Запущенные на выполнение нити в CUDA организуются согласно
следующей схеме (рис. 8): основой является одномерная или двумерная
сетка (grid), состоящая из одномерных, двухмерных или трехмерных
блоков, состоящих из нитей. При этом все блоки сетки имеют одинаковою
размерность и размер [32].
Рисунок 8 Иерархия нитей в CUDA
43
Подобная
иерархия
обеспечивает
удобство
распараллеленной
обработки многомерных данных. Кроме этого, нити отдельного блока
могут синхронизироваться со всеми остальными нитями блока (барьерная
синхронизация - ни одна нить, достигнув барьера синхронизации, не
продолжит работу, пока все остальные нити блока тоже не достигнут его)
и использовать общую для блока быструю разделяемую память (shared
memory). Обращение к такой памяти занимает обычно от 1 до 4 тактов, в
то время как обращение к общей памяти GPU (global memory) занимает от
100 до 1000 тактов. Поэтому, при более или менее активной работе с
данными (больше двух обращений к одному элементу за время работы
блока), рекомендуется перед работой с данными записывать их в shared
память, а после работы блока записывать результат обратно в глобальную
память GPU.
Таким образом, используя связку CPU и GPU, можно добиться от
простого ПК невиданной ранее производительности. Достигая ее за счет
обработки последовательной части кода на CPU, оптимизированного для
последовательной обработки данных, одновременно вычисляя пригодные
для распараллеливания части кода на GPU, созданного для параллельной
обработки данных.
44
Глава 3. Реализация прогнозирования временных рядов
3.1 Функциональная схема системы прогнозирования
временных рядов и детали реализации
При
объединении
генетического
алгоритма
и
интервальной
нейронной сети мы получаем универсальную систему прогнозирования,
работающую за приемлемое время. Функциональная схема создаваемой
системы представлена на рисунке 9.
1. {Z1, Z2, … Zn1}
{Z1, Z2, … Zn2}
…
{Z1, Z2, … Znp}
2.
CUDA
GPGPU
Создание
начального
поколения
наборов
параметров
…
Обучение
нейронных сетей
Присутствуют
качественные
сети
4. {Z1, Z2, … Zn}
+
{K1, K2, … Kn}
Получаем новое
поколение
Скрещивание
наиболее
приспособленных
особей, мутации
База данных
Сохранение
параметров
качественной
сети
Да
Пул
качественных
сетей
Использование
созданных сетей
Нет
Нет
3.
Популяция
сошлась?
+
Да
5.
||
{Z1, Z2, ...Zi, Ki+1, … Kn}
Оптимальные
атрибуты
найдены
6.
{Z1, Z2, … Zk}
Рисунок 9 Функциональная схема разрабатываемой оболочки системы
Перед запуском алгоритмов нахождения оптимальной нейронной
сети для прогнозирования интересуемого параметра пользователь может
задать системе следующие настройки:
 Название и адрес CSV-файла содержащего временные ряды для
обучения сетей
 Название и адрес CSV-файла содержащего временные ряды на
основе которых предполагается осуществлять прогнозирование.
 Путь к директории для сохранения качественных сетей.
45
 Номера столбцов атрибутов и прогнозируемой величины
 Диапазон количества атрибутов используемых для прогнозирования
 Диапазон размеров временных окон для атрибутов, по которым
будет осуществляться прогнозирование (на основании какого
количества последовательных значений временного ряда строить
прогноз)
 Размер временного окна прогнозируемой величины (сколько
последовательных значений необходимо спрогнозировать)
 Размер
временного
лага
между
окном
атрибутов
и
окном
прогнозируемой величины (может быть отрицательным, например,
для оценивания показателей одной величины по показателям других,
находящихся в одном временном интервале с оцениваемой
величиной)
 Максимальные и минимальные значения исследуемых величин (для
нормализации)
 Размер популяций для генетического алгоритма
 Количество внутренних нейронов для нейронной сети
 Количество циклов обучения для нейронных сетей
 Количество
обучаемых
нейронных
сетей
на
одном
наборе
параметров
 Максимальное число итераций
Алгоритм работы оболочки системы:
1. Первым шагом алгоритма поиска оптимальной для прогнозирования
нейронной сети является создание начальных поколений. Для
каждого значения диапазона используемых атрибутов и диапазона
временных окон формируется заданное пользователем количество
(размер популяции) случайных наборов параметров, на основании
которых будет строиться прогноз.
46
2. На следующем шаге для каждого набора параметров система обучает
множество нейронных сетей, прогнозирующих искомую величину.
Обучение происходит параллельно с использованием архитектуры
CUDA
для
распараллеливания
вычислений
на
графических
процессорах, что существенно сокращает время работы алгоритма.
3. Если среди обученных сетей существует сеть, работающая с
меньшей погрешностью, чем остальные сети, параметры такой сети
необходимо
сохранить
в
пул
качественных
сетей.
Как только в пуле появится первая сеть, параллельно с алгоритмом
нахождения оптимальных параметров нейронной сети может
работать алгоритм прогнозирования, выбирая из пула сеть с
наименьшей погрешностью.
4. Если популяция не сошлась или максимальное число итераций не
превышено, в каждом поколении определяется набор лучших
особей, имеющих наименьшую ошибку прогнозирования, для
скрещивания.
5. На основе отобранных лучших особей генерируются новые
поколения путем скрещивания и мутаций. Выполнение алгоритма
продолжается с пункта 2.
6. Программа выходит из цикла либо если превышено максимальное
количество итераций, либо в случае сходимости популяции.
Если популяция сошлась, то на выходе мы получаем оптимальный
набор атрибутов, а основанная на нем нейронная сеть уже находится
в пуле качественных сетей.
Как видно из схемы, одним из ключевых преимуществ системы
является возможность осуществлять прогнозирование уже на ранних
этапах работы генетического алгоритма (параллельно с его работой).
Данная возможность обусловлена добавлением в пул сетей, имеющих
минимальную ошибку прогнозирования, на каждом шаге генетического
47
алгоритма. Таким образом, по мере работы генетического алгоритма пул
будет обновляться сетями, способными более точно предсказывать
прогнозируемые величины.
Вторым
и
основным
преимуществом
оболочки
является
распараллеливание самой трудоемкой процедуры данного решения обучения
множества
нейронных
сетей.
Благодаря
использованию
архитектуры CUDA скорость работы данного алгоритма значимо выше,
чем у аналогичной реализации только с участием CPU.
Эффективное использование связки CPU и GPU достигается за счет
распараллеливания алгоритма на GPU с использованием нескольких тысяч
отдельных нитей, за счет использования преимуществ иерархии нитей
CUDA, подготовки данных на CPU параллельно с обработкой на GPU.
Учитывая,
что
каждый
нейрон
сети
может
рассчитываться
независимо от остальных нейронов его слоя, а также тот факт, что каждая
отдельная
нейронная
сеть
активно
взаимодействует
со
своими
параметрами (синаптическими весами), для создаваемой оболочки был
разработан и реализован следующий метод распараллеливания: помимо
одновременного обучения нейронных сетей одного поколения каждая сеть
распараллеливается по нейронам внутри отдельного блока. Этот метод
позволяет эффективно нагрузить GPU множеством нитей, а также
использовать быструю распределенную память при проведении расчетов с
сетями. Иллюстрация данного метода представлена на рисунке 10.
48
Рисунок 10 Иллюстрация распараллеливания вычислений
3.2 Моделирование процесса прогнозирования временных рядов
Для проверки качества разработанной оболочки системы было
решено провести ряд тестов прогнозирования временных рядов имеющих
сложные неочевидные зависимости. Целью тестов являлось определение и
сравнение точности использованных методов и быстродействия системы
как
с
использованием
модели
распараллеливания
вычислений
на
графических процессорах, так и без ее использования (последовательная
версия на CPU).
Для сравнение точности метода было проведено 20 испытаний по
прогнозированию различных показателей (курсы валют, цены акций
ведущих IT компаний, дневные температуры 5 столиц и другим). На вход
систем
подавались
спрогнозировать
2
от
125
до
500
последующих
испытующим.
Результаты
разработанной
оболочки
значений.
значения,
прогнозирования
СППР
Целью
заранее
с
являлось
известных
использованием
(распараллеленная
реализация),
стандартного метода пакета STATISTICA, а также пакета STATISTICA с
49
предварительным ручным анализом и обработкой данных приведены в
таблице 4.
Таблица 4
Сравнительные характеристики инструментов прогнозирования
Инструмент
Средняя
абс.
ошибка Среднее затраченное время
прогнозирования
выраженная в процентах
Оболочка СППР
2.12
0.58 сек.
STATISTICA
3.72
0.6 сек.
1.94
7 минут
(стандартный метод)
STATISTICA
(с предварительным
анализом и обработкой)
Также были произведены тесты скорости работы распараллеленной и
последовательной
реализации
разработанной
оболочки,
результаты
приведены в таблице 5.
Таблица 5
Сравнительные характеристики скорости последовательной и параллельной
реализации
Тип вычислений
Последовательные
Параллельные
Кол-во
сетей
Число
нейронов
Кол-во
итераций
Кол-во
циклов
обучения
Время
работы
1
27
10
1 000
0.51 сек.
2
54
10
1 000
1.07 сек.
3
81
10
1 000
1.66 сек.
1
27
10
1 000
0.47 сек.
2
54
10
1 000
0.53 сек.
3
81
10
1 000
0.58 сек.
Для того, чтобы убедиться в возможности разработанной оболочки
выявлять сложные неочевидные зависимости были проведены две серии
экспериментов.
50
В первой серии экспериментов исследовалось качество прогноза
оболочкой курса американского доллара (USD) в зависимости от
подаваемой на вход информации.
В таблице 6 приведена информация о предлагаемых оболочке
временных рядах и результатах полученных на основе предложенных
данных.
Таблица 6 Первая серия экспериментов
Ряды на входе оболочки
Диапазон
Курс USD
используемых ряды
ошибка
атрибутов
процентах
Курс USD
1
Куры: USD; MXN; EUR; AUD;
Отобранные оболочкой Средняя абс.
Курсы:
3-6
NZD; CHF; RUB; GBP; CNY;
5.33
USD;
EUR;
3.06
AUD; GBP; CNY; JPY
AED; CAD; JPY
Куры: USD; MXN; EUR; AUD;
3-10
Куры:
USD;
EUR;
NZD; CHF; RUB; GBP; CNY;
AUD; NZD; CHF; GBP;
AED; CAD; JPY
JPY
Цены на металлы: золото,
Цены
серебро, платина
золото, платина
Куры: USD; MXN; EUR; AUD;
3-10
Куры:
на
металлы:
USD;
EUR;
NZD; CHF; RUB; GBP; CNY;
AUD; GBP; CNY; JPY
AED; CAD; JPY
Основные
Основные
индексы:
DJIA;
DJIA;
FTSE; CAC 40; DAX; Nikkei;
2.24
2.78
индексы:
FTSE;
DAX;
USD;
EUR;
Nikkei;
RTSI
Куры: USD; MXN; EUR; AUD;
3-10
Куры:
NZD; CHF; RUB; GBP; CNY;
AUD; NZD; GBP
AED; CAD; JPY
Основные индексы:
Основные
индексы:
DJIA;
DJIA; FTSE; Nikkei;
FTSE; CAC 40; DAX; Nikkei;
Цены
RTSI
золото
Цены на металлы: золото,
серебро, платина
51
на
металлы:
1.96
в
Во второй серии экспериментов исследовалось качество прогноза
температуры
в
Москве
в
зависимости
от
подаваемой
на
вход
статистической информации о погоде. В таблице 7 приведены результаты
полученные в ходе экспериментов.
Таблица 7 Вторая серия экспериментов
Ряды на входе оболочки
Диапазон
Отобранные
оболочкой Средняя
используемых ряды
ошибка
атрибутов
процентах
Динамика температур
1
Динамика температур
7.68
Динамика температур
1-2
Динамика температур
7.41
Статистика по осадкам
Статистика по осадкам
Динамика температур
1-4
Динамика температур
Статистика по осадкам
Статистика по осадкам
Статистика по ветрам
Статистика по ветрам
Статистика
абс.
по
атмосферному давлению
Статистика
5.93
по
атмосферному давлению
Анализируя результаты проведенных тестов можно прийти к выводу,
что разработанная оболочка системы поддержки принятия решений
справляется с задачей выявления сложных зависимостей и способна
получать значимые результаты.
52
в
Заключение
Целью настоящей работы являлась разработка оболочки системы
поддержки принятия решений, которая бы обеспечила возможность
прогнозирования
временных
рядов
в
системах
со
сложными
взаимозависимостями, предоставляла возможность работы с данными,
заданными при помощи интервалов, а также имела более высокие
показатели
оперативности
и
была
реализована
на
обычных
вычислительных средствах - персональных компьютерах.
Для достижения указанной цели перед работой был поставлен ряд
задач, которые были успешно решены.
При
решении
задачи
модификации
алгоритма
обратного
распространения ошибки для обучения интервальных нейронных сетей,
позволяющих работать с недоопределёнными данными, были рассмотрены
труды [22, 23] и на их основе разработан способ обучения интервальных
нейронных сетей общего вида.
Для решении задачи модификации генетического алгоритма и
определения оптимальной структуры интервальной нейронной сети, а
также определения необходимого количества информации об этих
параметрах для оперативного и точного решения, в работе были
рассмотрены основные принципы применения генетических алгоритмов, а
также
детально
проработан
метод
взаимодействия
генетических
алгоритмов совместно с нейронными сетями.
Для сокращения временных затрат на анализ управляемой системы и
выработку управляющего решения, предложенные алгоритмы были
реализованы с использованием архитектуры параллельных вычислений на
процессорах
графического
адаптера.
Были
изучены
принципы
использования графических процессоров для неграфических задач, а также
разработана
модель
эффективного
распараллеливания
эволюционных алгоритмов с использованием архитектуры CUDA .
53
связки
Реализованная оболочка системы поддержки принятия решений
была апробирована на реальных задачах прогнозирования со сложными
зависимостями,
для
сравнения
ее
показателей
с
существующими
системами и методами.
По результатам анализа использованных методов и тестов итоговой
системы можно прийти к следующем выводам:
Данная оболочка системы является реализацией принципиально
новой модели СППР, позволяющей осуществлять работу с неточными,
случайными или стандартными интервальными данными.
Разработанная оболочка успешно справляется с поставленной перед
ней задачей при работе с данными сложной структуры и сложными
взаимными зависимостями. Она позволяет без существенной потери
оперативности и точности обучать нейронные сети, рассматривающие до
30 значимых входных параметров.
Применять разработанную оболочку целесообразно в достаточно
сложных задачах прогнозирования таких, как прогнозирование суточных
изменений курса валюты, прогнозирование социальных процессов и др.,
для
которых
трудно
или
невозможно
определить
подходящий
статистический метод.
Также применение данной оболочки целесообразно при работе с
интервальными данными - неточными значениями с погрешностью,
случайными
величинами,
быстро
изменяющимися
непрерывными
значениями, неподвластными большинству методов. При применении
методов прогнозирования, строящих свои прогнозы на основании
статистических данных необходимо иметь в виду, что при появлении
принципиально новых факторов или нерассмотренных ранее значений
старых показателей прогноз может оказаться неточным или вообще
неверным.
Научной
новизной
данной
работы
является
предложенный
принципиально новый эвристический метод нахождения оптимальной
54
структуры
и
параметров
интервальных
нейронных
сетей
для
прогнозирования временных рядов, основанный на взаимодействии
нейронных сетей и генетического алгоритма.
Практическая
значимость
работы
состоит
в
разработке
программного продукта, реализующего полученные методы, повышение
качества
обучения
нейронных
сетей
и,
как
следствие,
качества
приобретенных этими сетями знаний и точности прогнозирования. Также к
научной новизне можно отнести увеличение скорости обучения наборов
нейронных сетей.
Таким образом, поставленные задачи решены в полном объеме, цель
работы достигнута – разработана и реализована оболочка системы
поддержки принятия решений на основе генетического алгоритма,
нейронных сетей и массово-параллельных вычислений на графических
процессорах.
Направлениями дальнейшего исследования могут быть:

Увеличение
разнообразия
данных
подаваемых
на
вход
оболочки системы поддержки принятия решений за счет обработки
нечеткой информации и нечетких множеств.

Улучшение качества прогнозирования за счет разработки
новых методов анализа данных с использованием нейронных сетей.

развития
Повышение скорости обучения нейронных сетей, при условии
технологий
параллельных
процессорах.
55
вычислений
на
графических
Список использованной литературы:
1.
Саати, Т. Л. Принятие решений. Метод анализа иерархий / Т.
Л. Саати. - Москва: Радио и связь, 1993. - 278с.
2.
Druzdzel, M. J. Decision Support Systems / M. J. Druzdzel, R. R.
Flynn // Encyclopedia of Library and Information Science. Second Edition. New York: Marcel Dekker, Inc., 2002. -15p.
3.
Alter, S. L. Decision Support Systems: Current Practice and
Continuing Challenge / S. L. Alter. - MA: Addison-Wesley, 1980. - 316p.
4.
Haettenschwiler, P. Neues anwenderfreundliches Konzept der
Entscheidungs-unterstutzung / P. Haettenschwiler // Gutes Entscheiden in
Wirtschaft, Politik und Gesellschaft. - Zurich: Hochschulverlag AG, 1999. - P.
189-208.
5.
Power, D. J., A Brief History of Decision Support Systems.
DSSResources.COM / D. J. Power. - version 4.0, March 10, 2007 -.- Режим
доступа : http://DSSResources.COM/history/dsshistory.html, свободный. –
Загл. с экрана.
6.
Holsapple, C. W. Decision Support Systems: A Knowledge-based
Approach / C. W. Holsapple, A. B. Whinston. - Minneapolis: West Publishing
Co., 1996. -713p.
7.
Golden, B. Decision Insight Systems: A Critical Evaluation /
Golden B., Hevner A., Power D.J. // Computers and Operations Research, v. 13.
- N2/3. - 1986. - P. 287-300.
8.
"Extracting
Объединенный пресс релиз IDC и EMC. Digital Universe study
Value
from
Chaos"
-.-
Режим
доступа
:
http://www.emc.com/about/news/press/2011/20110628-01.htm,
http://www.emc.com/collateral/demos/microsites/emc-digital-universe2011/index.htm, свободный. – Загл. с экрана.
9.
Черняк, Л. Большие Данные — новая теория и практика / Л.
Черняк // Открытые системы. № 10. - М.: Открытые системы, 2011. -.56
Режим доступа : http://www.osp.ru/os/2011/10/13010990/, свободный. – Загл.
с экрана.
10.
Simon, H. A. The Structure of Ill-structured Problems. In
Developments in Design Methodology / H. A. Simon // Cross N. (ed.). - UK
Chichester: J. Wiley & Sons, 1984 - P. 317-327.
11.
Шмойлова, Р. А. Общая теория статистики: Учебник, / Р. А.
Шмойлова. - М.: Финансы и статистика, 2002. - 415 c.
12.
Manning, C. Introduction to Information Retrieval / C. Manning, P.
Raghavan, H. Schutze. - Cambridge University Press, 2008. - 544 p.
12.
решений
Николенко, С. Конспект лекции по деревьям принятия
/
С.
Николенко.
-
2008.
-.-
Режим
доступа
:
http://logic.pdmi.ras.ru/~sergey/teaching/ml/notes-01-dectrees.pdf, свободный.
– Загл. с экрана.
13.
Духанов, А. В. Имитационное моделирование сложных систем,
Курс лекций / А. В. Духанов, О. Н. Медведева. - Владимир: Изд-во
Владим. гос. ун-та, 2010. - 115 с.
15.
Авдеев, З. К. Когнитивное моделирование для решения задач
управления слабоструктурированными системами (ситуациями) / З. К.
Авдеев, С. В. Коврига, Д. И. Макаренко // Управление большими
системами. Выпуск 16. - М.: ИПУ РАН, 2007. - С. 26-39.
16.
Логунова, Е. А. Математические модели систем поддержки
принятия решений / Е. А Логунова. - Смоленск, 2012. -.- Режим доступа :
http://sibac.info/index.php/2009-07-01-10-21-16/3423-2012-07-29-14-43-08,
свободный. – Загл. с экрана.
17.
Ивченко, Г. И. Введение в математическую статистику:
Учебник / Г.И., Ивченко Ю.И. Медведев. - М.: Издательство ЛКИ, 2010. 600с.
18.
Магнус, Я. Р. Эконометрика. Начальный курс: Учеб. 8-е изд.,
испр. / Я. Р. Магнус, П. К. Катышев, А. А. Пересецкий. - М.: Дело, 2007. 400с.
57
Горбань, А. Н. Обобщенная аппроксимационная теорема и
19.
вычислительные возможности нейронных сетей / А. Н. Горбань //
Сибирский журнал вычислительной математики, Т.1, № 1. - Издательство
СО РАН, 1998. - С. 12-24.
Хайкин, С. Нейронные сети: полный курс, 2-е изд., испр. / С.
20.
Хайкин. - М.: Издательский дом "Вильямс", 2006. - 1104с.
Царегородцев, В. Г. Преимущества и достоинства нейронных
21.
сетей
/
В.
Г.
Царегородцев.
Режим
-.-
доступа
:
http://www.neuropro.ru/neu3.shtml, свободный. – Загл. с экрана.
22.
Ishibuchi, H. An architecture of neural networks with interval
weights and its application to fuzzy regression analysis / H. Ishibuchi, H.
Tanaka // Fuzzy Sets and Systems, 57. - North-Holland, 1993. - P. 27-39.
23.
Ishibuchi, H. An extension of the BP-algorithm to interval input
vectors / H. Ishibuchi, H. Tanaka // Proc. IEEE Int. Joint Conf. on Neural
Networks, Vol.2. - Singapore, 1991 - P. 1588-1593.
24.
Емельянов,
В.
В.
Теория
и
практика
эволюционного
моделирования / В. В. Емельянов, В. В. Курейчик, В. М. Курейчик. - М.:
Физматлит, 2003. - 432 с.
25.
Рутковская, Д. Нейронные сети, генетические алгоритмы и
нечеткие системы / Д. Рутковская, М. Пилиньский, Л. Рутковский. - М.:
Горячая линия -Телеком, 2006. - 452 c.
26.
Nvidia. Tesla gpu accelerators for servers. -.- Режим доступа :
http://www.nvidia.com/object/tesla-servers.html, свободный. – Загл. с экрана.
27.
Nvidia. CUDA Toolkit Documentation. -.- Режим доступа :
http://www.nvidia.com/object/tesla-servers.html, свободный. – Загл. с экрана.
28.
Microsoft. C++ Accelerated Massive Parallelism (C++ AMP). -.-
Режим доступа : http://blogs.msdn.com/cfs-file.ashx/__key/communityservercomponents-postattachments/00-10-29-86-29/cppAMPv6_2D00_gen.pdf/,
свободный. – Загл. с экрана.
58
29.
AMD. ATI STREAM programming guide. -.- Режим доступа :
http://www.amddevcentral.com/gpu_assets/ATI_Stream_SDK_CAL_Programm
ing_Guide_v2.0.pdf, свободный. – Загл. с экрана.
30.
AMD. Accelerated Parallel Processing OpenCL Programming
Guide.
Режим
-.-
доступа
:
http://developer.amd.com/wordpress/media/2012/10/AMD_Accelerated_Parallel
_Processing_OpenCL_Programming_Guide.pdf, свободный. – Загл. с экрана.
31.
Nvidia.
What
is
CUDA.
-.-
Режим
доступа
:
http://docs.nvidia.com/cuda/index.html, свободный. – Загл. с экрана.
28.
Борезков, А. В. Основы работы с технологией CUDA / А. В.
Борезков, А. А. Харламов. - М.: ДМК Пресс, 2010. - 232 с.
29.
Бухаров, О. Е. Задача прогнозирования временных рядов.
Подход к решению с использованием эволюционных алгоритмов / О. Е.
Бухаров, А. А. Мизикин // Научно-техническая конференция студентов,
аспирантов и молодых специалистов МИЭМ НИУ ВШЭ. Тезисы докладов.
- М.: МИЭМ НИУ ВШЭ, 2013. - С. 73.
30.
Бухаров, О. Е. Разработка оболочки системы прогнозирования
временных рядов с использованием эволюционных алгоритмов / О. Е.
Бухаров, Д. П. Боголюбов // Новые информационные технологии: Сборник
трудов XVI Всероссийской научно-технической конференции. - М.:
МГУПИ, 2013. - С. 63-68.
31.
Бухаров, О. Е. Разработка оболочки системы поддержки
принятия решений с использованием эволюционных алгоритмов / О. Е.
Бухаров, А. А. Мизикин, Д. П. Боголюбов //
Промышленные АСУ и
Контроллеры. - М.: НАУЧТЕХЛИТИЗДАТ - в печати.
32.
Круглински, Д. Дж. Программирование на Microsoft Visual C++
6.0 / Д.Дж. Круглински, С. Уингоу, Дж. Шеферд. - Санкт-Петербург:
Питер, 2003. - 819 с.
59
33.
Сандерс, Дж. Технология CUDA в примерах: введение в
программирование графических процессоров / Дж. Сандерс, Э. Кэндрот. М.: ДМК Пресс, 2011. - 232 с.
60
Приложение. Элементы исходного кода оболочки СППР
Ядро прямого распространения сигнала в нейронной сети
__global__ void feedForward(float* gpuWih, float* gpuWho, float* gpuInputs, float*
gpuActual, int INPUT_NEURONS, int HIDDEN_NEURONS, int OUTPUT_NEURONS,
cudaStream_t stream)
{
int thx=threadIdx.x; //input
int thy=threadIdx.y; //hidden
int thabs=HIDDEN_NEURONS*thx+thy;
int hid, out;
extern __shared__ float sharedMem[];
//(INPUT_NEURONS+HIDDEN_NEURONS+OUTPUT_NEURONS)*2+(INPUT_NEURO
NS+1)*HIDDEN_NEURONS+(HIDDEN_NEURONS+1)*OUTPUT_NEURONS+max_NE
URONS*HIDDEN_NEURONS*2
float *inputs = sharedMem;
float *hidden = &sharedMem[INPUT_NEURONS*2];
float *actual = &hidden[HIDDEN_NEURONS*2];
float *wih = &actual[OUTPUT_NEURONS*2];
float *who = &wih[(INPUT_NEURONS+1)*HIDDEN_NEURONS];
float *subsum = &who[(HIDDEN_NEURONS+1)*OUTPUT_NEURONS];
wih[thabs]=gpuWih[thabs];
for(int i=thabs;
i<(INPUT_NEURONS*2+HIDDEN_NEURONS+(HIDDEN_NEURONS+1)*OUTPUT_NE
URONS); i+=INPUT_NEURONS*HIDDEN_NEURONS)
{
if(i<INPUT_NEURONS*2)
inputs[i]=gpuInputs[i];
else if(i<INPUT_NEURONS*2+HIDDEN_NEURONS)
wih[HIDDEN_NEURONS*INPUT_NEURONS+iINPUT_NEURONS*2]=gpuWih[HIDDEN_NEURONS*INPUT_NEURONS+iINPUT_NEURONS*2];
else
who[i-(INPUT_NEURONS*2+HIDDEN_NEURONS)]=gpuWho[i(INPUT_NEURONS*2+HIDDEN_NEURONS)];
}
__syncthreads();
/* Calculate input to hidden layer */
mult(&inputs[thx*2],wih[thabs],&subsum[(thy*INPUT_NEURONS+thx)*2]);
__syncthreads();
int s = 2;
while(s<INPUT_NEURONS)
s<<=1;
while (s>1)
{
s>>=1;
if(thx < s && thx+s < INPUT_NEURONS)
61
{
subsum[(thy*INPUT_NEURONS+thx)*2] +=
subsum[(thy*INPUT_NEURONS+thx+s)*2];
subsum[(thy*INPUT_NEURONS+thx)*2+1] +=
subsum[(thy*INPUT_NEURONS+thx+s)*2+1];
}
__syncthreads();
}
/* Add in Bias */
if(thx==0)
{
hidden[thy*2] = sigmoid( subsum[thy*INPUT_NEURONS*2]+
wih[INPUT_NEURONS*HIDDEN_NEURONS+thy] );
hidden[thy*2+1] = sigmoid( subsum[thy*INPUT_NEURONS*2+1]+
wih[INPUT_NEURONS*HIDDEN_NEURONS+thy] );
}
__syncthreads();
/* Calculate the hidden to output layer */
for (out = thabs ; out < OUTPUT_NEURONS ;
out+=INPUT_NEURONS*HIDDEN_NEURONS)
{
for(hid=0; hid<HIDDEN_NEURONS; hid++)
{
mult(&hidden[hid*2],who[OUTPUT_NEURONS*hid+out],&subsum[(out*HIDDEN
_NEURONS+hid)*2]);
if(hid > 0)
{
subsum[(out*HIDDEN_NEURONS)*2] +=
subsum[(out*HIDDEN_NEURONS+hid)*2];
subsum[(out*HIDDEN_NEURONS)*2+1] +=
subsum[(out*HIDDEN_NEURONS+hid)*2+1];
}
}
/* Add in Bias */
actual[out*2] = sigmoid( subsum[out*HIDDEN_NEURONS*2]+
who[HIDDEN_NEURONS*OUTPUT_NEURONS+out] );
actual[out*2+1] = sigmoid( subsum[out*HIDDEN_NEURONS*2+1]+
who[HIDDEN_NEURONS*OUTPUT_NEURONS+out] );
}
__syncthreads();
for(int i=thabs; i<OUTPUT_NEURONS*2; i+=INPUT_NEURONS*HIDDEN_NEURONS)
{
gpuActual[i]=actual[i];
}
62
}
Ядро обучения сети на основе обратного распространения
ошибки
__global__ void backPropagate(float* gpuWih, float* gpuDWih, float* gpuWho, float*
gpuDWho, float* gpuInputs, float* gpuActual, float* gpuTarget, int INPUT_NEURONS, int
HIDDEN_NEURONS, int OUTPUT_NEURONS) //
<<<1,dim3(INPUT_,HIDDEN_),(INPUT_NEURONS+HIDDEN_NEURONS+OUTPUT_N
EURONS*2+(INPUT_NEURONS+1)*HIDDEN_NEURONS+(HIDDEN_NEURONS+1)*O
UTPUT_NEURONS+HIDDEN_NEURONS+OUTPUT_NEURONS+max_NEURONS*HID
DEN_NEURONS)*2*sizeof(float)>>>
{
int out, hid;
int thx=threadIdx.x; //input
int thy=threadIdx.y; //hidden
int thabs=HIDDEN_NEURONS*thx+thy;
extern __shared__ float sharedMem[];
float *inputs = sharedMem;
float *hidden = &sharedMem[INPUT_NEURONS*2];
float *actual = &hidden[HIDDEN_NEURONS*2];
float *target = &actual[OUTPUT_NEURONS*2];
float *wih = &target[OUTPUT_NEURONS*2];
float *dwih = &wih[(INPUT_NEURONS+1)*HIDDEN_NEURONS];
float *who = &dwih[(INPUT_NEURONS+1)*HIDDEN_NEURONS];
float *dwho = &who[(HIDDEN_NEURONS+1)*OUTPUT_NEURONS];
float *subsum = &dwho[(HIDDEN_NEURONS+1)*OUTPUT_NEURONS];
for(int i=thabs;
i<(INPUT_NEURONS+OUTPUT_NEURONS+(HIDDEN_NEURONS+1)*OUTPUT_NEU
RONS+HIDDEN_NEURONS)*2; i+=INPUT_NEURONS*HIDDEN_NEURONS)
{
if(i<INPUT_NEURONS*2)
{
inputs[i]=gpuInputs[i];
}
else if(i<(INPUT_NEURONS+OUTPUT_NEURONS)*2)
{
target[i-INPUT_NEURONS*2]=gpuTarget[i-INPUT_NEURONS*2];
}
else
if(i<(INPUT_NEURONS+OUTPUT_NEURONS)*2+(HIDDEN_NEURONS+1)*OUTPUT_
NEURONS)
{
who[i-(INPUT_NEURONS+OUTPUT_NEURONS)*2]=gpuWho[i(INPUT_NEURONS+OUTPUT_NEURONS)*2];
}
63
else
if(i<(INPUT_NEURONS+OUTPUT_NEURONS+(HIDDEN_NEURONS+1)*OUTPUT_NE
URONS)*2)
{
dwho[i((INPUT_NEURONS+OUTPUT_NEURONS)*2+(HIDDEN_NEURONS+1)*OUTPUT_NE
URONS)]=gpuDWho[i((INPUT_NEURONS+OUTPUT_NEURONS)*2+(HIDDEN_NEURONS+1)*OUTPUT_NE
URONS)];
}
else
if(i<((INPUT_NEURONS+OUTPUT_NEURONS+(HIDDEN_NEURONS+1)*OUTPUT_N
EURONS)*2+HIDDEN_NEURONS))
{
wih[i(INPUT_NEURONS+OUTPUT_NEURONS+(HIDDEN_NEURONS+1)*OUTPUT_NEUR
ONS)*2+INPUT_NEURONS*HIDDEN_NEURONS]=gpuWih[i(INPUT_NEURONS+OUTPUT_NEURONS+(HIDDEN_NEURONS+1)*OUTPUT_NEUR
ONS)*2+INPUT_NEURONS*HIDDEN_NEURONS];
}
else
{
dwih[i(INPUT_NEURONS+OUTPUT_NEURONS+(HIDDEN_NEURONS+1)*OUTPUT_NEUR
ONS)*2-HIDDEN_NEURONS+INPUT_NEURONS*HIDDEN_NEURONS]=gpuDWih[i(INPUT_NEURONS+OUTPUT_NEURONS+(HIDDEN_NEURONS+1)*OUTPUT_NEUR
ONS)*2-HIDDEN_NEURONS+INPUT_NEURONS*HIDDEN_NEURONS];
}
}
wih[thabs]=gpuWih[thabs];
dwih[thabs]=gpuDWih[thabs];
__syncthreads();
//feedForward
/* Calculate input to hidden layer */
mult(&inputs[thx*2],wih[thabs],&subsum[(thy*INPUT_NEURONS+thx)*2]);
__syncthreads();
int s = 2;
while(s<INPUT_NEURONS)
s<<=1;
while (s>1)
{
s>>=1;
if(thx < s && thx+s < INPUT_NEURONS)
{
subsum[(thy*INPUT_NEURONS+thx)*2] +=
subsum[(thy*INPUT_NEURONS+thx+s)*2];
64
subsum[(thy*INPUT_NEURONS+thx)*2+1] +=
subsum[(thy*INPUT_NEURONS+thx+s)*2+1];
}
__syncthreads();
}
/* Add in Bias */
if(thx==0)
{
hidden[thy*2] = sigmoid( subsum[thy*INPUT_NEURONS*2]+
wih[INPUT_NEURONS*HIDDEN_NEURONS+thy] );
hidden[thy*2+1] = sigmoid( subsum[thy*INPUT_NEURONS*2+1]+
wih[INPUT_NEURONS*HIDDEN_NEURONS+thy] );
}
__syncthreads();
/* Calculate the hidden to output layer */
for (out = thabs ; out < OUTPUT_NEURONS ;
out+=INPUT_NEURONS*HIDDEN_NEURONS)
{
for(hid=0; hid<HIDDEN_NEURONS; hid++)
{
mult(&hidden[hid*2],who[OUTPUT_NEURONS*hid+out],&subsum[(out*HIDDEN
_NEURONS+hid)*2]);
if(hid > 0)
{
subsum[(out*HIDDEN_NEURONS)*2] +=
subsum[(out*HIDDEN_NEURONS+hid)*2];
subsum[(out*HIDDEN_NEURONS)*2+1] +=
subsum[(out*HIDDEN_NEURONS+hid)*2+1];
}
}
/* Add in Bias */
actual[out*2] = sigmoid( subsum[out*HIDDEN_NEURONS*2]+
who[HIDDEN_NEURONS*OUTPUT_NEURONS+out] );
actual[out*2+1] = sigmoid( subsum[out*HIDDEN_NEURONS*2+1]+
who[HIDDEN_NEURONS*OUTPUT_NEURONS+out] );
}
__syncthreads();
//backPropagate
//additional calculating
65
float dE, dEe;
float *b= &dwho[(HIDDEN_NEURONS+1)*OUTPUT_NEURONS]; //new
float[OUTPUT_NEURONS*2]
float *dh= &b[OUTPUT_NEURONS*2]; //new float[HIDDEN_NEURONS*2]
for(out = thabs ; out < OUTPUT_NEURONS ;
out+=INPUT_NEURONS*HIDDEN_NEURONS)
{
b[out*2]=-(target[out*2] - actual[out*2])*actual[out*2]*(1-actual[out*2]);
b[out*2+1]=-(target[out*2+1] - actual[out*2+1])*actual[out*2+1]*(1actual[out*2+1]);
}
__syncthreads();
if(thx==0)
{
float s1,s2,s3,s4;
s1=0;
s2=0;
s3=0;
s4=0;
for(out = 0 ; out < OUTPUT_NEURONS ; out++)
{
if(who[OUTPUT_NEURONS*thy+out]>=0)
{
s1+=b[out*2]*who[OUTPUT_NEURONS*thy+out];
s3+=b[out*2+1]*who[OUTPUT_NEURONS*thy+out];
}
else
{
s2+=b[out*2+1]*who[OUTPUT_NEURONS*thy+out];
s4+=b[out*2]*who[OUTPUT_NEURONS*thy+out];
}
}
dh[thy*2]=(s1+s2)*hidden[thy*2]*(1-hidden[thy*2]);
dh[thy*2+1]=(s3+s4)*hidden[thy*2+1]*(1-hidden[thy*2+1]);
}
__syncthreads();
//maim calculating
for(out = thx ; out < OUTPUT_NEURONS ; out+=INPUT_NEURONS)
{
if(who[OUTPUT_NEURONS*thy+out]>=0)
dE=b[out*2]*hidden[thy*2]+b[out*2+1]*hidden[thy*2+1];
else
dE=b[out*2]*hidden[thy*2+1]+b[out*2+1]*hidden[thy*2];
dwho[OUTPUT_NEURONS*thy+out]*=ALPHA;
dwho[OUTPUT_NEURONS*thy+out]+=LEARN_RATE*(-dE);
who[OUTPUT_NEURONS*thy+out]+=dwho[OUTPUT_NEURONS*thy+out];
66
if(thy==0)
{
dE=b[out*2]+b[out*2+1];
dwho[OUTPUT_NEURONS*HIDDEN_NEURONS+out]*=ALPHA;
dwho[OUTPUT_NEURONS*HIDDEN_NEURONS+out]+=LEARN_RATE*(-dE);
who[OUTPUT_NEURONS*HIDDEN_NEURONS+out]+=dwho[OUTPUT_NEURONS*HI
DDEN_NEURONS+out];
}
}
if(wih[HIDDEN_NEURONS*thx+thy]>=0)
dEe= dh[thy*2]*inputs[thx*2]+dh[thy*2+1]*inputs[thx*2+1];
else
dEe= dh[thy*2]*inputs[thx*2+1]+dh[thy*2+1]*inputs[thx*2];
dwih[HIDDEN_NEURONS*thx+thy]*=ALPHA;
dwih[HIDDEN_NEURONS*thx+thy]+=LEARN_RATE*(-dEe);
wih[HIDDEN_NEURONS*thx+thy]+=dwih[HIDDEN_NEURONS*thx+thy];
if(thx==0)
{
dEe= dh[thy*2]+dh[thy*2+1];
dwih[HIDDEN_NEURONS*INPUT_NEURONS+thy]*=ALPHA;
dwih[HIDDEN_NEURONS*INPUT_NEURONS+thy]+=LEARN_RATE*( dEe);
wih[HIDDEN_NEURONS*INPUT_NEURONS+thy]+=dwih[HIDDEN_NEURONS*
INPUT_NEURONS+thy];
}
__syncthreads();
// обратный перенос из shared memory
gpuWih[thabs]=wih[thabs];
gpuDWih[thabs]=dwih[thabs];
for(int i=thabs;
i<(HIDDEN_NEURONS+(HIDDEN_NEURONS+1)*OUTPUT_NEURONS)*2;
i+=INPUT_NEURONS*HIDDEN_NEURONS)
{
if(i<HIDDEN_NEURONS)
gpuWih[INPUT_NEURONS*HIDDEN_NEURONS+i]=wih[INPUT_NEURONS*HI
DDEN_NEURONS+i];
else if(i<HIDDEN_NEURONS*2)
gpuDWih[(INPUT_NEURONS1)*HIDDEN_NEURONS+i]=dwih[(INPUT_NEURONS-1)*HIDDEN_NEURONS+i];
else
if(i<HIDDEN_NEURONS*2+(HIDDEN_NEURONS+1)*OUTPUT_NEURONS)
gpuWho[i-HIDDEN_NEURONS*2]=who[i-HIDDEN_NEURONS*2];
else
gpuDWho[i-HIDDEN_NEURONS*2(HIDDEN_NEURONS+1)*OUTPUT_NEURONS]=dwho[i-HIDDEN_NEURONS*2(HIDDEN_NEURONS+1)*OUTPUT_NEURONS];
67
}
}
68
Приложение. Публикации по теме диплома сделанные во время
работы над дипломом
1. Научно-техническая конференция студентов, аспирантов и
молодых специалистов МИЭМ НИУ ВШЭ. Тезисы докладов. - М.: МИЭМ
НИУ ВШЭ, 2013. - С. 73.
69
70
Новые
информационные
технологии:
Сборник
трудов
XVI
Всероссийской научно-технической конференции. - М.: МГУПИ, 2013. - С.
63-68.
71
72
73
74
75
Download