Автоматизированные нейронные сети

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

Если вы хотите продвинуться в исследовании задач классификации, прогнозирова­ния или построения сложных нелинейных зависимостей, вам стоит испытать нейронные сети. Мы далеки от мысли создавать культ нейронных сетей - мы предлагаем рассматривать их как полезный инструмент анализа.

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

Откроем модуль Автоматизированные Нейронные Сети (Automated Neural Networks).

Как у любого инструмента, у нейронных сетей есть свои ограничения. Например, было бы неразумно применять нейронные сети для классификации такого ясного экспе­риментального материала, как цветы ириса Фишера, хотя полезно использовать файл Irisdat.sta  для проверки работы сети; или использовать нейронные сети для проверки гипотезы о виде распределения, где существуют точные математические ре­зультаты. Однако вполне разумно использовать сети для того, чтобы разобрать «гору» или, лучше сказать, разгрести завал данных, имеющихся у исследователя.

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

  1. Основные парадигмы нейронных сетей

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

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

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

Итак, запомним:

• Нейрон получает сигналы через несколько входных каналов. Каждый сигнал прохо­дит через соединение - синапс, имеющее определенную интенсивность (или вес); этот вес соответствует синаптической активности нейрона.

Обозначим через Wj вес i-ro синапса, 1 < i < N. Тогда текущее состояние нейро­на определяется как взвешенная сумма входных сигналов, формально:

где суммирование распространяется по всем синапсам 1 < i < N.

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

Обозначим через Y выходной сигнал нейрона. Тогда выход нейрона есть функция его состояния:

Y=f(s).

Функция активации или передаточная функция f, - некоторая нелинейная функция. Самый простой пример функции активации - индикаторная, или функция единичного скачка: f(x) = а, если х < Т; f(x) = b, если х > Т, где а, b - константы (например, а = +1, b = -1).

Если текущее состояние нейрона меньше определенного порогового значения Т, то его выход равен 0 - возникает состояние торможения.

Если текущее состояние нейрона больше порогового значения Т, то выход равен 1 - состояние возбуждения.

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

Заметьте, мы употребили слово текущее состояние нейрона, поэтому формально в при­веденных формулах нам следует учесть зависимость от дискретного времени t = 1, 2, 3… Но в упрощенном случае зависимость от t опускается. Очевидно, что эта модель очень про­ста и не в состоянии воспроизвести структуру мозга, однако, в некоторых ситуациях она имеет ценность.

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

  1. Математические модели

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

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

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

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

Рис. 8.2. Сеть с прямой передачей сигнала

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

Для большинства приложений предпочтительны сети с полной системой связи, ко­торые реализованы в модуле Автоматизированные Нейронные Сети.

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

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

  1. Обучение и кросс-проверка

Самое замечательное, что нейронную сеть действительно можно обучить.

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

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

Формально процедура обучения состоит в том, чтобы, меняя веса w(i,j), где (i, j) обозначает i-й нейрон в j-м слое сети и значение порога Т (см. разд. 8.1), добиться за­данного результата работы сети.

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

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

На обучающей выборке проводится обучение сети - оценка параметров сети. Есте­ственно, большая часть данных участвует в обучении сети.

Контрольная выборка контролирует процесс обучения, на тестовой выборке про­водится оценка точности результатов (кросс-проверка).

Рассмотрим процедуру обучения на примере простой и ясной модели Розенблатта однослойного персептрона (лат. perceptio - восприятие). Конечно, здесь будут описан лишь один из возможных алгоритмов обучения.

  1. Модель Розентблатта

В этой модели число слоев равно 1, поэтому мы исключаем второй индекс нумера­ции слоев и рассматриваем только веса w(i), 1 < i < N. Входной сигнал может принадле­жать либо классу А, либо класса Б.

На вход сети подается сигнал (х1? х2,… xN). Предположим, для простоты, N = 2.

Обучение однослойного персептрона

Шаг 0. Начальные установки задаются случайным об­разом. Введем шаг обучения t: t=0.

Шаг 1. Примем t=t+l. Предъявим сети входной сигнал: (х1(t). x2(t)). Пусть d(t)=l, если входной сигнал принадлежит классу A; d(t)=-l, если входной сигнал принадлежит классу Б.

Шаг 2. Вычислим состояние нейрона в момент времен t:

Шаг 3. Вычислим выходной сигнал нейрона y(t) в момент t: y(t)=sign(s(t)).

Шаг 4. Вычислим новые веса по формулам:

Wj(t) = Wj(t -1) + r(y(t) -d(t)), w2(t) = w2(t-1) +r(y(t)-d(t)),

где r - шаг обучения.

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

Обученный однослойный персептрон способен решать очень простые задачи клас­сификации.

Обучение многослойного персептрона

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

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

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

  1. Пошаговый пример: прогнозирование временных

рядов с помощью нейронных сетей

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

Целью исследования является про­гноз значения переменной в следую­щий момент времени по ее значениям в предшествующие моменты.

Мы будем работать с классически­ми данными, исследованными Боксом и Дженкинсом [16], и применим к ним технологии нейронных сетей.

Шаг 1. Откроем файл данных Se- ries G.sta из папки Examples. Данные содержат значения месячных авиапере­возок пассажиров в США (рис. 8.3).

Шаг 2. Проведем визуализацию данных. Нажмем правой кнопкой мы­ши по переменной SERIES G и выбе­рем в выпадающем меню построение Линейного графика по столбцам.

Рис. 8.3. Файл данных Series G.sta

В результате в системе STATISTICA построится график временного ряда (рис. 8.4). С помощью графика ряда легко определить, что мы имеем дело с рядом, который обла­дает возрастающим трендом, сезонной изменчивостью.

Шаг 3. Спектральный анализ ряда - из временной области перейдем в частотную. Это позволит найти периодичности в данных.

Рис. 8.4. График исходного временного ряда

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

Рис. 8.5. Стартовое окно модуля Анализ временных рядов

Далее нажмем кнопку Фурье (спектральный) анализ. Для нахождения периода в наших данных построим периодограмму (рис. 8.6).

1 Спектр, анализ: SERIES G: Monthly passenger totals (in 1000’s)

Спектр, анализ: SERIES_G: Monthly passenger totals (in 1000’s)

Число набл.: 144

Рис. 8.6. Периодограмма

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

Шаг 4. Проведем анализ с помощью Автоматизированных Нейронных сетей STATISTICA (SANN).

Запустим модуль Автоматизированные Нейронные сети. На экране появится стартовое окно (рис. 8.7).

Рис. 8.7. Стартовое окно модуля Нейронных сетей

Файл данных Series G.sta ранее открыт нами. Если вы работаете с новым файлом, нажмите кнопку Данные в правой части окна.

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

Также можно загрузить и использовать в анализе сети, построенные ранее.

Выберем тип анализа Временные ряды (регрессия), чтобы построить прогноз, и нажмем кнопку ОК. На экране появится окно Отбор данных (рис. 8.8). В этом окне имеется несколько вкладок, выберем вкладку Быстрый. Далее выберем переменные для анализа из открытого файла данных.

Рис. 8.8. Окно отбора данных для анализа

Шаг 5. Выбор переменных. Нажмем кнопку Переменные на вкладке Быстрый.

На экране появится окно выбора переменных. Переменные могут быть непрерыв­ными и категориальными (рис. 8.9). Переменная SERIES G является непрерывной целе­вой переменной, которую мы хотим прогнозировать.

Шаг 6. Создание обучающих, контрольных и тестовых выборок В задачах ана­лиза временных рядов особенное внимание следует уделить выбору обучающих, кон­трольных и тестовых подмножеств. В обычной ситуации каждое наблюдение рассматри­вается независимо, и никаких вопросов с выбором множеств не возникает. Во времен­ных рядах наблюдения не являются независимыми, значение ряда в момент времени t, зависит от значения в моменты времени t-1, t-2 и т. д.

Рис. 8.9. Выбор переменных для анализа

В нашем примере выставим настройки: наблюдений на обучающую выборку -

85 %. на контрольную - 15 % и 0 % - на тестовую (рис. 8.10).

Рис. 8.10. Определение подвыборок для обучения сети

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

Далее переходим к вкладке Временные ряды (рис. 8.11).

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

Рис. 8.11. Вкладка Временные ряды окна отбора данных

Шаг 7. Выбор архитектуры сетей. Нажмем кнопку ОК и перейдем к окну Авто­матизированные Нейронные Сети (рис. 8.12). В этом окне имеется несколько вкладок, позволяющих выбрать тип обучаемых сетей, функции активации и др.

Выберем вкладку Быстрый. Здесь можно выбрать тип сети, например, многослой­ные персептроны (МЛП) или радиальные базисные функции (РБФ), указать количество скрытых нейронов (минимальное и максимальное значение), количество сетей для обу­чения и сохранения, выбрать функцию ошибки.

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

Количество обучаемых сетей возьмем 50, сохраняемых - 5.

Рис. 8.12. Окно настроек параметров сети - вкладка Быстрый

Откроем далее вкладку Функции активации (рис. 8.13). В этой вкладке можно вы­брать различные функции активации для скрытых и выходных нейронов многослойных персептронов. Выберем, например, тождественные функции активации, хотя можно экс­периментировать и с другими функциями.

Рис. 8.13. Окно настроек параметров сети - вкладка Функции активации для МЛП

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

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

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

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

В окне Нейронные сети - Результаты откроем вкладку Временные ряды (рис. 8.14).

Рис. 8.14. Окно результатов анализа, вкладка Временные ряды

Используя опции этой вкладки, можно построить графики временного ряда, отобра­зить результаты в таблице, а также построить проекции. Для построения проекции необ­ходимо выбрать всего два параметра - Длина проекции и Начать с наблюдения. По­строим проекцию длиной 180, начиная с 12 шага. Для этого в окне результатов выставь­те Длину проекции равной 180, а в поле Начать с наблюдения введите значение 12. Затем нажмем кнопку График проекции.

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

Puc. 8.15. График исходных и предсказанных значений

Как видно из графика, полученные модели хорошо ложатся на исходный ряд. Мож­но построить график прогноза на последний год (рис. 8.16).

Рис. 8.16. График временного ряда

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

Из таблицы видно, что средняя относительная ошибка - четвертая строка таблицы - составляет 3-4 %. Наилучший результат дает третья сеть: MLP 12-10-1 - многослойный персептрон, состоящий из 10 скрытых нейронов, имеющих тождественные функции ак­тивации.

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

Все полученные сети медленно вырождаются - их можно использовать для по­строения прогноза на несколько месяцев вперед.