Разработка веб-приложения для прогнозирования временных рядов методом фрактального анализа

Тип работы:
Дипломная
Предмет:
Финансы


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Дипломная работа

Разработка веб-приложения для прогнозирования временных рядов методом фрактального анализа

СОДЕРЖАНИЕ

Введение

1. Фрактальный анализ и нейронные сети

1.1 Фрактальная теория

1.2 Метод нормированного размаха

1.3 Псевдофазовая реконструкция

1.4 Виды нейронных сетей

2. Фреймворк Yii и паттерн MVC

2.1 Фреймворк Yii

2.2 Паттерн MVC

3. Реализация приложения

3.1 Краткое описание программы

3.2 Архитектура приложения

3.3 Интерфейс приложения

Заключение

Список использованных источников

Приложение, А График выходов нейронной сети по обучающей выборке для обычных акций Сбербанка

Приложение В График выходов нейронной сети по тестовой выборке для обычных акций Сбербанка

фрактальный анализ интерфейс финансовый рынок

Введение

Настоящая дипломная работа посвящена исследованию фрактальных свойств динамики цен на фондовых рынках и разработке веб-приложения для анализа и прогнозирования временных рядов.

Начиная с середины ХХ века, использование нелинейных математических методов находит все более широкое применение в экономике. Данный подход особенно востребован в сфере анализа динамики ценообразования фондовых рынков.

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

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

В то же время остается открытым вопрос о практической применимости в их нынешнем виде теоретических методов прогнозирования временных рядов в рамках гипотезы фрактального рынка.

Главной целью дипломной работы является разработка веб-приложения для прогнозирования временных рядов методом фрактального анализа.

Для достижения этой цели необходимо решить следующие задачи:

-изучить методы фрактального анализа временных рядов;

— разработать нейронную сеть для прогнозирования временных; рядов, использующую на этапе формирования обучающей выборки фрактальный анализ;

— разработать веб-интерфейс для взаимодействия с пользователем.

Для построения веб-приложения предлагается использовать php фреймворк Yii на основе паттерна MVC и СУБД Mysql. База данных веб-приложения позволит накапливать информацию о всех тикерах и ценах закрытиякотировок.

Данная работа состоит из трех глав: «Фрактальный анализ и нейронные сети», «Фреймворк Yii и паттерн MVC» и «Реализация приложения».

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

Во второй главе приводятся основы веб-фреймворка Yii и паттерна MVC.

Третья глава посвящена созданию веб-приложения для прогнозирования временных рядов с применением ИНС и фрактального анализа.

1. Фрактальный анализ и нейронные сети

1.1 Фрактальная теория

В начале 1990-ых годов была разработана новая парадигма — гипотеза фрактального рынка (fractal market hypothesis, FMH), которая создавалась как альтернатива к гипотезе эффективного рынка. Для инвестора важным является не эффективность рынка, и даже не «справедливая» цена, а ликвидность рынка (сама возможность купить или продать товар). Если инвестор хочет продать актив, он готов его продать по цене, не равной «справедливой». FMH придает особое значение влиянию информации и инвестиционным горизонтам в поведении инвесторов.

Основные предположения гипотезы фрактального рынка, выдвинутые Петерсом (1994)[8]:

а) Рынок создают множество индивидуумов с большим количеством различных инвестиционных горизонтов. Поведение трейдера с однодневным инвестиционным горизонтом радикально отличается от поведения управляющего пенсионного фонда. Для первого инвестиционный горизонт измеряется минутами, а для второго — годами.

б) Информация по-разному влияет на различные инвестиционные горизонты. Для трейдера с однодневным инвестиционным горизонтом первичная деятельность — это торговля. Подобный трейдер будет в большей степени интересоваться информацией, получаемой из технического анализа.

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

в) Основополагающим фактором, влияющим на стабильность рынка, является ликвидность (уравновешивает спрос и предложение). Ликвидность достигается, когда рынок состоит из множества инвесторов с множеством различных инвестиционных горизонтов. Поскольку на рынке участвуют много инвесторов с различными инвестиционными горизонтами, то крах или паника на одном инвестиционном горизонте будет поглощаться и сглаживаться за счет других инвестиционных горизонтов. Когда рынок теряет эту структуру (в силу каких-либо неблагоприятных внешних факторов долгосрочные инвесторы уходят с рынка или становятся краткосрочными инвесторами), тогда рынок становится нестабильным и переходит в фазу «свободного падения» — происходит не просто движение цен вниз, а возникают целые «дыры» между ценами ближайших сделок. Подобные явления можно было наблюдать и в момент кризиса 1987 года на фондовом рынке США, когда инвесторы, обескураженные ужесточением монетарной политики Федерального Казначейства, поменяли свои фундаментальные предпочтения, выбросив на рынок слишком большое количество акций; и в кризисе 1998 года в России, когда «толпа» инвесторов стала сбрасывать ГКО, после того как с рынка ушли и краткосрочные, и долгосрочные инвесторы вследствие неясности относительно динамики обменного курса рубль/доллар в ближайшей перспективе.

г) Цены отражают комбинацию краткосрочного технического анализа и долгосрочной фундаментальной оценки. Таким образом, в краткосрочной перспективе изменения цен будет более волатильно, чем в долгосрочной перспективе. Определенный тренд на рынке отражает изменения в ожидаемом доходе, базирующимся на изменении экономической ситуации. Краткосрочные тренды в большей степени результат поведения толпы. Нет оснований верить, что краткосрочный тренд отражает долгосрочный экономический тренд.

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

Для большей общности гипотеза фрактального рынка не налагает никаких статистических требований на процесс. Цель FMH состоит в том, чтобы дать модель поведения инвестора и движений рыночной цены, которые соответствуют наблюдениям. Когда рынок стабилен EMH работает достаточно хорошо. Но как только наступает паника и обвал рынка, эта гипотеза дает сбой. Что не является неожиданностью, так как, являясь равновесной моделью, она не приспособлена к нестабильным условиям. Нестабильность имеет место, когда рынок теряет свою фрактальную структуру и принимает одинаковые для всех участников инвестиционные горизонты.

Основными инструментами FMH служат фрактальная геометрия и теория хаотических систем. Необходимость в применении теории хаотических систем возникает при анализе финансовых данных за большой период времени. Такой анализ необходим, если инвестировать на очень большой срок.

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

Понятия «фрактал» и «фрактальная геометрия» возникли в 70−80-х годах прошлого века. Они прочно вошли в обиход математиков и программистов. Слово «фрактал» происходит от латинского fractus, что в переводе означает дробный, состоящий из фрагментов. Оно было предложено американским математиком Бенуа Мандельбротом в 1975 году для обозначения нерегулярных («изломанных») самоподобных структур, которыми он занимался.

По определению, данному Мандельбротом, «фракталом называется структура, состоящая из частей, которые в каком-то смысле подобны целому» [3]. Фрактал — это бесконечно самоподобная геометрическая фигура, каждый фрагмент которой повторяется при уменьшении масштаба (Рисунок 1. 1). Масштабная инвариантность, наблюдаемая во фракталах, может быть либо точной, либо приближённой.

Рисунок 1.1 — Самоподобие фракталов на примере множества Мандельброта

С математической точки зрения фрактал — это, прежде всего, множество дробной размерности [3]. Рождение фрактальной геометрии принято связывать с выходом в 1977 году книги Мандельброта «Фрактальная геометрия природы», в которой автор собрал и систематизировал научные результаты ученых, работавших в период 1875—1925 гг. в той же области (Пуанкаре, Фату, Жюлиа, Кантор, Хаусдорф).

Фрактальная геометрия -- это революция в математике и математическом описании природы. Вот как об этом пишет сам первооткрыватель фрактальной геометрии Б. Мандельброт: «Почему геометрию часто называют холодной и сухой? Одна из причин заключается в ее неспособности описать форму облака, горы, дерева или берега моря. Облака -- это не сферы, горы -- это не конусы, линии берега -- это не окружности, и кора не является гладкой, и молния не распространяется по прямой. Природа демонстрирует нам не просто более высокую степень, а совсем другой уровень сложности» [3].

Мандельброт показал, что геометрия реального мира не евклидова, а фрактальная. «Правильные» евклидовы объекты являются математической абстракцией, природа же предпочитает негладкие, шероховатые, зазубренные формы. К евклидовой геометрии добавилась новая геометрия, отличие которой состоит в том, что она не оперирует гладкими объектами и привычными формами типа треугольника, квадрата, круга, шара и т. п. Фракталы с большой точностью описывают многие физические явления и природные образования. Снежинку, морского конька, ветви деревьев, разряд молнии и горные массивы можно нарисовать, используя фракталы. Поэтому многие современные ученые говорят о том, что природа имеет свойство фрактальности.

1.2 Метод нормированного размаха

Одним из наиболее популярных методов нелинейной динамики является анализ временных рядов на основе вычисления показателя Херста, который получил название — R/S-анализ (rescaled range analysis). Метод был предложен английским исследователем Гарольдом Херстом. На протяжении длительного периода времени Херст занимался исследованием Нила и решением задач, связанных с накоплением водных ресурсов. Он открыл новый статистический метод — метод нормированного размаха [12]. Херст показал, что большинство естественных явлений, включая речные стоки, изменения температуры, осадки, рост колец деревьев, солнечные пятна следуют «смещенному случайному блужданию» — тренду с шумом. Величина коэффициента (показатель Херста) характеризует отношение силы тренда (детерминированный фактор) к уровню шума (случайный фактор). Метод Херста применим и для изучения временных рядов в экономике и на рынках капитала, и позволяет выяснить, являются ли эти ряды также смещенными случайными блужданиями.

Используя безразмерное отношение нормированного размаха можно сравнивать различные явления. Херст обнаружил, что для многих временных рядов наблюдаемый нормированный размах хорошо описывается эмпирическим соотношением:

, где

— некоторая константа,

— текущее значение длины выборки,

— показатель Херста (принимает значения от 0 до 1).

Если рассматриваемый временной ряд обладает долговременной памятью, то его R/S-траектория демонстрирует факт исчерпания памяти так называемым «срывом с тренда» или, в другой терминологии, сменой направления тренда, вдоль которого следует определенное количество начальных точек R/S-траектории.

Вышеуказанный термин «смена тренда» подразумевает, что точки R/S-траектории, следующие после точки смены тренда, уже «не возвращаются» к первоначальному тренду.

Применительно к финансовым данным можно использовать следующую трактовку: показатель Херста измеряет влияние информации на временной ряд данных. Значение подразумевает случайное блуждание, что является подтверждением гипотезы эффективного рынка. В этом случае события некореллированы, все новости уже впитаны и обесценены рынком. В противоположность этому при события сегодня будут иметь значение завтра, то есть полученная информация продолжает учитываться рынком некоторое время спустя. Это не просто автокорреляция, когда влияние информации быстро падает, а это долговременная память. Она обусловливает информационное влияние в течение больших периодов времени и характеризуется длиной цикла.
На рисунке 1.2 в двойных логарифмических координатах представлена кривая зависимости от для, построенная по данным, полученным с помощью генератора псевдослучайных чисел с гауссовским выходом, и показывает. Эта оценка немного выше, чем ожидалось, но эти псевдослучайные числа сгенерированы детерминистическим алгоритмом, что может быть причиной смещения. Важно заметить, что R/S-анализ — это исключительно устойчивый метод. В его основе нет предположения о гауссовском распределении. Найденное значение не является доказательством того, что налицо гауссовское случайное блуждание, оно доказывает только то, что это процесс, который отличается короткой памятью. Другими словами, любая независимая система, гауссовская или какая-либо другая, может продуцировать.

Рисунок 1.2 — R/S-анализ: случайные гауссовские числа. Фактическое значение, оценка

На рисунке 1.3 показана аналогичная кривая для — значения, часто наблюдаемого в природных процессах. Эти данные были получены аппроксимацией обобщенного броуновского движения. Такой ряд получен, с учетом памяти о 200 наблюдениях. Данные имитируют естественный цикл из 200 наблюдений.

Рисунок 1.3 — R/S-анализ: фрактальное броуновское движение. Фактическое значение, оценка

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

Рисунок 1.4 — R/S-анализ: фрактальное броуновское движение. Фактическое значение, оценка

Благодаря своей замечательной устойчивости, показатель Херста широко применяется в анализе временных рядов сложных систем. Он содержит минимум предположений об изучаемой системе и позволяет ввести классификацию временных рядов безотносительно к их виду распределения.

Выделяют три интервала значений показателя Херста:
а) При. Данный диапазон соответствует антиперсистентным (эргодическим) рядам. Такой тип системы часто называют — «возврат к среднему». Если система демонстрирует рост в предыдущий период, то, скорее всего, в следующем периоде начнется спад. И наоборот, если шло снижение, то вероятен близкий подъем. Устойчивость такого антиперсистентного поведения зависит от того, насколько близко к нулю. Чем ближе его значение к нулю, тем ближе к, или отрицательной корреляции. Такой ряд более изменчив, или волатилен, чем ряд случайный.
б) При. Указывает на случайный ряд (броуновское движение, случайные блуждания). События некоррелированы между собой (), настоящее не влияет на будущее. Функция плотности вероятности может быть нормальной кривой, однако, это не обязательное условие.
в) При. Значения показателя, принадлежащие данному диапазону, характерны для персистентных или трендоустойчивых рядов. Они характеризуются наличием долговременных корреляций между текущими событиями и событиями будущими. Если ряд возрастает (убывает) в предыдущий период, то вероятно, что он будет сохранять эту тенденцию какое-то время в будущем. Сила персистентности, увеличивается при приближении к 1, или 100% корреляции (). Чем ближе к 0. 5, тем более зашумлен ряд и тем менее выражен его тренд. Персистентный временной ряд является фракталом, поскольку может быть описан как обобщенное броуновское движение или смещенные случайные блуждания.
Персистентные временные ряды являют собой наиболее интересный класс, так как оказалось, что они не только в изобилии обнаруживаются в природе, — это открытие принадлежит Херсту, — но и свойственны рынкам капитала. Фрактальная размерность временного ряда, или накопленных изменений при случайном блуждании, равна. Фрактальная размерность кривой линии равна, а фрактальная размерность геометрической плоскости равна. Таким образом, фрактальная размерность случайного блуждания лежит между кривой линией и плоскостью.

Показатель Херста может быть преобразован во фрактальную размерность с помощью следующей формулы:.

Таким образом, если, то. Обе величины характеризуют независимую случайную систему. Величина будет соответствовать фрактальной размерности, более близкой к кривой линии. Это персистентный временной ряд, дающий более гладкую, менее зазубренную линию, нежели случайное блуждание. Антиперсистентная величина дает соответственно более высокую фрактальную размерность и более прерывистую линию, чем случайное блуждание, и, следовательно, характеризует систему, более подверженную переменам.

Метод нормированного размаха заключается в следующем:

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

б) Разделим период времени N на А смежных подпериодов длины n, так, что. При этом N, A и n подбираются таким образом, чтобы было целочисленным значением. Пометим каждый подпериод Ia с учетом того что. Введем двойной индекс — каждый элемент Ni в Ia переобозначим Nk,a,. Для каждого Ia длины n среднее по интервалу значение определяется как.

в) Находим элементы временного ряда накопленных отклонений (Xk,a) от среднего значения для каждого подпериода Ia:;

г) Диапазон определяется как максимальное значение за вычетом минимального значения Xk,a в пределах каждого подпериода Ia:.

д) Выборочное стандартное отклонение рассчитывается для каждого подпериода Ia:;

е) Каждый диапазон RIa теперь нормализуется путем деления на соответствующее SIa. На шаге (2) мы получили смежные подпериоды длины n. Следовательно, среднее значение (R/S)n определяется как;

ж) Длина n итеративно увеличивается до следующего более высокого значения. Шаги (2−6) повторяются до. Получаем два вектора: и.

з) Теперь на основе значений, полученных на предыдущем шаге, применим регрессию к уравнению, где c = const, а H — показатель Херста. Предварительно логарифмируем обе части уравнения регрессии. Отрезок, отсекаемый на координатной оси, является оценкой log©, константой. Наклон прямой является оценкой показателя Херста Н.

1.3 Псевдофазовая реконструкция

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

Второй этап -- это определение размерности пространства вложения и временной задержки сигнала. Определение параметров вложения обеспечивает максимальную предсказуемость временного ряда и может быть использовано для выбора оптимального размера окна (количество входных элементов) в прогнозирующей нейронной сети.

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

Псевдофазовая реконструкция в частности описана в работе Кесияна Г. А. и Шахмеликяна Т. А. «Анализ и моделирование хаотических процессов в экономике».

Авторы рассмотрели применение хаотических процессов на фондовом рынке с последующим прогнозированием котировок посредством нейросетевых технологий.

Для численных экспериментов были взяты котировки обычных акций Сбербанка за период с 20. 07. 2007 по 04. 08. 2011 с интервалом час (длина ряда равна N=7926). График исходных данных показан на рисунке 1.5.

На первом этапе была рассчитана экспонента Херста с помощью программного продукта Fractan 4.4 (рисунок 1. 6).

Рассчитанные значения для экспоненты Херста получились примерно ?1. Это означает, что временной ряд является персистентным, то есть характеризуется эффектами долговременной памяти.

Рисунок 1.5 — Данные для анализа: обычные акции Сбербанка

Кроме этого, по экспоненте Херста можно судить о необходимом объеме обучающей выборки, применяемой в нейросетевых технологиях. Необходимый объем выборки соответствует номеру ряда, при котором система максимально накопила память, то есть это максимальное значение в системе координат, где по оси абсцисс отложено время t, а по оси ординат значения экспоненты Херста H. Не учитывая начальные всплески графика, максимальное значение экспоненты Херста достигается при t = 5826 (Рисунок 1. 7).

Рисунок 1.6 — Расчет экспоненты Херста

Рисунок 1.7 — Определение объема обучающей выборки с помощью параметра Херста

Для определения размерности пространства вложений авторы вычислили вначале фрактальную размерность с помощью метода корреляционной размерности. Корреляционная размерность для акций Сбербанка оказалась равной d=4. 030 (Рисунок 1. 8). Размерность пространства вложений m можно рассчитать по следующей формуле: m=2[d]+1= 2*[4. 030]+1=9.

Рисунок 1.8 — Вычисление фрактальной (корреляционной) размерности

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

Программный продукт Fractan 4.4 с помощью метода взаимной информации рассчитал оптимальную задержку ф=94 (Рисунок 1. 9).

Рисунок 9 — Вычисление оптимальной задержки методом взаимной информации

Далее в ППП Matlab 6.5 авторы реализовали алгоритм, осуществляющий псевдофазовую реконструкцию с заданными параметрами m и ф. В результате работы алгоритма из исходного ряда длиной 7926 получили девятимерный временной ряд длиной N9=N-(m-1)*ф = 7926-(9−1)*94 = 7174. Часть девятимерного ряда продемонстрирована на рисунке 1. 10.

Рисунок 1. 10 — Результат псевдофазовой реконструкции акций Сбербанка

Далее, в качестве базовой архитектуры для прогнозирования временного процесса они создали двухслойный персептрон в среде Peltarion Synapse 1.5.0 (Рисунок 1. 11). В результате применения генетических алгоритмов оптимизации получили ошибку обучения 0. 0011.

Рисунок 1. 11 — Двухслойный персептрон

График выходов сети по обучающей выборке показан в Приложении 1. Видно, что выходы нейронной сети (кривая сиреневым цветом) и действительные значения (кривая черным цветом) достаточно близки. График выходов сети по тестовой выборке (ряд с 5827 номера) продемонстрирован в Приложении 2.

Результаты тестирования искусственной нейронной сети говорят о высокой точности прогнозирования курса обычных акций Сбербанка с применением теории хаоса при подготовке обучающей выборки [19].

1.4 Виды нейронных сетей

Теория нейронных сетей включают широкий круг вопросов из разных областей науки: биофизики, математики, информатики, схемотехники и технологии. Поэтому понятие «нейронные сети» детально определить сложно.

Искусственные нейронные сети (НС) -- совокупность моделей биологических нейронных сетей. Представляют собой сеть элементов -- искусственных нейронов -- связанных между собой синоптическими соединениями. Сеть обрабатывает входную информацию и в процессе изменения своего состояния во времени формирует совокупность выходных сигналов.

Работа сети состоит в преобразовании входных сигналов во времени, в результате чего меняется внутреннее состояние сети и формируются выходные воздействия. Обычно Н С оперирует цифровыми, а не символьными величинами.

Большинство моделей НС требуют обучения. В общем случае, обучение -- такой выбор параметров сети, при котором сеть лучше всего справляется с поставленной проблемой. Обучение -- это задача многомерной оптимизации, и для ее решения существует множество алгоритмов.

Искусственные нейронные сети -- набор математических и алгоритмических методов для решения широкого круга задач. Выделим характерные черты искусственных нейросетей как универсального инструмента для решения задач:

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

б) НС -- средство обработки информации:

а. гибкая модель для нелинейной аппроксимации многомерных функций;

б. средство прогнозирования во времени для процессов, зависящих от многих переменных;

в. классификатор по многим признакам, дающий разбиение входного пространства на области;

г. средство распознавания образов;

д. инструмент для поиска по ассоциациям;

е. модель для поиска закономерностей в массивах данных.

в) НС свободны от ограничений обычных компьютеров благодаря параллельной обработке и сильной связанности нейронов.

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

Биологический нейрон -- сложная система, математическая модель которого до сих пор полностью не построена. Введено множество моделей, различающихся вычислительной сложностью и сходством с реальным нейроном.

Одна из важнейших -- формальный нейрон (Рисунок 1. 12). Несмотря на простоту ФН, сети, построенные из таких нейронов, могут сформировать произвольную многомерную функцию на выходе.

Рисунок 1. 12 — Формальный нейрон

Нейрон состоит из взвешенного сумматора и нелинейного элемента. Функционирование нейрона определяется формулами:

где хi -- входные сигналы, совокупность всех входных сигналов нейрона образует вектор x;

wi -- весовые коэффициенты, совокупность весовых коэффициентов образует вектор весов w;

NET -- взвешенная сумма входных сигналов, значение NET передается на нелинейный элемент;

? -- пороговый уровень данного нейрона;

F -- нелинейная функция, называемая функцией активации.

Нейрон имеет несколько входных сигналов x и один выходной сигнал OUT. Параметрами нейрона, определяющими его работу, являются: вектор весов w, пороговый уровень? и вид функции активации F.

Рассмотрим основные виды функций активации, получившие распространение в искусственных НС.

а) Жесткая ступенька (Рисунок 1. 13):

Используется в классическом формальном нейроне. Развита полная теория, позволяющая синтезировать произвольные логические схемы на основе ФН с такой нелинейностью. Функция вычисляется двумя-тремя машинными инструкциями, поэтому нейроны с такой нелинейностью требуют малых вычислительных затрат. Эта функция чрезмерно упрощена и не позволяет моделировать схемы с непрерывными сигналами. Отсутствие первой производной затрудняет применение градиентных методов для обучения таких нейронов. Сети на классических ФН чаще всего формируются, синтезируются, т. е. их параметры рассчитываются по формулам, в противоположность обучению, когда параметры подстраиваются итеративно.

б) Логистическая функция (сигмоида, функция Ферми, Рисунок 1. 14):

Применяется очень часто для многослойных персептронов и других сетей с непрерывными сигналами. Гладкость, непрерывность функции -- важные положительные качества. Непрерывность первой производной позволяет обучать сеть градиентными методами (например, метод обратного распространения ошибки).

Функция симметрична относительно точки (NET=0, OUT=½), это делает равноправными значения OUT=0 и OUT=1, что существенно в работе сети. Тем не менее, диапазон выходных значений от 0 до 1 несимметричен, из-за этого обучение значительно замедляется. Данная функция -- сжимающая, т. е. для малых значений NET коэффициент передачи K=OUT/NET велик, для больших значений он снижается. Поэтому диапазон сигналов, с которыми нейрон работает без насыщения, оказывается широким.

Значение производной легко выражается через саму функцию. Быстрый расчет производной ускоряет обучение.

в) Гиперболический тангенс (Рисунок 1. 15):

Тоже применяется часто для сетей с непрерывными сигналами. Функция симметрична относительно точки (0,0), это преимущество по сравнению с сигмоидой.

г) Пологая ступенька (Рисунок 1. 16):

Рассчитывается легко, но имеет разрывную первую производную в точках NET =? , NET =? + Д что усложняет алгоритм обучения.

Выбор функции активации определяется:

а) Спецификой задачи.

б) Удобством реализации на ЭВМ, в виде электрической схемы или другим способом.

в) Алгоритмом обучения: некоторые алгоритмы накладывают ограничения на вид функции активации, их нужно учитывать.

Чаще всего вид нелинейности не оказывает принципиального влияния на решение задачи. Однако удачный выбор может сократить время обучения в несколько раз.

Формальные нейроны могут объединяться в сети различным образом. Самым распространенным видом сети стал многослойный перcептрон
(Рисунок 1. 18).

Сеть состоит из произвольного количества слоев нейронов. Нейроны каждого слоя соединяются с нейронами предыдущего и последующего слоев по принципу «каждый с каждым». Первый слой (слева) называется сенсорным или входным, внутренние слои называются скрытыми или ассоциативными, последний (самый правый, на рисунке 1. 18 состоит из одного нейрона) -- выходным или результативным. Количество нейронов в слоях может быть произвольным. Обычно во всех скрытых слоях одинаковое количество нейронов.

Обозначим количество слоев и нейронов в слое. Входной слой: NI нейронов; NH нейронов в каждом скрытом слое; NO выходных нейронов. х -- вектор входных сигналы сети, у — вектор выходных сигналов.
Существует путаница с подсчетом количества слоев в сети. Входной слой не выполняет никаких вычислений, а лишь распределяет входные сигналы, поэтому иногда его считают, иногда -- нет. Обозначим через NL полное количество слоев в сети, считая входной.

Работа многослойного перcептрона (МСП) описывается формулами:

где индексом i всегда будем обозначать номер входа, j -- номер нейрона в слое, l -- номер слоя.

Xijl — й входной сигнал j-го нейрона в слое l;

Wijl — весовой коэффициент i-го входа нейрона номер j в слое l;

NETjl — сигнал NET j-го нейрона в слое l;

OUTjl — выходной сигнал нейрона;

?jl — пороговый уровень нейрона j в слое l;

Введем обозначения: Wjl -- вектор-столбец весов для всех входов нейрона j в слое l; Wl -- матрица весов всех нейронов в слое l. В столбцах матрицы расположены вектора Wjl. Аналогично Xjl -- входной вектор-столбец слоя l.

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

В многослойном перcептроне нет обратных связей. Такие модели называются сетями прямого распространения. Они не обладают внутренним состоянием и не позволяют без дополнительных приемов моделировать развитие динамических систем.

Среди различных структур нейронных сетей (НС) одной из наиболее известных является многослойная структура, в которой каждый нейрон произвольного слоя связан со всеми нейронов предыдущего слоя или, в случае первого слоя, со всеми входами НС. Такие Н С называются полносвязными. Когда в сети только один слой, алгоритм ее обучения с учителем довольно очевиден, так как правильные выходные состояния нейронов единственного слоя заведомо известны, и подстройка синаптических связей идет в направлении, минимизирующем ошибку на выходе сети. По этому принципу строится, например, алгоритм обучения однослойного перcептрона. В многослойных же сетях оптимальные выходные значения нейронов всех слоев, кроме последнего, как правило, не известны, и двух или более слойный перcептрон уже невозможно обучить, руководствуясь только величинами ошибок на выходах НС. Один из вариантов решения этой проблемы — разработка наборов выходных сигналов, соответствующих входным, для каждого слоя НС, что, конечно, является очень трудоемкой операцией и не всегда осуществимо. Второй вариант — динамическая подстройка весовых коэффициентов синапсов, в ходе которой выбираются, как правило, наиболее слабые связи и изменяются на малую величину в ту или иную сторону, а сохраняются только те изменения, которые повлекли уменьшение ошибки на выходе всей сети. Очевидно, что данный метод, несмотря на свою кажущуюся простоту, требует громоздких рутинных вычислений. И, наконец, третий, более приемлемый вариант — распространение сигналов ошибки от выходов НС к ее входам, в направлении, обратном прямому распространению сигналов в обычном режиме работы. Этот алгоритм обучения НС получил название процедуры обратного распространения.

Согласно методу наименьших квадратов, минимизируемой целевой функцией ошибки НС является величина:

(1)

где — реальное выходное состояние нейрона j выходного слоя N нейронной сети при подаче на ее входы p-го образа; djp — идеальное (желаемое) выходное состояние этого нейрона.
Суммирование ведется по всем нейронам выходного слоя и по всем обрабатываемым сетью образам. Минимизация ведется методом градиентного спуска, что означает подстройку весовых коэффициентов следующим образом:

(2)

Здесь wij — весовой коэффициент синаптической связи, соединяющей i-ый нейрон слоя n-1 с j-ым нейроном слоя n, — коэффициент скорости обучения, 0< <1.

Как показано в [17],

(3)

Здесь под yj,, подразумевается выход нейрона j, а под sj — взвешенная сумма его входных сигналов, то есть аргумент активационной функции. Так как множитель dyj/dsj является производной этой функции по ее аргументу, из этого следует, что производная активационной функция должна быть определена на всей оси абсцисс. В связи с этим функция единичного скачка и прочие активационные функции с неоднородностями не подходят для рассматриваемых НС. В них применяются такие гладкие функции, как гиперболический тангенс или классический сигмоид с экспонентой. В случае гиперболического тангенса

(4)

Третий множитель sj/wij, очевидно, равен выходу нейрона предыдущего слоя yi(n-1).
Что касается первого множителя в (3), он легко раскладывается следующим образом[17]:

(5)

Здесь суммирование по k выполняется среди нейронов слоя n+1.

Введя новую переменную

(6)

мы получим рекурсивную формулу для расчетов величин j(n) слоя n из величин k(n+1) более старшего слоя n+1.

(7)

Для выходного же слоя

(8)

Теперь мы можем записать (2) в раскрытом виде:

(9)

Иногда для придания процессу коррекции весов некоторой инерционности, сглаживающей резкие скачки при перемещении по поверхности целевой функции, (9) дополняется значением изменения веса на предыдущей итерации

(10)

где — коэффициент инерционности, t — номер текущей итерации.

Таким образом, полный алгоритм обучения НС с помощью процедуры обратного распространения строится так:

а) Подать на входы сети один из возможных образов и в режиме обычного функционирования НС, когда сигналы распространяются от входов к выходам, рассчитать значения последних.

(11)

где M — число нейронов в слое n-1 с учетом нейрона с постоянным выходным состоянием +1, задающего смещение; yi(n-1)=xij(n) — i-ый вход нейрона j слоя n.

yj(n) = f (sj(n)), где f () — сигмоид (12)

yq(0)=Iq,(13)

где Iq — q-ая компонента вектора входного образа.

б) Рассчитать (N) для выходного слоя по формуле (8).

Рассчитать по формуле (9) или (10) изменения весов w(N) слоя N.

в) Рассчитать по формулам (7) и (9) (или (7) и (10)) соответственно (n) и w(n) для всех остальных слоев, n=N-1,…1.

г) Скорректировать все веса в НС

(14)

д) Если ошибка сети существенна, перейти на шаг 1. В противном случае — конец.

Рассматриваемая НС имеет несколько нюансов. Во-первых, в процессе обучения может возникнуть ситуация, когда большие положительные или отрицательные значения весовых коэффициентов сместят рабочую точку на сигмоидах многих нейронов в область насыщения. Малые величины производной от логистической функции приведут в соответствие с (7) и (8) к остановке обучения, что парализует НС. Во-вторых, применение метода градиентного спуска не гарантирует, что будет найден глобальный, а не локальный минимум целевой функции. Эта проблема связана еще с одной, а именно — с выбором величины скорости обучения. Доказательство сходимости обучения в процессе обратного распространения основано на производных, то есть приращения весов и, следовательно, скорость обучения должны быть бесконечно малыми, однако в этом случае обучение будет происходить неприемлемо медленно. Кроме того, для исключения случайных попаданий в локальные минимумы иногда, после того как значения весовых коэффициентов стабилизируются, кратковременно сильно увеличивают, чтобы начать градиентный спуск из новой точки. Если повторение этой процедуры несколько раз приведет алгоритм в одно и то же состояние НС, можно более или менее уверенно сказать, что найден глобальный максимум, а не какой-то другой.

2. Фреймворк Yii и паттерн MVC

2.1 Фреймворк Yii

История Yii началась 1 января 2008 года, как проект по исправлению некоторых изъянов в фреймворке PRADO (PHP Rapid Application Development Object-oriented), ставшего в 2004 победителем «Zend PHP 5 coding contest».

Фреймворк PRADO был попыткой перенести ASP. NET на платформу PHP, включая ViewState, PostBacks, Page_Load и OnClick. Если посмотреть исходный код, то можно увидеть что некоторые куски кода просто скопированы из ASP. NET (например, разделение на Rare Fields и Occasional Fields в классе Control с целью оптимизации по памяти, которое имеет смысл в. NET, но представляет сомнительную ценность в PHP).

PRADO унаследовал от ASP. NET почти все отрицательные стороны: медленно обрабатывал сложные страницы, имел крутую кривую обучения и был довольно труден в настройке.

В определенный момент автор (Qiang Xue) понял, что PHP-фреймворк должен быть построен несколько по-другому, и вот в октябре 2008 года, после более 10 месяцев закрытой разработки, вышла первая альфа-версия. 3 декабря 2008 был выпущен Yii 1.0. . В данный момент доступна beta версия Yii 2. 10]

Фреймворк Yii обладает следующими возможностями:

— высокая производительность относительно других фреймворков написанных на PHP

— парадигма Модель-вид-контроллер;

— интерфейсы DAO и ActiveRecord для работы с базами данных (PDO);

— поддержка интернационализации;

— кэширование страниц и отдельных фрагментов;

— перехват и обработка ошибок;

— ввод и валидация форм;

— аутентификация и авторизация;

— использование AJAX и интеграция с jQuery;

— генерация базового PHP-кода для CRUD-операций;

— поддержка тем оформления для их лёгкой смены;

— возможность подключения сторонних библиотек;

— миграции базы данных;

— автоматическое тестирование;

— поддержка REST.

По результатам тестов phpmark Yii показал самую лучшую производительность.

Справедливости ради, необходимо отметить, что производительность фреймворков в этих тестах оценивалась на искусственных примерах типа Hello world. Тесты показывают время инициализации фреймворков, и на основании их можно лишь сделать вывод, что Yii имеет качественную подсистему отложенной инициализации (то есть, код загружается только тогда, когда он необходим). Подтвержденной информации о том, что Yii в «боевых условиях» работает быстрее, чем другие фреймворки, нет.

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

— Yii активно развивается.

— Yii не выглядит «монстром» по сравнению с фреймворками symfony и Zend Framework (у которых число строк кода соизмеримо с числом строк кода операционных систем).

— В некоторых сравнительных работах отмечается высокая скорость изучения фреймворка, получения результатов и прототипирования по сравнении с Zend Framework и Symfony. Также отмечается его стабильность и безопасность.

2.2 Паттерн MVC

Model-view-controller -- схема использования нескольких шаблонов проектирования, с помощью которых модель данных приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента таким образом, чтобы модификация одного из компонентов оказывала минимальное воздействие на остальные. Данная схема проектирования часто используется для построения архитектурного каркаса, когда переходят от теории к реализации в конкретной предметной области.

Концепция MVC была описана Трюгве Реенскаугом в 1979 году, работавшим в то время над языком программирования Smalltalk в Xerox PARC. Оригинальная реализация описана в статье «Applications Programming in Smalltalk-80: How to use Model-View-Controller». Затем Джим Алтофф с командой разработчиков реализовали версию MVC для библиотеки классов Smalltalk-80.

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

а) Пассивная модель -- модель не имеет никаких способов воздействовать на представление или контроллер, и используется ими в качестве источника данных для отображения. Все изменения модели отслеживаются контроллером и он же отвечает за перерисовку представления, если это необходимо. Такая модель чаще используется в структурном программировании, так как в этом случае модель представляет просто структуру данных, без методов их обрабатывающих.

б) Активная модель -- модель оповещает представление о том, что в ней произошли изменения, а представления, которые заинтересованы в оповещении, подписываются на эти сообщения. Это позволяет сохранить независимость модели как от контроллера, так и от представления. Классической реализацией концепции MVC принято считать версию именно с активной моделью.

С развитием объектно-ориентированного программирования и понятия о шаблонах проектирования был создан ряд модификаций концепции MVC, которые при реализации у разных авторов могут отличаться от оригинальной. Так, например, Эриан Верми в 2004 году описал пример обобщенного MVC.

Основная цель применения этой концепции состоит в разделении бизнес-логики (модели) от её визуализации (представления, вида). За счет такого разделения повышается возможность повторного использования. Наиболее полезно применение данной концепции в тех случаях, когда пользователь должен видеть те же самые данные одновременно в различных контекстах и/или с различных точек зрения. В частности, выполняются следующие задачи:

а) К одной модели можно присоединить несколько видов, при этом не затрагивая реализацию модели. Например, некоторые данные могут быть одновременно представлены в виде электронной таблицы, гистограммы и круговой диаграммы.

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

в) Ряд разработчиков специализируется только в одной из областей: либо разрабатывают графический интерфейс, либо разрабатывают бизнес-логику. Поэтому возможно добиться того, что программисты, занимающиеся разработкой бизнес-логики (модели), вообще не будут осведомлены о том, какое представление будет использоваться.

MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента (Рисунок 2. 1):

а) Модель. Модель предоставляет знания: данные и методы работы с этими данными, реагирует на запросы, изменяя своё состояние. Не содержит информации, как эти знания можно визуализировать.

б) Представление, вид. Отвечает за отображение информации (визуализацию). Часто в качестве представления выступает форма (окно) с графическими элементами.

в) Контроллер. Обеспечивает связь между пользователем и системой: контролирует ввод данных пользователем и использует модель и представление для реализации необходимой реакции.

Рисунок 2.1 — Схема паттерна MVC

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

3. Реализация приложения

3.1 Краткое описание программы

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

Пользователь может просматривать исторические данные различных котировок, которые он может с легкостью импортировать в приложение.

Также в приложении есть возможность проведения RS анализа временных рядов для нахождения экспоненты Херста. Она в свою очередь необходима для расчета фрактальной размерности при проведении псевдофазовой реконструкции. Присутствует также возможность расчета оптимальной временной задержки.

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

В итоге можно получить прогноз на будущий период.

3.2 Архитектура приложения

Ниже представлена диаграмма классов приложения (Рисунок 3. 1):

Рисунок 3.1 — Диаграмма классов

Класс Quote описан в таблице 1.

Таблица 1 — Описание класса Quote

Свойства и методы

Описание

Id

уникальный идентификатор котировки

Name

название тикера

url

путь, по которому доступны данные котировок по тикеру

Hurst

значение показателя Херста

tableName ()

возвращает имя таблицы, с которой работает модель

rules ()

возвращает массив с параметрами валидации

attributeLabels ()

возвращает массив с русскоязычными названиями свойств

search ($model)

возвращает массив всех объектов этой модели

Класс Stock описан в таблице 2.

Таблица 2 — Описание класса Stock

Свойства и методы

Описание

Id

уникальный идентификатор тикера

ticker_id

внешний ключ на таблицу с тикерами

Date

Дата

Quote

значение котировки

tableName ()

возвращает имя таблицы, с которой работает модель

rules ()

возвращает массив с параметрами валидации

attributeLabels ()

возвращает массив с русскоязычными названиями свойств

search ($model)

возвращает массив всех объектов этой модели

relations ()

возвращает массив с внешними связями данной модели с другими моделями

linear_regression ($x, $y)

считает регрессию

Класс NeuralNetwork описан в таблице 3.

Таблица 3 — Описание класса NeuralNetwork

Свойства и методы

Описание

NeuralNetwork ($nodecount)

конструктор нейронной сети

activation ($value)

возвращает значение выходного нейрона после применения к нему функции активации

Свойства и методы

Описание

addControlData ($input,$output)

добавляет данные для обучения, не для тестирования

addTestData ($input,$output)

добавляет тестовые данные для обучения НС

calculate ($input)

возвращает выходное значение НС для заданного входного вектора

derivative_activation ($value)

реализует производную функции активации

getControlDataIDs ()

возвращает идентификаторы входных векторов при тестировании

getLearningRate ($layer)

возвращает коэффициент скорости обучения для определенного слоя

getMomentum ()

возвращает импульс НС

getRandomWeight ($layer)

— при генерации НС задает рандомные веса нейронов

getTestDataIDs ()

возвращает идентификаторы входных векторов при обучении

isVerbose ()

отображаются ли ошибки НС

load ($filename)

по заданному пути загружает НС

save ($filename)

сохраняет НС в файл

setLearningRate ($learningrate)

задает коэффициент скорости обучения

setMomentum ($momentum)

задает импульс НС

ПоказатьСвернуть
Заполнить форму текущей работой