Neuroproject.ru / Обучение / Учебник - Нейронные сети
   Главная / Обучение / Учебник - Нейронные сети


 
О компании
Програмные продукты
Услуги
Обучение
Материалы
Форум
     Учебник       Книги       Java-апплеты       Статьи       Ссылки       Загрузить материалы   
Учебник
Нейронные сети




АНАЛИТИЧЕСКИЕ ТЕХНОЛОГИИ
для прогнозирования и анализа данных
Copyright © 1999-2005 НейроПроект

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



   Оглавление
   Зачем нужны аналитические технологии
   Нейронные сети
   Генетические алгоритмы
   Методы прогнозирования
   Программные реализации
   Решения практических задач

Нейронные сети

1. Как работает биологическая нейронная сеть

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


Нейронные сети - биологический нейрон

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

Нетрудно построить математическую модель описанного процесса.

Нейронные сети - математический нейрон

На рисунке изображена модель нейрона с тремя входами (дендритами), причем синапсы этих дендритов имеют веса w1, w2, w3. Пусть к синапсам поступают импульсы силы x1, x2, x3 соответственно, тогда после прохождения синапсов и дендритов к нейрону поступают импульсы w1x1, w2x2, w3x3. Нейрон преобразует полученный суммарный импульс x=w1x1+ w2x2+ w3x3 в соответствии с некоторой передаточной функцией f(x). Сила выходного импульса равна y=f(x)=f(w1x1+ w2x2+ w3x3).
Таким образом, нейрон полностью описывается своими весами wk и передаточной функцией f(x). Получив набор чисел (вектор) xk в качестве входов, нейрон выдает некоторое число y на выходе.


2. Что такое искусственная нейронная сеть

Как работает нейронная сеть

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

Задача распознавания рукописных букв

Дано: растровое черно-белое изображение буквы размером 30x30 пикселов
Надо: определить, какая это буква (в алфавите 33 буквы)

Формулировка для нейронной сети:

Дано: входной вектор из 900 двоичных символов (900=30x30)
Надо: построить нейронную сеть с 900 входами и 33 выходами, которые помечены буквами. Если на входе нейронной сети изображение буквы "А", то максимальное значение выходного сигнала достигается на выходе "А". Аналогично нейронная сеть работает для всех 33 букв.

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

Как постороить нейронную сеть

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

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

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


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

Обучение нейронных сетей

    Обучить нейронную сеть - значит, сообщить ей, чего мы от нее добиваемся. Этот процесс очень похож на обучение ребенка алфавиту. Показав ребенку изображение буквы "А", мы спрашиваем его: "Какая это буква?" Если ответ неверен, мы сообщаем ребенку тот ответ, который мы хотели бы от него получить: "Это буква А". Ребенок запоминает этот пример вместе с верным ответом, то есть в его памяти происходят некоторые изменения в нужном направлении. Мы будем повторять процесс предъявления букв снова и снова до тех пор, когда все 33 буквы будут твердо запомнены. Такой процесс называют "обучение с учителем".

Нейронные сети - тренировка нейронной сети

При обучении нейронной сети мы действуем совершенно аналогично. У нас имеется некоторая база данных, содержащая примеры (набор рукописных изображений букв). Предъявляя изображение буквы "А" на вход нейронной сети, мы получаем от нее некоторый ответ, не обязательно верный. Нам известен и верный (желаемый) ответ - в данном случае нам хотелось бы, чтобы на выходе нейронной сети с меткой "А" уровень сигнала был максимален. Обычно в качестве желаемого выхода в задаче классификации берут набор (1, 0, 0, ...), где 1 стоит на выходе с меткой "А", а 0 - на всех остальных выходах. Вычисляя разность между желаемым ответом и реальным ответом сети, мы получаем 33 числа - вектор ошибки. Алгоритм обратного распространения ошибки - это набор формул, который позволяет по вектору ошибки вычислить требуемые поправки для весов нейронной сети. Одну и ту же букву (а также различные изображения одной и той же буквы) мы можем предъявлять нейронной сети много раз. В этом смысле обучение скорее напоминает повторение упражнений в спорте - тренировку.

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


Применение нейронной сети

Нейронные сети - применение нейронной сети

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

Примеры готовых нейронных сетей

Описанные выше процессы обучения и применения нейронных сетей можно увидеть в действии прямо сейчас. Фирмой Ward Systems Group подготовлено несколько простых программ, которые написаны на основе библиотеки NeuroWindows. Каждая из программ позволяет пользователю самостоятельно задать набор примеров и обучить на этом наборе определенную нейронную сеть. Затем можно предлагать этой нейронной сети новые примеры и наблюдать ее работу.



3. Области применения нейронных сетей

Нейросетевая классификация

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

Нейронные сети - классификация здоров/болен


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


Нейронные сети - классификация перспективное/убыточное предприятие

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


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

Кластеризация с помощью нейронных сетей и поиск зависимостей

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


Нейронные сети - полином

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

Нейронные сети - кластеры


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

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

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

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


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

  1. Скопировать столбец данных значений котировок в 4 соседних столбца.
  2. Сдвинуть второй столбец на 1 ячейку вверх, третий столбец - на 2 ячейки вверх и т.д.

Нейронные сети - подготовка данных

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

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



   Оглавление
   Зачем нужны аналитические технологии
   Нейронные сети
   Генетические алгоритмы
   Методы прогнозирования
   Программные реализации
   Решения практических задач


   Учебник       Книги       Java-апплеты       Статьи       Ссылки       Загрузить материалы   


Rambler's Top100 Rambler's Top100