Цель работы: получение начальных навыков обучения простейшей нейронной сети.

3.1. Общие теоретические аспекты

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

Рис. 3.1. Схематическое изображение нейрона

Рис. 3.1. Схематическое изображение нейрона

Интеллект одиночного нейрона невысок. Можно считать, что он реализует в НС простую регрессивную модель для N независимых переменных (см. рис. 3.1). Если же объединить множество нейронов, в сетевые структуры, то и реализуемая функция может быть сколь угодно сложной.

Рис. 3.2. Простейшая трехслойная нейронная сеть

Рис. 3.2. Простейшая трехслойная нейронная сеть

На рис. 3.2 НС имеет явно выраженные слои, т.е. ряды нейронов, равноудаленные от входа (выхода). Могут создаваться и другие структуры, в том числе с обратными связями (рекуррентные).

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

S = W1X1+W2X2+…+WNXN

подвергается изменению функцией f(S), называемой функцией активации (см. рис. 3.3). Выходной сигнал Y также может повергаться взвешиванию (масштабированию). В качестве функции активации чаще всего используются:

  • сигмоидная функция – Y = 1 / (1 + exp(-l*S));
  • гиперболический тангенс;
  • логарифмическая функция;
  • линейная и другие.

Рис. 3.3. Пример структуры отдельного нейрона

Рис. 3.3. Пример структуры отдельного нейрона

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

Рис. 3.4. Алгоритм обучения нейронных сетей

Рис. 3.4. Алгоритм обучения нейронных сетей

Для НС этот процесс может быть представлен следующим алгоритмом (см. рис. 3.4):

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

Задача обучения сети имеет огромную размерность. Так, для обучения сети, состоящей всего из 10 нейронов, в каждом из которых по 3 синапса, необходимо подобрать значения по меньшей мере 40 параметров (30 значений Wi – синаптических весов, и 10 параметров функций активации li). Если каждый из параметров подбирать с дискретностью 1/100, то общее число прогонов сети на множестве тренировочных данных составит 10040.

Данная задача удовлетворительно решается с помощью алгоритма обратного распространения (back propagation), который заключается в следующем.

  1. Вначале все параметры сети устанавливаются произвольно.
  2. Через сеть прогоняются тренировочные данные, и вычисляется суммарная функция ошибки:
  3. где Yi – вычисленное значений выходной величины, yi – ожидаемое значение.
  4. Вычисляется значение производных функции ошибки по каждому параметру, а на их основе – расчет поправок к параметрам НС.
  5. Параметры сети корректируются на величину поправок, после чего шаги 2 и 3 повторяются с начала до тех пор, пока функция ошибки не снизится до заданного уровня.

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

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

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

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

Каким же образом настроить сеть на прогнозирование поведения величины, если входная величина только одна? Для этого следует ее размножить на столько экземпляров, какова глубина предыстории нас интересует, и сдвинуть таким образом, чтобы на вход НС подавались вектора:

X1, X2, … , XN

X2, X3, … , XN+1

X3, X4, … , XN+2

Таким образом, одна входная величина превращается в N значений временного ряда в моменты времени 1, 2, … , N и, двигаясь вдоль временной оси, мы получим множество наблюдений. А в качестве выходной величины для сравнения с предсказанным значением мы должны использовать значение этого ряда в момент времени N+1.

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

Что касается разбиения множества исходных данных на тренировочные и тестовые наборы, то для временных рядов неприемлема случайная выборка или регулярное «прореживание» исходных данных, поскольку в этих случаях будет нарушена временная последовательность. Здесь необходимо разбить временной ряд на два отрезка, например, первые 50% данных и последние 50%.

Если в результате обучения не был получен удовлетворительный результат, то необходимо изменить структуру сети. Это может быть сделано вручную, либо структура может выбираться из заранее созданного набора (библиотеки структур). Программные продукты, поддерживающие такие решения, существуют. Но наиболее удачным следует признать подход, при котором структура сети формируется автоматически. Примером может служить НС фирмы BioComp Systems Inc. (www.biocompsystems.com).

Данный подход заключается в применении к этой задаче генетических алгоритмов (другое название – «искусственная жизнь»). Дело в том, что в процессе обучения сети выявляются «сильные» нейроны и связи между ними (чувствительные к изменению параметров) и «слабые» (параметры которых можно менять произвольно без существенного влияния на конечный результат). Используя эти данные, можно управлять «популяцией» нейронов. Слабые нейроны и синапсы должны отмирать, а для развития структуры, а также, чтобы предотвратить всеобщее «вымирание», сеть подвергается «мутации»: в нее случайным образом или другим способом, например, для усиления «сильных» нейронов добавляются новые нейроны и синаптические связи. Таким образом, через множество поколений, количество которых может достигать десятков тысяч, сеть будет иметь оптимальную структуру.

3.2. Состав лабораторной работы №3

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

Предлагается выполнить обучение простейшей нейронной сети, состоящих из одного нейрона, на решение задачи прогнозирования значений временного ряда yi (см. табл. 3.1).

Пример тренировочных данных для нейронной сети
прогнозирования значений временного ряда

Таблица 3.1.

y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11 y12 y13 y14 y15
1,59 5,73 0,48 5,28 1,35 5,91 0,77 5,25 1,37 4,42 0,26 4,21 1,90 4,08 1,40

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

Прогнозирование заключается в том, чтобы на основе yi, yi+1, yi+2 вычислить yi+3. Иными словами, НС «скользит» вдоль временного ряда, «ощупывая» синапсами по три соседних числа, пытается предсказать значение следующего за ними. Таким образом, для приведенного выше примера входными и выходными величинами будут следующие (см. табл. 3.2).

Ожидаемые значения временного ряда на каждом шаге обучения

Таблица 3.2.

Вход Выход
1,59  5,73  0,48 5,28
5,73  0,48  5,28 1,35
0,48  5,28  1,35 5,91
5,28  1,35  5,91 0,77
и т.д.

Рис. 3.5. Структурная схема нейронной сети прогнозирования значений временного ряда

Рис. 3.5. Структурная схема нейронной сети прогнозирования значений временного ряда

В лабораторной работе единственный нейрон (рис.3.5)

Представленный нейрон эмулируется следующими формулами:

si = w1*yi-3+ w2*yi-2 + w3*yi-1 ;

Yi = 1/(1+exp(-si))*10 ,

где w1, w2, w3 – синаптические веса; yi-3, yi-2, yi-1 – известные предыдущие значения этого временного ряда (i набором входных данных); si – взвешенная сумма i-го набора входных данных; Yi – прогнозируемое значение i-го члена временного ряда yi; 10 – масштабный множитель. В качестве функции активации используется логистическая функция сигмоида  Yi= 1/(1+exp(-si)) .

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

Обучение нейронной сети заключается в нахождении значений синаптических весов и выполняется с помощью алгоритма обратного распространения ошибки (back propagation algorithm) [1], реализованного в электронной таблице следующим образом:

1. В начале всем синаптическим весам w присваивается значение единица, и вычисляется значение суммы квадратов ошибки Et на всем множестве обучающей выборки.

2. Для каждого синапса на каждом наборе входных данных вычисляется значение производной функции ошибки d Et /d wjk по формулам:

d E(t) /d wjk = (d E(t) / d yj ) * (d yj / d sj ) * (d sj / d wjk );

d yj / d sj = exp(-sj ) / (1+exp(-sj))2 .

Для сети, состоящей из одного нейрона:

d E(t) / d y = Yy ;

при этом значение dsj/dwjk равно выходу нейрона предыдущего слоя или соответствующему входному сигналу для нейрона первого слоя в силу линейного характера функции s.

Таким образом, нами найдены градиенты функции ошибки по wjk.

3. После этого вычисляются поправки к wjk по формуле:

D wjk = – v * d E(t) /d wjk ,

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

4. Теперь следует скорректировать wjk на величину вычисленных поправок, пересчитать всю таблицу и снова оценить величину ошибки E(t). Эту процедуру необходимо повторять до тех пор, пока ошибка не перестанет уменьшаться. Режим автоматического пересчета таблицы должен быть отключен, иначе после коррекции первого же wjk все остальные значения таблицы изменятся.

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

2.2.1. Порядок действий при выполнении лабораторной работы №3

  1. Открыть файл lab_iis3.xls.
  2. Изучить структуру таблицы, идентифицировать формулы, описывающие нейронную сеть и алгоритм обратного распространения.
  3. Установить параметры Сервис > Параметры > Вычисления > Вручную.
  4. Включить параметр Сервис > Параметры > Вычисления > Итерации.
  5. Занести данные своего варианта (см. табл. 3.3) в первый столбец таблицы.
  6. Установить стартовые значения всех весовых коэффициентов  w=1.
  7. Установить коэффициент скорости обучения v = 0,2. Счетчик итераций установить равным 0.
  8. Начать обучение сети. Каждая итерация алгоритма обратного распространения выполняется макросом, запускаемым сочетанием клавиш Ctrl+x. Макрос суммирует текущие значения коэффициентов w со значениями поправок, вычисленных на основе алгоритма, и запускает пересчет всей таблицы.
  9. Построить график изменения величин ошибок обучения E(t) и тестирования E(test) от числа итераций алгоритма. Фиксировать только каждое десятое значение (количество необходимых итераций измеряется сотнями).
  10. Остановить обучение после того, как величина ошибки перестанет изменяться в третьем знаке после запятой.
  11. Повторить п.п. 8–10 для коэффициента скорости обучения v=0,5; 0,9. Если при всех перечисленных значениях v процесс обучения будет расходящимся (ошибка не будет стабильно уменьшаться), попытаться резко уменьшить v после первых сотен итераций.
  12. Проанализировать полученные результаты, объяснить причины ошибок обучения и тестирования.

Варианты временных рядов

Таблица 3.3

y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11 y12 y13 y14 y15
1 2,56 4,20 1,60 4,29 1,17 4,40 0,88 4,14 0,07 4,77 1,95 4,18 0,04 5,05 1,40
2 0,20 5,14 0,47 4,37 1,22 4,29 1,89 4,51 0,32 5,80 1,37 5,77 0,88 4,86 1,94
3 1,92 4,01 1,48 5,45 1,56 5,42 1,28 4,34 1,51 5,49 1,32 4,00 0,49 4,19 1,53
4 0,13 5,97 0,57 4,02 0,31 5,55 0,15 4,54 0,65 4,34 1,54 4,70 0,58 5,83 0,03
5 2,16 3,19 1,85 4,84 0,55 4,20 1,68 4,74 0,14 5,68 0,48 5,03 0,18 5,99 0,09
6 2,54 5,28 0,78 5,72 0,58 4,65 0,91 5,80 1,76 5,67 1,73 5,70 1,03 5,00 1,79
7 1,69 3,38 1,40 5,56 1,86 5,62 0,46 5,51 0,26 5,13 1,18 5,98 1,36 5,09 1,29
8 1,19 5,61 0,89 6,00 1,04 5,98 0,03 6,00 1,83 4,23 0,60 4,15 0,13 5,01 1,87
9 0,87 4,12 0,93 4,62 1,51 5,76 0,50 5,48 0,95 4,03 0,92 5,15 1,66 5,01 0,40
10 2,82 3,48 0,60 4,76 1,51 5,51 1,48 5,19 0,48 5,22 0,21 4,19 0,07 4,63 0,49
11 2,64 4,66 1,87 4,05 1,73 5,31 1,67 5,96 0,13 5,64 1,52 4,07 0,22 4,79 0,73
12 2,65 5,60 1,21 5,48 0,73 4,08 1,88 5,31 0,78 4,36 1,71 5,62 0,43 4,21 1,21
13 2,37 4,85 1,97 4,17 1,39 4,66 1,26 4,40 0,46 5,54 1,34 5,80 1,61 5,97 1,95
14 1,88 4,52 1,91 5,66 1,23 5,50 1,14 5,29 1,60 4,31 0,06 5,33 0,07 4,62 0,69
15 0,78 4,95 1,19 4,08 0,80 4,25 0,22 4,63 1,48 4,97 0,53 5,50 1,28 5,79 0,44
16 0,58 3,38 0,91 5,80 0,91 5,01 1,17 4,67 0,60 4,81 0,53 4,75 1,01 5,04 1,07
17 0,51 4,82 0,43 4,71 1,92 5,86 1,24 4,69 0,72 5,26 0,90 4,55 1,46 5,21 1,50
18 0,07 3,58 0,44 5,33 0,56 5,24 1,99 4,38 0,89 4,53 1,82 4,13 1,88 5,97 1,18
19 1,44 4,60 1,22 5,90 1,34 4,31 1,02 4,35 0,82 4,18 1,60 4,86 1,45 4,97 1,00
20 2,57 4,35 1,27 5,46 1,30 4,92 1,31 4,14 1,97 5,67 0,92 4,76 1,72 4,44 1,49
21 0,79 3,84 0,92 4,50 0,96 5,51 1,14 5,32 0,39 4,99 1,36 5,81 1,90 4,79 1,41
22 0,99 4,72 1,59 5,29 1,53 5,58 0,84 5,79 0,21 5,94 0,42 5,98 1,18 5,55 0,11
23 2,92 3,56 0,15 5,11 1,38 4,44 1,61 4,11 1,97 4,50 1,37 5,08 1,76 5,19 1,58
24 0,48 4,30 0,91 4,85 0,53 4,51 1,95 5,88 0,63 5,79 0,92 5,18 1,88 4,84 0,22
25 1,88 4,98 0,06 5,26 1,16 5,06 0,58 5,28 1,41 5,57 1,19 5,36 1,40 4,30 0,09
26 2,57 5,77 0,38 4,73 0,10 5,93 1,35 4,70 1,62 5,51 1,78 5,66 1,47 5,52 1,88
27 0,11 4,87 1,52 4,47 0,34 5,44 1,20 5,21 1,48 5,93 0,62 5,48 1,34 4,25 0,65
28 1,07 3,17 1,08 5,99 1,28 4,11 0,25 5,82 0,96 4,83 1,10 4,31 0,81 5,49 1,92
29 1,59 5,74 0,48 5,28 1,34 5,91 0,77 5,25 1,37 4,42 0,26 4,21 1,90 4,08 1,40
30 0,68 5,78 0,25 5,58 1,31 4,28 1,57 5,75 0,41 5,55 0,90 5,86 0,03 5,57 0,30
31 1,05 3,29 0,44 5,82 1,39 4,16 0,29 5,67 0,38 5,04 1,84 4,58 0,43 4,24 0,95
32 1,63 4,40 1,77 4,06 1,81 5,40 0,04 5,76 1,32 4,84 0,94 5,78 1,13 5,58 1,23
33 2,08 3,03 1,75 5,87 0,39 4,28 1,93 4,20 1,23 4,39 1,76 5,86 0,12 5,03 0,56
34 0,77 3,47 1,64 5,18 1,35 5,95 0,57 5,50 1,08 5,42 1,14 4,01 0,62 4,15 1,10
35 2,67 5,22 0,41 4,95 1,31 4,11 0,29 5,44 1,00 5,58 1,81 4,09 0,60 5,04 1,22

2.2.1. Требования к отчету по лабораторной работе №3

  1. Титульный лист, содержание.
  2. Краткое описание задачи и метода ее решения.
  3. Распечатка таблицы и графика с наилучшим вариантом обученной сети.
  4. Распечатки кривых изменения ошибки для каждого значения коэффициента скорости обучения (можно на одном графике).
  5. Комментарии к полученным результатам.