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

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

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

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

Искусственная нейронная сеть (ИНС) может рассматриваться как направленный граф с взвешенными связями, в котором искусственные нейроны являются узлами.

Матрицу весов связей обученной нейронной сети можно отнести к эвристическим моделям представления знаний.

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

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

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

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

По моделированию времени нейронные сети подразделяются на сети с непрерывным и дискретным временем.

По организации обучения разделяют обучение нейронных сетей с учителем (supervised neural networks), без учителя (nonsupervised).

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

В настоящее время нейронные сети применяются для решения многих неформализуемых или трудно формализуемых задач:

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

Нейронные сети можно использовать при следующих условиях:

  1. Если задачу может решать человек.
  2. Если при решении задачи можно выделить множество входных факторов (сигналов, признаков, данных и т.п.) и множество выходных факторов.
  3. Если изменения входных факторов приводит к изменению выходных.

При применении нейронных сетей необходимо решить следующие задачи:

  1. Постановка задачи, пригодной для решения с помощью нейронной сети.
  2. Выбор модели ИНС.
  3. Подготовка исходных данных для обучения ИНС.
  4. Обучение ИНС.
  5. Собственно решение задачи с помощью обученной ИНС

Кроме того, иногда нужен еще один этап – интерпретация решения, полученного нейронной сетью.

Структура нейронной сети

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

Статья 63 - Картинка 1

Рис. 8. Биологический нейрон

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

На рис. 9 показана схема искусственного нейрона.

Статья 63 - Картинка 2

Рис. 7.1. Схема искусственного нейрона

Состояние нейрона определяется по формуле

Статья 63 - Картинка 3, (7.1)

где

n — число входов нейрона,

xi — значение i-го входа нейрона,

wi — вес i-го синапса.

Затем определяется значение аксона нейрона по формуле

Y = f (S), (7.2)

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

Статья 63 - Картинка 4. (7.3)

Основное достоинство этой функции в том, что она дифференцируема на всей оси абсцисс и имеет очень простую производную:

Статья 63 - Картинка 5. (7.4)

При уменьшении параметра a сигмоид становится более пологим, вырож­даясь в горизонтальную линию на уровне 0,5 при a=0. При увеличении a сигмоид все больше приближается к функции единичного скачка.

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

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

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

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

Оказывается, что после многократного предъявления примеров веса сети стабилизируются, причем сеть дает правильные ответы на все (или почти все) примеры из базы данных. В таком случае говорят, что «нейронная сеть выучила все примеры», «нейронная сеть обучена», или «нейронная сеть натренирована». В программных реализациях можно видеть, что в процессе обучения величина ошибки (сумма квадратов ошибок по всем выходам) постепенно уменьшается. Когда величина ошибки достигает нуля или приемлемого малого уровня, тренировку останавливают, а полученную сеть считают натренированной и готовой к применению на новых данных.

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

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

Активационная функция нейрона

Активационная функция нейрона определяет нелинейное преобразование, осуществляемое нейроном.

Существует множество видов активационных функций, но более всего распространены следующие четыре:

1. Пороговая функция. На рис. 7.2, а приведен ее график.

Статья 63 - Картинка 6. (7.5)

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

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

Статья 63 - Картинка 7. (7.6)

В данном случае a=1, и коэффициент наклона линейного участ­ка выбран еди­ничным, а вся функция может интерпретироваться как аппроксимация нели­ней­ного усилителя. При бесконечно большом ко­эф­фициенте наклона линейного участка функция вырождается в пороговую.

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

Статья 63 - Картинка 9

Рис. 7.2. Типы активационных функций
а), г) пороговая; б) линейная; в) сигмоидальная;
д) тангенциальная; е) радиально-базисная активационные функции

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

В общем виде сигмоидальная активационная функция описывается зависимостью:

Статья 63 - Картинка 10, (7.7)

где a — параметр, определяющий наклон функции.

Варьированием его могут быть получены разные виды сигмоида. Наи­бо­лее часто используется a = 1. В случае бесконечно большого a сигмоидальная функция вырождается в пороговую.

Помимо перечисленных функций, изменяющихся в диапазоне [0, 1], вводятся также их аналоги с областью значений [–1, 1]. Так, например (рис. 7.2, г), пороговая функция может быть переопределена как

Статья 63 - Картинка 11. (7.8)

То есть

Статья 63 - Картинка 12. (7.9)

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

Статья 63 - Картинка 13. (7.10)

Нечетность этой функции делает ее удобной для решения задач уп­рав­ле­ния.

4. Во введенных Брумхеадом и Лоуе нейронных сетях в качестве активационной применяется функция Гаусса (рис. 7.2, е)

Статья 63 - Картинка 14. (7.11)

Ее аргумент рассчитывается по формуле:

Статья 63 - Картинка 15, (7.12)
где

z — вектор входных сигналов нейрона,

c — вектор координат центра окна активационной функции,

s — ширина окна,

|| || — евклидово расстояние.

В теории нейронных сетей активационные функции типа

Статья 63 - Картинка 16 (7.13)

называются радиально-базисными функциями (РБФ), а основанные на них сети — РБФ-сетями (RBF — radial basis function).

Представление входных данных

Особенность нейронной сети в том, что в них все входные и выходные па­ра­метры представлены в виде чисел с плавающей точкой обычно в диапазоне [0..1]. В то же время данные предметной области часто имеют другое коди­ро­ва­ние. Так, это могут быть числа в произвольном диапазоне, даты, сим­воль­ные стро­ки. Таким образом, данные о проблеме могут быть как количественными, так и качественными. Рассмотрим сначала преобразование качественных данных в числовые, а затем способ преобразования входных дан­ных в требуемый диа­па­зон.

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

Нет

Ожирение

Алкоголь

Курение

Гипертония

А также возможным примером может быть возраст больного.

До 25 лет

25-39 лет

40-49 лет

50-59 лет

60 и старше

Опасность каждого фактора возрастает в таблицах при движении слева направо.

В первом случае видим, что у больного может быть несколько фак­то­ров рис­­ка одновременно. В этом случае нам необходимо использовать такое ко­ди­ро­вание, при котором отсутствует ситуация, когда разным комбинациям фак­торов со­от­ветствует одно и то же значение. Наиболее распространен способ ко­ди­ро­вания, когда каждому фактору ставится в соответствие разряд двоичного числа. Число 1 в этом разряде говорит о наличии фактора, а число 0 — о его отсутствии. Параметру нет можно поставить в соответствие число 0. Таким образом, для представления всех факторов достаточно четырех разрядного двоичного числа. Таким образом, число 10102 = 1010 означает наличие у больного гипертонии и употребления алкоголя, а числу 00002 соответствует отсутствие у больного факторов риска. Таким образом, факторы риска будут представлены числами в диапазоне [0..15].

Во втором случае мы также можем кодировать все значения двоичными ве­сами, но это будет нецелесообразно, так как набор возможных значений будет слиш­ком неравномерным. В этом случае более правильным будет установка в со­от­ветствие каждому значению сво­его веса, отличающегося на единицу от веса со­седнего значения. Так число 3 будет соответствовать возрасту 50-59 лет. Таким образом, возраст будет закодирован числами в диапазоне [0..4].

Аналогично можно поступать и для неупо­рядоченных данных, поставив в соответствие каждому значению ка­кое-либо число. Однако, это вво­дит нежелательную упорядоченность, которая может исказить данные и сильно затруднить процесс обу­чения. В качестве одного из способов решения этой про­блемы мож­но предложить поставить в соответствие каждому значению одного из входов нейронной сети. В данном случае при наличии этого значения со­от­ветству­ющий ему вход устанавливается в 1 или в 0 при противном слу­чае. Дан­ный способ не является панацеей, ибо при боль­шом количестве вариантов вход­ного значения число входов ней­рон­ной сети раз­растается до огромного количества. Это резко увеличит затраты вре­мени на обучение. В качестве ва­ри­ан­та обхода этой проблемы мож­но использовать несколько другое решение. В со­ответствие каждому зна­чению входного параметра ставится бинарный вектор, каждый раз­ряд которого соответствует отдельному входу нейронной сети. Например, если чис­ло возможных значений параметра 128, то можно ис­поль­зовать семиразрядный вектор. Тогда первому значению будет соот­ветствовать вектор 0000000, 128-му — 1111111, а, например, значению 26 — 0011011. Тогда число требуемых для кодирования параметров входов можно определить как

N=Log2 (n), (7.14)
где

n — количество значений параметра,

N — количество входов.

Преобразование числовых входных данных

Для нейронной сети необходимо чтобы входные данные лежали в диа­па­зо­не [0..1], в то время как данные проблемной области могут лежать в любом ди­а­пазоне. Пред­положим, что данные по одному из параметров лежат в диапазоне [Min ... Max]. Тогда простым способом нормирования будет

Статья 63 - Картинка 17, (7.15)
где

x — исходное значение параметра,

*— значение, подаваемое на вход нейронной сети.

Этот способ кодирования не лишен недостатков. Так в случае если Статья 63 - Картинка 18, то распределение данных на входе может принять вид

Статья 63 - Картинка 19

Рис. 11. Распределение входных параметров

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

Статья 63 - Картинка 20. (7.16)

Подготовка входных данных

Данные для обучения нейронной сети (в используемой программе Neural Network Wizard 1.7) должны быть предоставлены в текстовом файле с разделителями (Tab или пробел). Количество примеров долж­но быть достаточно большим. При этом необходимо обеспечить, репре­зен­та­тив­ность выборки и не противоречивость данных. Вся информация должна быть представлена в числовом виде. При­чем, это касается всех данных. Если инфор­ма­ция представляется в текстовом виде, то необходимо использовать какой либо ме­тод, переводящий текстовую ин­формацию в числа.

Можно добиться хороших результатов, если провести пред­обработку дан­ных. Если текстовую информацию можно как-то ран­жировать, то необходимо это учитывать. Например, если вы кодируете информацию о городах, то можно ран­жировать по чис­ленности населения и задать соответствующую кодировку: Москва = 1, Санкт-Петербург = 2, Нижний Новгород = 3 и т.д. Если же данные не могут быть упорядочены, то можно задать им произвольные номера. Вообще, лучше при кодировании входной информации увеличивать расстояние между объ­ектами (Москва = 1, Санкт-Петербург = 11, Нижний Новгород = 21) и опре­де­лять результат по расстоянию между значе­нием, полученным из нейросети и ко­дом объекта. В данном случае, если нейронная сеть выдала результат 7.2, значит, что это Санкт-Петербург.

К подготовке данных для нейронной сети нужно подходить очень серьезно. От этого зависит 90 % успеха.

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

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

Во-первых, если подавать на вход противоречивые данные, то нейронная сеть может вообще никогда ничему не научиться. Она будет не в состоянии по­нять, почему в одном случае 2+2=4, а во втором 2+2=5. Необходимо изба­вить­ся от противоречивых данных в обучающей и тестовой выборке.

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

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

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

Сети обратного распространения

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

Нейронная сеть обратного распространения состоит из нескольких слоев нейронов, причем каждый нейрон слоя i связан с каждым нейроном слоя i+1, то есть речь идет о полносвязной НС.

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

Статья 63 - Картинка 21, (7.17)
где

yj — значение j-го выхода нейронной сети,

dj — целевое значение j-го выхода,

p — число нейронов в выходном слое.

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

Статья 63 - Картинка 22, (7.18)
где h — параметр определяющий скорость обучения.

Статья 63 - Картинка 23, (7.19)
где

yj — значение выхода j–го нейрона

Sj — взвешенная сумма входных сигналов, определяемая по формуле (7.1).

При этом множитель

Статья 63 - Картинка 24, (7.20)
где xi — значение i–го входа нейрона.

Далее рассмотрим определение первого множителя формулы (5.19)

Статья 63 - Картинка 25, (7.21)
где k — число нейронов в слое n+1.

Введем вспомогательную переменную

Статья 63 - Картинка 26. (5.22)

Тогда мы сможем определить рекурсивную формулу для определения Статья 63 - Картинка 27 n–ного слоя если нам известно Статья 63 - Картинка 28 следующего (n +1)–го слоя.

Статья 63 - Картинка 29 (7.23)

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

Статья 63 - Картинка 31 (7.24)

Запишем формулу (5.18) в раскрытом виде

Статья 63 - Картинка 32 (7.25)

Рассмотрим теперь полный алгоритм обучения нейронной сети.

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

2. Рассчитать Статья 63 - Картинка 33 для выходного слоя нейронной сети по формуле (7.24) и рассчитать Статья 63 - Картинка 34изменения весов выходного слоя N по формуле (7.25).

3. Рассчитать по формулам (7.23) и (7.25) соответственно Статья 63 - Картинка 35 и Статья 63 - Картинка 36 для остальных слоев НС, n= N-1 … 1

4. Скорректировать все веса нейронной сети

Статья 63 - Картинка 37 (7.26)

5. Если ошибка существенна, то перейти на шаг 1.

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

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

Программное обеспечение

К настоящему времени разработано много программных пакетов, реализующих нейронные сети: Nestor, Cascade Correlation, NeuDisk, Mimenice, Nu Web, Brain Dana, BrainMaker, Neural Professional, HNet, Explorenet 3000, Neuro Solutions, NeuroShell, NeuroWorks, Prapagator, Matlab Toolbox, PathFinder, Neural Analyzer, NeuroPro, НейроОфис.