Автоматизированные нейронные сети
Идея нейронных сетей (гр. neuron - нерв) родилась в результате попыток воспроизвести способность человеческого мозга обучаться и исправлять ошибки. Если классические методы анализа не работают или точность результатов не удовлетворяет исследователя, встает задача выбора нового инструмента. Таким инструментом могут служить нейронные сети. В последние годы интерес к нейронным сетям существенно возрос.
Если вы хотите продвинуться в исследовании задач классификации, прогнозирования или построения сложных нелинейных зависимостей, вам стоит испытать нейронные сети. Мы далеки от мысли создавать культ нейронных сетей - мы предлагаем рассматривать их как полезный инструмент анализа.
STATISTICA предоставляет нейронные сети в ваше распоряжение - испытайте их возможности. Вначале попробуйте применить нейронные сети к простым задачам с известным ответом, затем используйте для решения практических задача. Модуль Нейронные Сети STATISTICA предлагает вам гибкий инструментарий для построений нейронных сетей.
Откроем модуль Автоматизированные Нейронные Сети (Automated Neural Networks).
Как у любого инструмента, у нейронных сетей есть свои ограничения. Например, было бы неразумно применять нейронные сети для классификации такого ясного экспериментального материала, как цветы ириса Фишера, хотя полезно использовать файл Irisdat.sta для проверки работы сети; или использовать нейронные сети для проверки гипотезы о виде распределения, где существуют точные математические результаты. Однако вполне разумно использовать сети для того, чтобы разобрать «гору» или, лучше сказать, разгрести завал данных, имеющихся у исследователя.
Действительно, анализируя геологические данные, полученные в результате полевых исследований, или данные о продажах в супермаркетах с тысячей сортов разнородной продукции, вы находитесь в принципиально иной ситуации, чем в случае классификации объектов, которые описываются лишь небольшим количеством признаков. Само построение правдоподобных гипотез в подобных задачах представляет собой достаточно сложную задачу. Особенно полезны нейронные сети на этапе разведочного анализа данных, когда связи между данными не очевидны и имеется небольшое число гипотез о связях между ними. Нейронные сети помогают понять структуру исходных данных, сформулировать разумные гипотезы, которые затем могут быть проверены точными методами.
- Основные парадигмы нейронных сетей
Вначале нам нужно понять идею нейронных сетей, а затем опишем диалог в 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 г., чтобы построить однослойный персептрон, способный распознавать простейшие образы: отнести подаваемый сигнал к одному из двух классов. Понятно, что Розенблатт хотел смоделировать процесс дрессировки животных. И это ему удалось. Конструкция замечательна своей простотой и ясностью - мы к ней вернемся ниже.
- Математические модели
Итак, мы получили преставление о том, что такое нейрон. Перейдем к пониманию сети нейронов. Соединенные друг с другом нейроны образуют сеть. Если сеть предполагается для чего-либо использовать (например, с целью классификации), то у нее должны быть входы (принимающие значения интересующих нас переменных из внешнего мира) и выходы (прогнозы или управляющие сигналы).
Входы и выходы соответствуют сенсорным и двигательным нервам, например, соответственно идущим от глаз и к рукам. Но, кроме этого, в сети может быть еще много промежуточных (скрытых) нейронов, выполняющих внутренние функции. Входные, скрытые и выходные нейроны связаны между собой.
Простейшая сеть имеет структуру прямой передачи сигнала: сигналы проходят от входов через скрытые элементы и в конце концов поступают на выходные элементы (рис. 8.2).
Каждый элемент сети (нейрон) описывается своим собственным набором параметров. Входной слой служит исключительно для ввода значений входных переменных. Каждый из скрытых и выходных нейронов соединен со всеми элементами предыдущего слоя. Если сеть рекуррентная (содержит связи от более дальних к более ближним нейронам, сигнал передается не только слева направо, но и справа налево), то она может быть неустойчивой и иметь очень сложную динамику поведения.
.png)
Рис. 8.2. Сеть с прямой передачей сигнала
Можно было бы рассматривать сети, в которых нейроны данного слоя связаны лишь с некоторыми нейронами предыдущего слоя.
Для большинства приложений предпочтительны сети с полной системой связи, которые реализованы в модуле Автоматизированные Нейронные Сети.
При работе сети на входные элементы подаются значения входных переменных, затем возбуждаются нейроны промежуточных слоев, и далее сигнал поступает на выходной слой. Каждый из них вычисляет свое значение активации - вычитая из взвешенной суммы выходов элементов предыдущего слоя пороговое значение. Затем значение активации преобразуется с помощью функции активации, и в результате получается выход нейрона.
После того как сеть отработает, выходные значения элементов выходного слоя принимаются за выход сети в целом. Таким образом нейронная сеть преобразует входные сигналы в выходные.
- Обучение и кросс-проверка
Самое замечательное, что нейронную сеть действительно можно обучить.
На философский вопрос: почему? имеется философский ответ: сеть моделирует работу мозга, а живые существа имеют способность обучаться, поэтому адекватная модель мозга или клеток мозга должна обладать тем же свойством.
Основной постулат обучения состоит в следующем: обучение заключается в изменениях силы синапсических связей и порога Т - варьируя эти связи, можно моделировать процесс обучения.
Формально процедура обучения состоит в том, чтобы, меняя веса w(i,j), где (i, j) обозначает i-й нейрон в j-м слое сети и значение порога Т (см. разд. 8.1), добиться заданного результата работы сети.
После того как удается достичь результата на обучающей выборке, сеть может быть применена к реальным данным.
Ключевым моментом анализа является разделение исходных данных на обучающую, контрольную и тестовую выборку.
На обучающей выборке проводится обучение сети - оценка параметров сети. Естественно, большая часть данных участвует в обучении сети.
Контрольная выборка контролирует процесс обучения, на тестовой выборке проводится оценка точности результатов (кросс-проверка).
Рассмотрим процедуру обучения на примере простой и ясной модели Розенблатта однослойного персептрона (лат. perceptio - восприятие). Конечно, здесь будут описан лишь один из возможных алгоритмов обучения.
- Модель Розентблатта
В этой модели число слоев равно 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. В противном случае обучение заканчивается.
Обученный однослойный персептрон способен решать очень простые задачи классификации.
Обучение многослойного персептрона
Обучение однослойного персептрона, естественно, приводит к многослойным персептронам. Обучение может вестись как с учителем, так и без него. При обучении с учителем обучающий набор представляет собой ряд наблюдений, для которых указаны значения входных и выходных переменных. Учитель проверяет результат и подтверждает правильность ответа. Это облегчает обучение.
Отталкиваясь от случайной начальной конфигурации весов порогов (случайно взятой точки на поверхности ошибок), алгоритм обучения постепенно отыскивает минимум.
Конечно, вы понимаете отличие глобального минимума от локального: локальный минимум - это минимум для некоторой окрестности точки из области определения функции, но не для всей области. Найдя локальный минимум, вы вовсе не можете быть уверены в том, что этот минимум глобальный. Другие точки могут иметь меньшее значение. Вообще локальный минимум может значительно отличатся от глобального. Лучше всего это можно понять, представив себе географическую карту и рассмотрев точки суши, лежащие ниже уровня моря. Очевидно,
- Пошаговый пример: прогнозирование временных
рядов с помощью нейронных сетей
Рассмотрим пример анализа временных рядов, где значения переменных изменяются в различные моменты времени и где присутствуют (или, по меньшей мере, ожидаются) зависимости между последовательными значениями одной и той же переменной.
Целью исследования является прогноз значения переменной в следующий момент времени по ее значениям в предшествующие моменты.
Мы будем работать с классическими данными, исследованными Боксом и Дженкинсом [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. Стартовое окно модуля Анализ временных рядов
.jpg)
.jpg)
Далее нажмем кнопку Фурье (спектральный) анализ. Для нахождения периода в наших данных построим периодограмму (рис. 8.6).
1 Спектр, анализ: SERIES G: Monthly passenger totals (in 1000’s)
Спектр, анализ: SERIES_G: Monthly passenger totals (in 1000’s)
Число набл.: 144
.jpg)
Рис. 8.6. Периодограмма
Исследуя построенный график, замечаем, что периодограмма имеет ярко выраженный пик, что свидетельствует о наличии сезонности в данных. Наибольшее значение периодограммы соответствует периоду 12. Данные имеют годовую периодичность.
Шаг 4. Проведем анализ с помощью Автоматизированных Нейронных сетей STATISTICA (SANN).
Запустим модуль Автоматизированные Нейронные сети. На экране появится стартовое окно (рис. 8.7).
.jpg)
Рис. 8.7. Стартовое окно модуля Нейронных сетей
Файл данных Series G.sta ранее открыт нами. Если вы работаете с новым файлом, нажмите кнопку Данные в правой части окна.
В стартовом окне модуля Нейронные сети можно выбрать различные виды анализа: регрессию, классификацию, прогнозирование временных рядов, кластерный анализ.
Также можно загрузить и использовать в анализе сети, построенные ранее.
Выберем тип анализа Временные ряды (регрессия), чтобы построить прогноз, и нажмем кнопку ОК. На экране появится окно Отбор данных (рис. 8.8). В этом окне имеется несколько вкладок, выберем вкладку Быстрый. Далее выберем переменные для анализа из открытого файла данных.
.jpg)
Рис. 8.8. Окно отбора данных для анализа
Шаг 5. Выбор переменных. Нажмем кнопку Переменные на вкладке Быстрый.
На экране появится окно выбора переменных. Переменные могут быть непрерывными и категориальными (рис. 8.9). Переменная SERIES G является непрерывной целевой переменной, которую мы хотим прогнозировать.
Шаг 6. Создание обучающих, контрольных и тестовых выборок В задачах анализа временных рядов особенное внимание следует уделить выбору обучающих, контрольных и тестовых подмножеств. В обычной ситуации каждое наблюдение рассматривается независимо, и никаких вопросов с выбором множеств не возникает. Во временных рядах наблюдения не являются независимыми, значение ряда в момент времени t, зависит от значения в моменты времени t-1, t-2 и т. д.
Рис. 8.9. Выбор переменных для анализа
В нашем примере выставим настройки: наблюдений на обучающую выборку -
85 %. на контрольную - 15 % и 0 % - на тестовую (рис. 8.10).
Рис. 8.10. Определение подвыборок для обучения сети
.jpg)
.jpg)
Чем сложнее проектируемая модель, тем больше данных необходимо для корректного обучения нейронной сети.
Далее переходим к вкладке Временные ряды (рис. 8.11).
В задаче прогнозирования необходимо указать размер окна, который определяет количество входов нейронной сети. Нейронная сеть должна знать, как далеко вперед должен строиться прогноз, иными словами, нужно указать горизонт прогноза. Данные имеют годовую периодичность, поэтому в качестве размера окна выберем значение 12.
.jpg)
Рис. 8.11. Вкладка Временные ряды окна отбора данных
Шаг 7. Выбор архитектуры сетей. Нажмем кнопку ОК и перейдем к окну Автоматизированные Нейронные Сети (рис. 8.12). В этом окне имеется несколько вкладок, позволяющих выбрать тип обучаемых сетей, функции активации и др.
Выберем вкладку Быстрый. Здесь можно выбрать тип сети, например, многослойные персептроны (МЛП) или радиальные базисные функции (РБФ), указать количество скрытых нейронов (минимальное и максимальное значение), количество сетей для обучения и сохранения, выбрать функцию ошибки.
J В задачах прогнозирования обычно используют многослойные персептроны.
Количество обучаемых сетей возьмем 50, сохраняемых - 5.
.jpg)
Рис. 8.12. Окно настроек параметров сети - вкладка Быстрый
Откроем далее вкладку Функции активации (рис. 8.13). В этой вкладке можно выбрать различные функции активации для скрытых и выходных нейронов многослойных персептронов. Выберем, например, тождественные функции активации, хотя можно экспериментировать и с другими функциями.
.jpg)
Рис. 8.13. Окно настроек параметров сети - вкладка Функции активации для МЛП
Модуль нейронных сетей STATISTICA позволяет реализовать гибкий творческий подход к анализу данных с помощью нейронных сетей.
Шаг 8. Обучение сети. Итак, структура сети определена - это многослойный персептрон, тождественные функции активации, число нейронов от 1 до 12. Нажмем кнопку Обучить и перейдем к процессу обучения, после окончания процесса обучения моделей на экране появится окно Нейронные сети - Результаты. В верхней части окна показаны лучшие сети и показатели качества моделей, в нижней находятся вкладки, позволяющие всесторонне проанализировать результаты.
Шаг 9. Анализ результатов и построение прогноза. Программа проанализировала 50 различных сетей - многослойных персептронов, - и отобрала 5 наилучших нейронных сетей, отображенных в верхней части окна. В окне указана архитектура сети, производительность, алгоритм обучения, функция ошибок и другие характеристики. Построенные сети можно использовать для прогноза, именно в этом заключалась наша цель.
С помощью обученной сети можно выполнить так называемую проекцию временного ряда. При этом вначале сеть отрабатывает на первых 12 входных значениях ряда и строит прогноз следующего значения. Это спрогнозированное значение вместе с одиннадцатью предыдущими входными значениями подается на вход сети, и снова строится прогноз очередного значения. Такую проекцию можно повторять любое число раз, хотя очевидно, чем больше количество итераций будет использовано, тем хуже получится качество прогноза.
В окне Нейронные сети - Результаты откроем вкладку Временные ряды (рис. 8.14).
.jpg)
Рис. 8.14. Окно результатов анализа, вкладка Временные ряды
Используя опции этой вкладки, можно построить графики временного ряда, отобразить результаты в таблице, а также построить проекции. Для построения проекции необходимо выбрать всего два параметра - Длина проекции и Начать с наблюдения. Построим проекцию длиной 180, начиная с 12 шага. Для этого в окне результатов выставьте Длину проекции равной 180, а в поле Начать с наблюдения введите значение 12. Затем нажмем кнопку График проекции.
На экране появится график временного ряда и предсказанные временные ряды, наложенные друг на друга во времени (рис. 8.15). В каждый момент отмечается соответствующее целевое значение и предсказанные значения. Заметьте, строятся проекции для лучших сетей.
Puc. 8.15. График исходных и предсказанных значений
Как видно из графика, полученные модели хорошо ложатся на исходный ряд. Можно построить график прогноза на последний год (рис. 8.16).
.jpg)
.jpg)
Рис. 8.16. График временного ряда
Графики прогнозированных значений близки к истинным значениям. Ошибки, полученные на кросс-проверке приведены в таблице.
Из таблицы видно, что средняя относительная ошибка - четвертая строка таблицы - составляет 3-4 %. Наилучший результат дает третья сеть: MLP 12-10-1 - многослойный персептрон, состоящий из 10 скрытых нейронов, имеющих тождественные функции активации.
Результаты всех лучших построенных сетей довольно близки и мало зависит от числа скрытых нейронов: существенным оказалось, что функции активации тождественны. При других функциях активации результаты получаются существенно хуже.
Все полученные сети медленно вырождаются - их можно использовать для построения прогноза на несколько месяцев вперед.
.png)