Data Mining

         

Архитектура нейронных сетей


Нейронные сети могут быть синхронные и асинхронные.

В синхронных нейронных сетях в каждый момент времени свое состояние меняет лишь один нейрон.

В асинхронных - состояние меняется сразу у целой группы нейронов, как правило, у всего слоя [44].

Можно выделить две базовые архитектуры - слоистые и полносвязные сети [45, 46].

Ключевым в слоистых сетях является понятие слоя.

Слой - один или несколько нейронов, на входы которых подается один и тот же общий сигнал.

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

В слоистых сетях нейроны i-го слоя получают входные сигналы, преобразуют их и через точки ветвления передают нейронам (i+1) слоя. И так до k-го слоя, который выдает выходные сигналы для интерпретатора и пользователя. Число нейронов в каждом слое не связано с количеством нейронов в других слоях, может быть произвольным.

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

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

Слоистые сети, в свою очередь, могут быть однослойными и многослойными [46].

Однослойная сеть - сеть, состоящая из одного слоя.

Многослойная сеть - сеть, имеющая несколько слоев.

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

Входной слой сети реализует связь с входными данными, выходной - с выходными.

Таким образом, нейроны могут быть входными, выходными и скрытыми.

Входной слой организован из входных нейронов (input neuron), которые получают данные и распространяют их на входы нейронов скрытого слоя сети.

Скрытый нейрон (hidden neuron) - это нейрон, находящийся в скрытом слое нейронной сети.

Выходные нейроны (output neuron), из которых организован выходной слой сети, выдает результаты работы нейронной сети.

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



Элементы нейронных сетей


Искусственный нейрон (формальный нейрон) - элемент искусственных нейронных сетей, моделирующий некоторые функции биологического нейрона.

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

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

Общий вид искусственного нейрона приведен на рис. 11.1.


Рис. 11.1.  Искусственный нейрон

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

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

Каждый синапс характеризуется величиной синаптической связи (ее весом wi).

Текущее состояние нейрона определяется как взвешенная сумма его входов:


Выход нейрона есть функция его состояния:

y = f(s).

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

Часто используемые активационные функции:

Жесткая пороговая функция.Линейный порог.Сигмоидальная функция.

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

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

Точка ветвления (выход) - это элемент формального нейрона, посылающий его выходной сигнал по нескольким адресам и имеющий один вход и несколько выходов.

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



Модели нейронных сетей


Рассмотрим наиболее простые модели нейронных сетей: однослойный и многослойный персептрон.



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


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

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

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

Нейронные сети широко используются для решения разнообразных задач.

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

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

Модели нейронных сетей могут быть программного и аппаратного исполнения. Мы будем рассматривать сети первого типа.

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

Среди задач Data Mining, решаемых с помощью нейронных сетей, будем рассматривать такие:

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

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

Прогнозирование показателей деятельности фирмы (объемы продаж). На основе ретроспективной информации о деятельности организации возможно определение объемов продаж на будущие периоды.

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


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


Перед использованием нейронной сети ее необходимо обучить.

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

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

Эпоха - одна итерация в процессе обучения, включающая предъявление всех примеров из обучающего множества и, возможно, проверку качества обучения на контрольном множестве.

Процесс обучения осуществляется на обучающей выборке.

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

Таким образом, перед нами ставится вопрос - какие входные поля (признаки) нам необходимо использовать. Первоначально выбор осуществляется эвристически, далее количество входов может быть изменено.

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

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

Аналитик должен определить количество слоев в сети и количество нейронов в каждом слое.

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

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

Функция ошибок - это целевая функция, требующая минимизации в процессе управляемого обучения нейронной сети.


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

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

Переобучение нейронной сети

При обучении нейронных сетей часто возникает серьезная трудность, называемая проблемой переобучения (overfitting).

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

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

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

Один из вариантов борьбы с переобучением сети - деление обучающей выборки на два множества (обучающее и тестовое).

На обучающем множестве происходит обучение нейронной сети. На тестовом множестве осуществляется проверка построенной модели. Эти множества не должны пересекаться.

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

Описанный процесс проиллюстрирован на рис. 11.2.


Рис. 11.2.  Процесс обучений сети. Явление переобучения

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

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




Пакет Matlab


Пакет MATLAB (The MathWorks) также предоставляет пользователям возможность работы с нейронными сетями. Входящий в стандартную поставку MATLAB "Neural Network Toolbox" предоставляет широкие возможности для работы с нейронными сетями всех типов.

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

Рассмотрим пример конструирования нейронной сети в пакете Matlab.

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

Сформируем такую сеть, которая включает 15 нейронов во входом слое (по количеству входных переменных), 8 нейронов во втором слое и 1 нейрон в выходном слое (по количеству выходных переменных).

Для каждого слоя выберем передаточную функцию: первый слой - logsig, второй - logsig, третий - purelin.

В среде Matlab синтаксис такой нейронной сети выглядит следующим образом:

Net=netff(PR, [S1,S2, : , Sn],{TF1,TF2, : , TFn},btf, blf, pf),

где PR - массив минимальных и максимальных значений для R векторов входа;

Si - количество нейронов в i-м слое;

TFi - функция активации слоя i;

btf - обучающая функция, реализующая метод обратного распространения;

blf - функция настройки, реализующая метод обратного распространения;

pf - критерий качества обучения.

Активационной функцией может выступать любая дифференцируемая функция, например, tansig, logsig, purelin.

Net=netff(minmax (P), [n,m, l],{ logsig, logsig, purelin },trainpr),

где P - множество входных векторов;

n - количество входов НС;

m - количество нейронов в скрытом слое;

l - количество выходов НС.

Необходимо также установить метод расчета значения ошибки. Например, если выбран метод наименьших квадратов, то эта функция будет выглядеть так: Net.performFcn='SSE'.

Для установления максимального количества эпох равным 10000 воспользуемся функцией: net.trainParam.epochs=10000.

Запустить процесс обучения можно таким образом:

[net,tr]=train(net,P,T);

После окончания обучения сети ее можно сохранить в файле, например, с именем nn1.mat.

Для этого необходимо выполнить команду:

save nn1 net;

Таким образом, в пакете возможно конструирование сети любой сложности и нет необходимости привязываться к ограничениям, накладываемым нейросимуляторами. Однако для работы с нейронными сетями в пакете Matlab необходимо изучить как саму среду, так и большинство функций Neural Network Toolbox. Для более детального изучения конструирования нейронных сетей в Neural Network Toolbox можно порекомендовать [49, 50].



Персептрон


Большое количество моделей персептрона рассмотрено в основополагающей работе Розенблатта [47]. Простейшая модель нейронной сети - однослойный персептрон.

Однослойный персептрон (персептрон Розенблатта) - однослойная нейронная сеть, все нейроны которой имеют жесткую пороговую функцию активации.

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

Классический пример такой нейронной сети - однослойный трехнейронный персептрон - представлен на рис. 11.3.


Рис. 11.3.  Однослойный трехнейронный персептрон

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

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

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

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

Пример двухслойного персептрона представлен на рис. 11.4.


Рис. 11.4.  Двухслойный перцептрон

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

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

Другие модели нейронных сетей будут рассмотрены в следующей лекции.



решения задачи


Рассмотрим решение задачи "Выдавать ли кредит клиенту" в аналитическом пакете Deductor (BaseGroup).

В качестве обучающего набора данных выступает база данных, содержащая информацию о клиентах, в частности: Сумма кредита, Срок кредита, Цель кредитования, Возраст, Пол, Образование, Частная собственность, Квартира, Площадь квартиры. На основе этих данных необходимо построить модель, которая сможет дать ответ, входит ли Клиент, желающий получить кредит, в группу риска невозврата кредита, т.е. пользователь должен получить ответ на вопрос "Выдавать ли кредит?". Задача относится к группе задач классификации, т.е. обучения с учителем.

Данные для анализа находятся в файле credit.txt. Импортируем данные из файла при помощи мастера импорта. Запускаем мастер обработки


и выбираем метод обработки данных - нейронная сеть. Задаем назначения исходных столбцов данных. Выходной столбец в нашей задаче - "Давать кредит", все остальные - входные. Этот шаг проиллюстрирован на рис. 11.5.


Рис. 11.5.  Шаг "Настройка назначений столбцов"

На следующем шаге мастер предлагает разбить исходное множество данных на обучающее и тестовое. Способ разбиения исходного множества данных по умолчанию задан "Случайно". Этот шаг представлен на рис. 11.6.


Рис. 11.6.  Шаг "Разбиение исходного набора данных на подмножества"

На следующем шаге необходимо определить структуру нейронной сети, т.е. указать количество нейронов в входом слое - 33 (количество входных переменных), в скрытом слое - 1, в выходном слое - 1 (количество выходных переменных). Активационная функция - Сигмоида, и ее крутизна равна единице. Этот шаг проиллюстрирован на рис. 11.7.


Рис. 11.7.  Шаг "Структура нейронной сети"

Далее выбираем алгоритм и параметры обучения нейронной сети. Этот шаг имеет название "Настройка процесса обучения нейронной сети", он представлен на рис. 11.8.


Рис. 11.8.  Шаг "Настройка процесса обучения нейронной сети"


На следующем шаге настраиваем условия остановки обучения. Будем считать пример распознанным, если ошибка меньше 0,005, и укажем условие остановки обучения при достижении эпохи 10000.
На следующем шаге запускаем процесс обучения и наблюдаем за изменением величины ошибки и процентом распознанных примеров в обучающем и тестовом множествах. В нашем случае мы видим, что на эпохе № 4536 в обучающем множестве распознано 83,10% примеров, а на тестовом - 85,71% примеров. Фрагмент этого процесса проиллюстрирован на рис. 11.9.

Рис. 11.9.  Шаг "Обучение нейронной сети"
После окончания процесса обучения для интерпретации полученных результатов мы имеем возможность выбрать визуализаторы из списка предложенных. Выберем такие: таблица сопряженности, граф нейросети, анализ "что, если", и при помощи них проанализируем полученные данные [48].
На рис. 11.10 показана таблица сопряженности. По ее диагонали расположены примеры, которые были правильно распознаны, т.е. 55 клиентов, которым можно выдавать кредит, и 89 клиентов, которым выдавать кредит не стоит. В остальных ячейках расположены те клиенты, которые были отнесены к другому классу (1 и 4). Можно считать, что правильно классифицированы практически все примеры - 96,64%.

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

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


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

Большинство нейропакетов включают следующую последовательность действий:

Создание сети (выбор пользователем параметров либо одобрение установленных по умолчанию).Обучение сети.Выдача пользователю решения.

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

Среди специализированных нейропакетов можно назвать такие: BrainMaker, NeuroOffice, NeuroPro, и др.

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