10754

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

Курсовая

Информатика, кибернетика и программирование

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

Русский

2013-04-01

217.5 KB

53 чел.

Курсовая работа

Нейросетевые технологии и их применение

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

ОГЛАВЛЕНИЕ

[1]
ГЛАВА 1. ПОСТАНОВКА ЗАДАЧИ ОБУЧЕНИЯ

[2]
ГЛАВА 2. УСОВЕРШЕНСТВОВАНИЕ МЕТОДА ОБРАТНОГО РАСПРОСТРАНЕНИЯ ОШИБКИ

[3]
ГЛАВА 3. МЕТОД ОБУЧЕНИЯ RPROP

[4]
ГЛАВА 4. СТОХАСТИЧЕСКИЕ МЕТОДЫ ОБУЧЕНИЯ НЕЙРОННЫХ СЕТЕЙ

[5]
ГЛАВА 5. БОЛЬЦМАНОВСКОЕ ОБУЧЕНИЕ

[6]
ГЛАВА 6. ОБУЧЕНИЕ КОШИ

[7]
ГЛАВА 7. ГЕНЕТИЧЕСКИЕ АЛГОРИТМЫ

[8]
ГЛАВА 8. АНАЛИЗ ПОЛУЧЕННЫХ РЕЗУЛЬТАТОВ

[9]
ЗАКЛЮЧЕНИЕ

[10]
ИСПОЛЬЗУЕМАЯ ЛИТЕРАТУРА


ВВЕДЕНИЕ

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

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

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

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


ГЛАВА 1. ПОСТАНОВКА ЗАДАЧИ ОБУЧЕНИЯ

В процессе функционирования нейронная сеть формирует выходной сигнал Y в соответствии с входным сигналом X, реализуя некоторую функцию g: Y = g(X). Если архитектура сети задана, то вид функции g определяется значениями синаптических весов и смещений сети. Обозначим буквой G множество всех возможных функций g, соответствующих заданной архитектуре сети.

Пусть решение некоторой задачи - функция r: Y=r(X), заданная парами входных-выходных данных (X1, Y1), (X2, Y2),... (XM, YM), для которых
Ym = (Xm), где m=1, 2, ..., M. D – функция ошибки, показывающая для каждой из функций g степень близости к r. Решить поставленную задачу с помощью нейронной сети заданной архитектуры - это значит построить (синтезировать) функцию g Є G, подобрав параметры нейронов (синаптические веса и смещения) таким образом, чтобы функционал качества обращался в оптимум для всех пар (Xm, Ym).

Задача обучения определяется совокупностью пяти элементов [2]:

<X, Y ,r, G, D>,  где X и Y - вход и выход соответственно;

r : XY – определяет желаемый результат обучения; в задаче обучения по примерам функция r задается парами входных-выходных данных: (X1, Y1), (X2, Y2), ..., (XM, YM), для которых Ym = r(Xm),
где
m=1, 2, ..., M;

G - множество функций r : XY для всех g Є G; архитектура связей нейронной сети считается заданной до начала обучения, она определяет множество функций G; D - функция ошибки, показывающая для каждой функции степень близости к r; обучение состоит в поиске (синтезе) функции g, оптимальной по D.

Обучение – это итерационная процедура. На каждой итерации происходит уменьшение функции ошибки. Обучение требует длительных вычислений.

Если выбраны множество обучающих примеров - пар (Xm, Ym),
где m=1, 2, ..., M – и способ вычисления функции ошибки D, обучение нейронной сети превращается в задачу многомерной оптимизации.

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

Для решения этой задачи могут быть использованы следующие алгоритмы:

  1.  Алгоритмы локальной оптимизации с вычислением частных производных первого порядка (градиентные методы).
  2.  Алгоритмы локальной оптимизации с вычислением частных производных первого и второго порядка).
  3.  Стохастические алгоритмы оптимизации.
  4.  Алгоритмы глобальной оптимизации.

К первой группе относятся:

  •  градиентный алгоритм (метод наискорейшего спуска),
    •  методы с одномерной и двумерной оптимизацией целевой функции в направлении антиградиента,
      •  метод сопряженных градиентов,
        •  методы, учитывающие направление антиградиента на нескольких шагах алгоритма (примером могут служить k - ParTan методы).

Ко второй группе относятся:

  •  метод Ньютона;
  •  методы оптимизации с разреженными матрицами Гессе;
  •  квазиньютоновские методы;
  •  метод Гаусса-Ньютона;
  •  метод Левенберга-Маркардта;

Стохастическими алгоритмами являются:

  •  поиск в случайном направлении (метод случайной стрельбы);
  •  имитация отжига (метод Больцмана, метод Коши);
  •  метод Монте-Карло (численный метод статистических испытаний);

К алгоритмам глобальной оптимизации относят генетические алгоритмы.

Далее подробно рассмотрим некоторые из этих методов.


ГЛАВА 2. УСОВЕРШЕНСТВОВАНИЕ МЕТОДА ОБРАТНОГО РАСПРОСТРАНЕНИЯ ОШИБКИ

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

Но для целевых функций, существенно нелинейных, имеющих большое количество локальных минимумов, есть алгоритмы, позволяющие ускорить процесс обучения методом обратного распространения ошибки [3]. Одним из таковых является «следящий алгоритм». Его название красноречиво говорит о сути данного алгоритма: для того, чтобы обнаружить, что сеть попала в локальный минимум и скорость сходимости стала низкой, предлагается следить за процессом обучения, запоминая значение целевой функции на каждом витке цикла, и в случае, если функция уменьшилась меньше, чем на заданную величину, выполнить процедуру вывода сети из локального минимума. Для этого предлагается изменять значения весов и порогов сети на некоторые относительно небольшие значения таким образом, чтобы сеть сохранила весь предыдущий положительный опыт и в то же время могла изменить своё положение в многомерном пространстве весов и порогов.

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

Сам алгоритм выглядит следующим образом:

  1.  Инициализация параметров градиентного алгоритма обучения МНС. Определяется размер окна слежения, минимальное значение изменения целевой функции, при достижении которого включается коррекция весов не градиентным методом, значение, на которое будем менять веса.
  2.  Выполняется градиентный алгоритм.
  3.  При полном заполнении окна слежения выполняется сравнение полученного значения целевой функции с соответствующим значением из окна слежения.
  4.  Если это изменение нас устраивает, то продолжаем обучение градиентным методом. Если нет, то выполняем «встряску» весов нейронной сети, то есть корректируем значения сил синаптических связей функцией R(w). Если значение целевой функции уменьшится после встряски, то оставляем изменения и продолжаем обучение, если нет, то восстанавливаем силы синаптических связей, которые были до «встряски».
  5.  Если выполнено условие останова, то закончить обучение, иначе перейти на шаг 2.

В качестве функции корректировки синаптических весов можно брать следующие функции:

  •  R(w) = άw, (1)
    •  R(w) = w + ά w; (2)
    •  R(w) = w + ά rand, (3)

Стоит отметить, что при реализации этого алгоритма, результаты применения которого будут рассмотрены в главе 8, использовалась формула (2), причём согласно практической рекомендации в [3], ά было взято равным 1,03.


ГЛАВА 3. МЕТОД ОБУЧЕНИЯ RPROP

Одним из серьезных недостатков алгоритма с обратным распространением ошибки, используемого для обучения многослойных нейронных сетей, является слишком долгий процесс обучения, что делает неприменимым использование данного алгоритма для широкого круга задач, которые требуют быстрого решения. Рассмотрим один из таких алгоритмов, названный Resilient Propagation (Rprop), который был предложен М. Ридмиллером (M.Riedmiller) и Г. Брауном (H.Braun) [6].

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

В отличие от стандартного алгоритма Backprop, RProp использует только знаки частных производных для подстройки весовых коэффициентов. Алгоритм использует так называемое «обучение по эпохам», когда коррекция весов происходит после предъявления сети всех примеров из обучающей выборки.

Для определения величины коррекции используется следующее правило:

(1)

Если на текущем шаге частная производная по соответствующему весу wij поменяла свой знак, то это говорит о том, что последнее изменение было большим, и алгоритм проскочил локальный минимум, и, следовательно, величину изменения необходимо уменьшить на η- и вернуть предыдущее значение весового коэффициента: другими словами необходимо произвести 'откат'.

(2)

Если знак частной производной не изменился, то нужно увеличить величину коррекции на η+ для достижения более быстрой сходимости. Зафиксировав множители η- и η+, можно отказаться от глобальных параметров настройки нейронной сети, что также можно рассматривать как преимущество рассматриваемого алгоритма перед стандартным алгоритмом Backprop.

Рекомендованные значения для η-= 0.5, η+ = 1.2, но нет никаких ограничений на использование других значений для этих параметров.

Для того, чтобы не допустить слишком больших или малых значений весов, величину коррекции ограничивают сверху максимальным  и снизу минимальным  значениями величины коррекции, которые по умолчанию, соответственно, устанавливаются равными 50 и 1.0E-6.

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

Для вычисления значения коррекции весов используется следующее правило:

(3)

Если производная положительна, т.е. ошибка возрастает, то вестовый коэффициент уменьшается на величину коррекции, в противном случае – увеличивается. Затем подстраиваются веса:

(4)

Алгоритм метода RProp выглядит следующим образом:

  •  Проинициализировать величину коррекции  
  •  Предъявить все примеры из выборки и вычислить частные производные.
  •  Подсчитать новое значение  по формулам (1) и (3).
  •  Скорректировать веса по формуле (4).
  •  Если условие останова не выполнено, то перейти к (2).

Практика показывает, что данный алгоритм сходится в 4-5 раз быстрее, чем стандартный алгоритм Backprop.


ГЛАВА 4. СТОХАСТИЧЕСКИЕ МЕТОДЫ ОБУЧЕНИЯ НЕЙРОННЫХ СЕТЕЙ

Стохастические методы обучения выполняют псевдослучайные изменения величин весов, сохраняя те изменения, которые ведут к улучшениям [4]. Чтобы показать это наглядно, рассмотрим рис. 1, на котором изображена типичная сеть, где нейроны соединены с помощью весов. Выход нейрона является здесь взвешенной суммой его входов, которая преобразована с помощью нелинейной функции. Для обучения сети могут быть использованы следующие процедуры:

  1.  Выбрать вес случайным образом и подкорректировать его на небольшое случайное число. Предъявить множество входов и вычислить получающиеся выходы.
  2.  Сравнить эти выходы с желаемыми выходами и вычислить величину разности между ними. Общепринятый метод состоит в нахождении разности между фактическим и желаемым выходами для каждого элемента обучаемой пары, возведение разностей в квадрат и нахождение суммы этих квадратов. Целью обучения является минимизация этой разности, часто называемой целевой функцией.
  3.  Выбрать вес случайным образом и подкорректировать его на небольшое случайное значение. Если коррекция помогает (уменьшает целевую функцию), то сохранить ее, в противном случае вернуться к первоначальному значению веса.
  4.  Повторять шаги с 1 по 3 до тех пор, пока сеть не будет обучена в достаточной степени.

Рис. 1.

Этот процесс стремится минимизировать целевую функцию, но может попасть, как в ловушку, в неудачное решение. На рис. 2. показано, как это может происходить в системе с единственным весом. Допустим, что первоначально вес взят равным значению в точке A. Если случайные шаги по весу малы, то любые отклонения от точки A увеличивают целевую функцию и будут отвергнуты. Лучшее значение веса, принимаемое в точке B, никогда не будет найдено, и система будет поймана в ловушку локальным минимумом вместо глобального минимума в точке B. Если же случайные коррекции веса очень велики, то как точка A, так и точка B будут часто посещаться, но то же самое будет верно и для каждой другой точки. Вес будет меняться так резко, что он никогда не установится в желаемом минимуме.

Рис.2.

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

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

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

Если постепенно уменьшать силу встряхивания, то будет достигнуто условие, при котором шарик будет на короткое время "застревать" в точке B. При еще более слабом встряхивании шарик будет на короткое время останавливаться как в точке B, так и в точке A. При непрерывном уменьшении силы встряхивания будет достигнута критическая точка, когда сила встряхивания достаточна для перемещения шарика из точки A в точку B, но недостаточна для того, чтобы шарик мог "вскарабкаться" из B в A. Таким образом, окончательно шарик остановится в точке глобального минимума, когда амплитуда встряхивания уменьшится до нуля.

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

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


ГЛАВА 5. БОЛЬЦМАНОВСКОЕ ОБУЧЕНИЕ

Этот стохастический метод непосредственно применим к обучению искусственных нейронных сетей:

  1.  Определить переменную T, представляющую искусственную температуру. Придать T большое начальное значение.
  2.  Предъявить сети множество входов и вычислить выходы и целевую функцию.
  3.  Дать случайное изменение весу и пересчитать выход сети и изменение целевой функции в соответствии со сделанным изменением веса.
  4.  Если целевая функция уменьшилась (улучшилась), то сохранить изменение веса. Если изменение веса приводит к увеличению целевой функции, то вероятность сохранения этого изменения вычисляется с помощью распределения Больцмана:

где  P(c) — вероятность изменения c в целевой функции; k — константа, аналогичная константе Больцмана, выбираемая в зависимости от задачи; T — искусственная температура.

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

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

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

где P(u) — вероятность изменения веса на величину u, T — искусственная температура.

Так как требуется величина изменения веса Δu, а не вероятность изменения веса, имеющего величину u, то метод Монте-Карло может быть использован следующим образом:

  •  Найти кумулятивную вероятность, соответствующую . Это есть интеграл от P(u) в пределах от 0 до u. Поскольку в данном случае P(u) не может быть проинтегрирована аналитически, она должна интегрироваться численно, а результат необходимо затабулировать.
  •  Выбрать случайное число из равномерного распределения на интервале (0,1). Используя эту величину в качестве значения P(u), найти в таблице соответствующее значение для величины изменения веса.

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

где T(t) — искусственная температура как функция времени; T0 — начальная искусственная температура; t — искусственное время.

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


ГЛАВА 6. ОБУЧЕНИЕ КОШИ

В этом методе при вычислении величины шага распределение Больцмана заменяется на распределение Коши. Распределение Коши имеет, как показано на рис. 3, более длинные "хвосты", увеличивая тем самым вероятность больших шагов.

Рис. 3.

В действительности, распределение Коши имеет бесконечную (неопределенную) дисперсию. С помощью такого простого изменения максимальная скорость уменьшения температуры становится обратно пропорциональной линейной величине, а не логарифму, как для алгоритма обучения Больцмана. Это резко уменьшает время обучения. Зависимость может быть выражена следующим образом:

Распределение Коши имеет вид

где P(x) есть вероятность шага величины x.

В данном уравнении  может быть проинтегрирована стандартными методами. Решая относительно x, получаем

где ρ — коэффициент скорости обучения; xc — изменение веса.

Теперь применение метода Монте-Карло становится очень простым. Для нахождения x в этом случае выбирается случайное число из равномерного распределения на открытом интервале (-π/2; π/2) (необходимо ограничить функцию тангенса). Далее вычисляем вероятность изменения на данную величину, предполагая, что это изменение имеет распределение Коши, а затем с помощью полученной вероятности вычисляем величину шага.


ГЛАВА 7. ГЕНЕТИЧЕСКИЕ АЛГОРИТМЫ

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

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

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

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

Метод оптимизации технических систем, в котором реализована эта идея, получил название “Генетические алгоритмы”. Генетические алгоритмы позволяют получать хорошие результаты при решении NP - полных задач.

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

Таблица 1

Термин ГА

Пояснение

Популяция

случайное множество случайных решений

Особь популяции

одно из решений множества

Индивид

уникальное решение множества

Размер популяции

размер (число) множества решений

Число поколений

количество итераций, в течение которых обрабатывается множество (время генетического поиска)

Хромосома, наследственная информация, генотип особи

закодированная структура данных S, определяющая решение (строка или стринг кодов)

Ген

элементарный код в структуре S

Локус гена

место кода в структуре S

Аллели гена

алфавит кода

Аллель

элементарный символ из алфавита кода

Фенотип (фитнес)

оценка решения, позволяющая судить о его качестве (целевая функция)

Кроссинговер (скрещивание)

генерация двух новых решений (потомков) путем перекомпоновки двух старых решений (родителей)

Мутация

генерация нового решения на основе старого путем перестройки кода его структуры или самой структуры

Селекция особей

комплекс правил, моделирующих выживание решений во множестве на основе их оценок

Выживание особи

переход решения (с некоторыми изменениями  структуры) в следующую итерацию

Лидер популяции

лучшее (оптимальное) решение множества

Аутсайдер популяции

худшее решение множества

Основные этапы процесса эволюции, на основе которого создаются различные схемы генетического поиска, согласно Холланду, следующие:

  1.  Конструируется начальная популяция.
  2.  Выбираются случайным образом две родительские хромосомы из популяции.
  3.  Копирование выбранных хромосом и применение генетических операторов для создания новых хромосом.
  4.  Отбор и последующее удаление хромосом из популяции для восстановления первоначального ее размера.

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

Простой генетический алгоритм (ПГА) был впервые описан Голдбергом на основе работ Холланда. Механизм простого ГА очень несложен. Он копирует последовательности и переставляет их части. Предварительно ГА случайно генерирует популяцию последовательностей - стрингов (хромосом). Затем ГА применяет множество простых операций к начальной популяции и генерирует новые популяции.

ПГА состоит из операторов:

  1.   репродукции;
  2.   кроссинговера;
  3.   мутации.

Первоначально, простой генетический алгоритм (ПГА), предложенный Гольдбергом, имел следующую структуру:

  1.  Создание исходной популяции П0, оценка и перенос ее в текущую популяцию;
  2.  Создание с помощью оператора репродукции новой популяции Пi и копирование ее в текущую популяцию;
  3.  Оценка текущей популяции Пi;
  4.  Если не прошло заданное число поколений, то возврат к пункту 2.
  5.  Вывод индивида, обладающего лучшим значением ЦФ.

Для сравнения методов обучения нейронных сетей необходимо использовать два критерия:

  •  Количество шагов алгоритма, которые необходимо выполнить для получения решения.
  •  Количество дополнительных переменных, которые потребуются для организации вычислительного процесса.

Итак, генетические алгоритмы являются случайно направленными поисковыми методами. Основные отличия генетических алгоритмов от других оптимизационных и поисковых процедур заключаются в следующем:

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

2) в аспекте преобразования решение рассматривается как некоторая закодированная структура, а не как совокупность параметров. Это позволяет в некоторых случаях увеличить процесс обработки данных, т.е. быстродействие оптимизационного поиска;

3) для оценки пригодности решения наряду с использованием целевой функции дополнительно моделируются правила выживания в исследуемом множестве. Эти правила повышают разнообразие множества решений, которое необходимо для выполнения пункта “1”;

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

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

В отличие от остальных оптимизационных методов ГА более приспособлены для нахождения новых решений за счет объединения квазиоптимальных решений из разных популяций и обладают возможностями для выхода из локальных оптимумов.


ГЛАВА 8. АНАЛИЗ ПОЛУЧЕННЫХ РЕЗУЛЬТАТОВ

Для чистоты эксперимента реализацию и применение алгоритмов обучения проведём на примере одной и той же нейронной сети, которая не имеет скрытых слоёв, с 14 входами и 3 выходами. Воспользуемся обучающей выборкой из предыдущей работы. Так же потребуем одно и то же условие останова алгоритма  обучения, то есть при  достижении  заданной  точности ε0 = 0,015.

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

Результат работы алгоритма обучения Коши:

Рис. 4.

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

Результаты работы алгоритма RProp:

Рис. 5.

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

Теперь сравним работу алгоритма обратного распространения ошибки и выполненного на его основе следящего алгоритма.

Результаты работы градиентного алгоритма (на основе метода наискорейшего спуска):

Рис. 6.

Результаты работы следящего алгоритма:

Рис. 7.

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

Реализация описанных выше алгоритмов на языке Delphi находится в приложении к этой работе.


ЗАКЛЮЧЕНИЕ

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

Рис. 8.


ИСПОЛЬЗУЕМАЯ ЛИТЕРАТУРА

  1.  Ясницкий Л.Н. «Введение в искусственный интеллект». М.: Издательский центр «Академия», 2005. 180с.
  2.  Отчет по научно-исследовательской работе «Создание аналитического обзора информационных источников по применению нейронных сетей для задач газовой технологии»; Копосов А.И., Щербаков И.Б., Кисленко Н.А., Кисленко О.П., Варивода Ю.В. и др., ВНИИГАЗ, 1995.
  3.  Дубровин В.И., Субботин С.А. «Алгоритм ускоренного обучения персептронов» // Сборник научных трудов 4-й Всероссийской научно-технической конференции «Нейроинформатика-2002».-М.:МИФИ, 2002.-Ч. 2.-С.106-112.
  4.  Ф. Уоссермен «Нейрокомпьютерная техника: Теория и практика». Перевод на русский язык: Ю. А. Зуев, В. А. Точенов, 1992.
  5.  Курейчик В.М. «Генетические алгоритмы». Монография. Таганрог: Изд - во ТРТУ, 1998, 185 с.
  6.  http://www.basegroup.ru/neural/rprop.htm. «Алгоритм обучения RProp», Шахиди Акобир.


ПРИЛОЖЕНИЕ

{Программная реализация стохастического обучения Коши:}

procedure testKoshi();

var i, j, k, a, b: Integer;

begin

 Assign(F, 'Output.txt');

 Rewrite(F);

 Writeln(F, 'Koshi!!!');

 SetLength(E, Q);

 SetLength(Y, Q);

 ErrorSqr := 1;

 CountEpoch := 1;

 while (ErrorSqr > Eps) and (CountEpoch < MaxEpoch) do

 begin

   T := T0 / CountEpoch;

   for k := 0 to Q - 1 do

   begin

     for i := 0 to M - 1 do

     begin

       Summa := 0;

       for j := 0 to N - 1 do

       begin

         W := NeuralNet[1].Neuron[j].Arc[i];

         Summa := Summa + Xq[k][j] * W;

       end;

       Y[k][i] := Sigma_Func(Summa);

     end;

     E[k] := 0;

     for i := 0 to M - 1 do

       E[k] := E[k] + sqr(Dq[k][i] - Y[k][i]);

     E[k] := 0.5 * E[k];

     for i := 0 to M - 1 do

       for j := 0 to N - 1 do

       begin

         Xc := Eta * RandomRange(-100000, 100000) / 100000;

         W := NeuralNet[1].Neuron[j].Arc[i];

         W := W + Xc;

         NeuralNet[1].Neuron[j].Arc[i] := W;

         oldE := E[k];

         for a := 0 to M - 1 do

         begin

           Summa := 0;

           for b := 0 to N - 1 do

           begin

             W := NeuralNet[1].Neuron[b].Arc[a];

             Summa := Summa + Xq[k][b] * W;

           end;

           Y[k][a] := Sigma_Func(Summa);

         end;

         E[k] := 0;

         for a := 0 to M - 1 do

           E[k] := E[k] + sqr(Dq[k][a] - Y[k][a]);

         E[k] := 0.5 * E[k];

         if oldE < E[k] then

         begin

           r := RandomRange(6, 10) / 10;

           Px := T / sqr(T) + sqr(r);

           if (Px <= r) then

           begin

             W := NeuralNet[1].Neuron[j].Arc[i];

             W := W - Xc;

             NeuralNet[1].Neuron[j].Arc[i] := W;

           end;

         end;

       end;

   end;

   Summa := 0;

   for k := 0 to Q - 1 do

     Summa:= Summa + 2 * E[k];

   ErrorSqr := (1 / Q) * Summa;

   Writeln(F, FloatToStr(ErrorSqr));

   inc(CountEpoch);

 end;

 Close(F);

end;

{ Программная реализация следящего алгоритма: }

procedure testSpyProp();

var i, j, k, l: Integer;

   CountEpoch: Integer;

   Y: array of array[0..M-1] of Real;

   Sum: Real;

   Eta: Real;

   SqrErr: Real;

   alpha: Real;

   WinSpy: array[1..10] of Real;

   w: Extended;

   MinChange: Real;

begin

 for i := 1 to 5 do

   WinSpy[i] := 0;

 SetLength(Y, Q);

 CountEpoch := 1;

 Eta := 1.25;

 MinChange := 0.1;

 alpha := 1.03;

 for k := 0 to Q - 1 do

   for i := 0 to M - 1 do

   begin

     Sum := 0;

     for j := 0 to N - 1 do

       Sum := Sum + NeuralNet[1].Neuron[j].Arc[i] * Xq[k][j];

     Y[k][i] := Sigma_Func(Sum);

   end;

 Sum := 0;

 for k := 1 to Q - 1 do

   for i := 1 to M - 1 do

     Sum := Sum + sqr(Dq[k][i] - Y[k][i]);

 SqrErr := (1 / Q) * Sum;

 while (SqrErr > Eps) and (CountEpoch < MaxEpoch) do

 begin

   if (CountEpoch > 5) then

   begin

     if (WinSpy[((CountEpoch - 1) mod 5) + 1] - SqrErr) < MinChange then

     begin

       for i := 0 to M - 1 do

         for j := 0 to N - 1 do

         begin

           w := NeuralNet[1].Neuron[j].Arc[i];

           w := w + alpha * (RandomRange(-10000, 10000)/10000);

           NeuralNet[1].Neuron[j].Arc[i] := w

         end

     end;

   end;

   WinSpy[1] := WinSpy[1];

   for k := 0 to Q - 1 do

   begin

     for i := 0 to M - 1 do

     begin

       for j := 0 to N - 1 do

       begin

         w := Eta * (Dq[k][i] - Y[k][i]);

         w := w * (1 - Y[k][i]);

         w := w * Y[k][i];

         w := w * Xq[k][j];

         NeuralNet[1].Neuron[j].Arc[i] := NeuralNet[1].Neuron[j].Arc[i] + w;

       end;

     end

   end;

   for k := 0 to Q - 1 do

     for i := 0 to M - 1 do

     begin

       Sum := 0;

       for j := 0 to N - 1 do

         Sum := Sum + NeuralNet[1].Neuron[j].Arc[i] * Xq[k][j];

       Y[k][i] := Sigma_Func(Sum);

     end;

   

   Sum := 0;

   for k := 1 to Q - 1 do

     for i := 1 to M - 1 do

       Sum := Sum + sqr(Dq[k][i] - Y[k][i]);

   SqrErr := (1 / Q) * Sum;

   l := ((CountEpoch - 1) mod 5) + 1;

   WinSpy[l] := SqrErr;

   inc(CountEpoch);

 end;

end;

{ Программная реализация алгоритма RProp }

procedure testRProp();

var i, j, k: Integer;

   Err: Real

   CountEpoch: Integer

   Sum: Real

   Y: array of array[0..M-1] of Real

   E: array of array[0..M-1, 0..N-1] of Real

   deltaW: array[0..M-1, 0..N-1] of Real

   dE: array[0..M-1, 0..N-1] of Real;

   prevdE: array[0..M-1, 0..N-1] of Real;  

   F: Text;

begin

 Assign(F, 'Output.txt');

 Rewrite(F);

 Writeln(F, 'RProp');

 SetLength(Y, Q);

 SetLength(E, Q);

 Err := 1;

 CountEpoch := 1;

 for i := 0 to M - 1 do

   for j := 0 to N - 1 do

   begin

     prevdE[i][j] := 1;

     deltaW[i][j] := 0.1

   end;

 while (Err > Eps) and (CountEpoch < MaxEpoch) do

 begin

   for k := 0 to Q - 1 do

     for i := 0 to M - 1 do

     begin

       Sum := 0;

       for j := 0 to N - 1 do

         Sum := Sum + NeuralNet[1].Neuron[j].Arc[i] * Xq[k][j];

       Y[k][i] := Sigma_Func(Sum);

       for j := 0 to N - 1 do

         E[k][i][j] := (Dq[k][i] - Y[k][i]) * (Y[k][i] - 1) * Y[k][i] * Xq[k][j];

     end;

   for i := 0 to M - 1 do

     for j := 0 to N - 1 do

     begin

       dE[i][j] := 0;

       for k := 0 to Q - 1 do

         dE[i][j] := dE[i][j] + E[k][i][j];

       if prevdE[i][j] * dE[i][j] > 0 then

         deltaW[i][j] := deltaW[i][j] * EtaPlus

       else

         deltaW[i][j] := deltaW[i][j] * EtaMinus;

       prevdE[i][j] := dE[i][j];

     end;

   Sum := 0;

   for k := 0 to Q - 1 do

     for i := 0 to M - 1 do

       Sum := Sum + sqr(Y[k][i] - Dq[k][i]);

   Err := (1 / Q) * Sum;

   Writeln(F, IntToStr(CountEpoch), ' - ', FloatToStr(Err));

   if Err > Eps then

   begin

     for i := 0 to M - 1 do

       for j := 0 to N - 1 do

         if dE[i][j] > 0 then

           NeuralNet[1].Neuron[j].Arc[i] := NeuralNet[1].Neuron[j].Arc[i] + deltaW[i][j]

         else

           NeuralNet[1].Neuron[j].Arc[i] := NeuralNet[1].Neuron[j].Arc[i] - deltaW[i][j];

   end;

   inc(CountEpoch)

 end;

end;


 

А также другие работы, которые могут Вас заинтересовать

37147. Социал-демократия: большевизм и меньшевизм в революционном движении России 39.5 KB
  Идейное размежевание с меньшевиками сопровождалось не прекращавшимися попытками восстановить единство РСДРП но предложение Ленина разрешить партийный кризис созывом съезда не нашло поддержки у меньшевиков а также у большевиков – членов ЦК партии считавших что съезд лишь закрепит раскол. Отказавшись от предложенного Лениным переименования партии в коммунистическую делегаты конференции решили добавить к традиционному ее названию Российская социалдемократическая рабочая партия слово большевиков и поручили ЦК партии подготовить проект...
37148. Причины, характер, особенности, этапы и итоги революции 1905-1907 гг 40 KB
  Оно стало началом революции 1905 1907 гг. Причины революции многообразны но все они так или иначе связаны с процессами модернизации политической экономической социальной областей жизни страны. Либералы к началу революции создать политические партии не смогли.
37149. Государственная Дума – первый опыт парламентаризма 34.5 KB
  Вследствие неодновременности выборов работа Государственной думы проходила при неполном составе её пополнение шло в ходе работы. Комиссии Государственной думы работали над законопроектами о неприкосновенности личности свободе совести собраний об отмене смертной казни. В центре внимания II Думы как и ее предшественницы находился аграрный вопрос. Третьеиюньский государственный переворот новое Положение о выборах в Думу в нарушение Основных законов было утверждено царем без санкции Думы и Государственного совета означал поражение...
37151. Столыпинская политика модернизации России. Отношение к ней российского общества. Судьба столыпинских реформ 32 KB
  разрешил выдачу ссуды под залог любой приобретаемой крестьянами надельной земли. По желанию крестьянина выделавшегося из общины отдельные полосы его земли могли быть сведены в один участков отруб. Продажа земли через него также помогала крестьянам увеличить своё землевладение. Третьим важным пунктом реформы было переселение крестьян на свободные земли в Сибирь Среднюю Азию и Казахстан.
37152. Дворцовые перевороты. Расширение привилегий дворян 67.67 KB
  Перевороты После смерти императора Петра I в России начался период когда верховная власть достаточно быстро переходила из рук в руки причем занимавшие престол не всегда имели на то законные права. Началось это сразу после кончины Петра I в 1725 г. Новая аристократия сформировавшаяся в период правления императорареформатора опасаясь потерять свое благополучие и могущество способствовала восхождению на престол Екатерины I вдовы Петра. Наибольшую выгоду от этого извлек первый фаворит Петра I светлейший князь А.
37153. оссия при Екатерине Второй, политика «просвещенного абсолютизма» 18.68 KB
  Колоссальное количество монастырских крестьян были переданы государству благодаря чему пополнилась казна России. Как и во многих других государствах Европы для России в период правления Екатерины II была характерна политика просвещенного абсолютизма которая предполагала правителя мудрого покровительствовавшего искусству благодетеля всей науки.И все же проявлением политики просвещенного абсолютизма было создание и деятельность комиссии по составлению нового законодательного свода России вместо отжившего Соборного Уложения 1649 г. В...
37154. Внутренняя политика первой четверти XIX века. Александр Первый. Негласный комитет 131.84 KB
  Александр Первый. ЭПОХА АЛЕКСАНДРА I АЛЕКСАНДР I 1777 1825 Четверть века царствования императора Александра Павловича ярчайшая эпоха русской истории. Во время царствования императора Александра I представители образованной части русского общества почувствовали себя европейцами. 245 Портрет Александра I.
37155. «Восточный вопрос» во внешней политике России в 30-50 гг. XIX в. Крымская война 20.83 KB
  Восточный вопрос во внешней политике России в 3050 гг. в центре внешней политики России находился Восточный вопрос – сложный конгломерат острейших международных противоречий от разрешения которых зависели безопасность границ империи дальнейшие перспективы развития черноморской торговли и экономическое состояние южных губерний. Это движение традиционно получало поддержку России выступавшей в качестве заступницы славян христианского вероисповедания преимущественно населявших Балканы. Такая позиция объективно способствовавшая освобождению...