Теория нейронных сетей (НС) включают широкий круг вопросов из разных областей науки: биофизики, математики, информатики, схемотехники и технологии. Поэтому понятие «нейронные сети» детально определить сложно. Приведем несколько определений.
Нейронные сети — самообучающиеся системы, имитирующие деятельность человеческого мозга.
Искусственные нейронные сети — устройства параллельных вычислений, состоящие из множества взаимодействующих простых процессоров (обрабатывающих элементов).
Искусственная нейронная сеть (ИНС) может рассматриваться как направленный граф с взвешенными связями, в котором искусственные нейроны являются узлами.
Матрицу весов связей обученной нейронной сети можно отнести к эвристическим моделям представления знаний.
По архитектуре связей ИНС могут быть сгруппированы в два класса: сети прямого распространения, в которых графы не имеют петель, и рекуррентные сети, или сети с обратными связями.
Нейронные сети различают по структуре сети (связей между нейронами), особенностям модели нейрона, особенностям обучения сети.
По структуре нейронные сети можно разделить на неполносвязные (или слоистые) и полносвязные, со случайными и регулярными связями, с симметричными и несимметричными связями.
По используемым на входах и выходах сигналам нейронные сети можно разделить на аналоговые и бинарные.
По моделированию времени нейронные сети подразделяются на сети с непрерывным и дискретным временем.
По организации обучения разделяют обучение нейронных сетей с учителем (supervised neural networks), без учителя (nonsupervised).
По особенностям модели нейрона различают нейроны с разными нелинейными функциями: пороговой, экспоненциальной сигмоидой, рациональной сигмоидой, гиперболическим тангенсом.
В настоящее время нейронные сети применяются для решения многих неформализуемых или трудно формализуемых задач:
- распознавания и синтеза речи;
- распознавания аэрокосмических изображений;
- прогнозирования котировки ценных бумаг и курса валют;
- предупреждения мошенничества с кредитными карточками;
- оценки стоимости недвижимости;
- оценки финансового состояния предприятий и риска невозврата кредитов;
- обработки радиолокационных сигналов;
- контроля движения на скоростных автомагистралях и железных дорогах;
- диагностики в медицине;
- добычи знаний из больших объемов данных в бизнесе, финансах и научных исследованиях.
Нейронные сети можно использовать при следующих условиях:
- Если задачу может решать человек.
- Если при решении задачи можно выделить множество входных факторов (сигналов, признаков, данных и т.п.) и множество выходных факторов.
- Если изменения входных факторов приводит к изменению выходных.
При применении нейронных сетей необходимо решить следующие задачи:
- Постановка задачи, пригодной для решения с помощью нейронной сети.
- Выбор модели ИНС.
- Подготовка исходных данных для обучения ИНС.
- Обучение ИНС.
- Собственно решение задачи с помощью обученной ИНС
Кроме того, иногда нужен еще один этап – интерпретация решения, полученного нейронной сетью.
Структура нейронной сети
Несмотря на большое разнообразие вариантов нейронных сетей, все они имеют общие черты. Так, все они, как и мозг человека, состоят из большого числа однотипных элементов — нейронов, которые имитируют нейроны головного мозга, связанных между собой.
Рис. 8. Биологический нейрон
Биологический нейрон моделируется как устройство, имеющее несколько входов и один выход. Каждому входу ставится в соответствие некоторый весовой коэффициент (w), характеризующий пропускную способность канала и оценивающий степень влияния сигнала с этого входа на сигнал на выходе. Обрабатываемые нейроном сигналы могут быть аналоговыми или цифровыми (1 или 0). В теле нейрона происходит взвешенное суммирование входных возбуждений, и далее это значение является аргументом активационной функции нейрона.
На рис. 9 показана схема искусственного нейрона.
Рис. 7.1. Схема искусственного нейрона
Состояние нейрона определяется по формуле
, (7.1)
где
n — число входов нейрона,
xi — значение i-го входа нейрона,
wi — вес i-го синапса.
Затем определяется значение аксона нейрона по формуле
Y = f (S), (7.2)
где f — некоторая функция, которая называется активационной. Наиболее часто в качестве активационной функции используется так называемый сигмоид, который имеет следующий вид:
. (7.3)
Основное достоинство этой функции в том, что она дифференцируема на всей оси абсцисс и имеет очень простую производную:
. (7.4)
При уменьшении параметра a сигмоид становится более пологим, вырождаясь в горизонтальную линию на уровне 0,5 при a=0. При увеличении a сигмоид все больше приближается к функции единичного скачка.
Будучи соединенными определенным образом, нейроны образуют нейронную сеть. Среди различных структур нейронных сетей одной из наиболее известных является многослойная структура, в которой каждый нейрон произвольного слоя связан со всеми аксонами нейронов предыдущего слоя или, в случае первого слоя, со всеми входами НС. Такие нейронные сети называются полносвязными.
Обучение нейронной сети
Обучить нейронную сеть — значит, сообщить ей, чего мы от нее добиваемся. Этот процесс очень похож на обучение ребенка алфавиту. Показав ребенку изображение буквы «А», мы спрашиваем его: «Какая это буква?» Если ответ неверен, мы сообщаем ребенку тот ответ, который мы хотели бы от него получить: «Это буква А». Ребенок запоминает этот пример вместе с верным ответом, то есть в его памяти происходят некоторые изменения в нужном направлении. Мы будем повторять процесс предъявления букв снова и снова до тех пор, когда все 33 буквы будут твердо запомнены. Такой процесс называют «обучение с учителем».
При обучении нейронной сети мы действуем совершенно аналогично. У нас имеется некоторая база данных, содержащая примеры (набор рукописных изображений букв). Предъявляя изображение буквы «А» на вход сети, мы получаем от нее некоторый ответ, не обязательно верный. Нам известен и верный (желаемый) ответ — в данном случае нам хотелось бы, чтобы на выходе с меткой «А» уровень сигнала был максимален. Обычно в качестве желаемого выхода в задаче классификации берут набор (1, 0, 0, ...), где 1 стоит на выходе с меткой «А», а 0 — на всех остальных выходах. Вычисляя разность между желаемым ответом и реальным ответом сети, мы получаем 33 числа — вектор ошибки. Алгоритм обратного распространения ошибки — это набор формул, который позволяет по вектору ошибки вычислить требуемые поправки для весов сети. Одну и ту же букву (а также различные изображения одной и той же буквы) мы можем предъявлять сети много раз. В этом смысле обучение скорее напоминает повторение упражнений в спорте — тренировку.
Оказывается, что после многократного предъявления примеров веса сети стабилизируются, причем сеть дает правильные ответы на все (или почти все) примеры из базы данных. В таком случае говорят, что «нейронная сеть выучила все примеры», «нейронная сеть обучена», или «нейронная сеть натренирована». В программных реализациях можно видеть, что в процессе обучения величина ошибки (сумма квадратов ошибок по всем выходам) постепенно уменьшается. Когда величина ошибки достигает нуля или приемлемого малого уровня, тренировку останавливают, а полученную сеть считают натренированной и готовой к применению на новых данных.
Итак, под обучением понимается процесс адаптации сети к предъявляемым эталонным образцам путем модификации (в соответствии с тем или иным алгоритмом) весовых коэффициентов связей между нейронами.
Важно отметить, что вся информация, которую нейронная сеть имеет о задаче, содержится в наборе примеров. Поэтому качество обучения сети напрямую зависит от количества примеров в обучающей выборке, а также от того, насколько полно эти примеры описывают данную задачу. Так, например, бессмысленно использовать нейросеть для предсказания финансового кризиса, если в обучающей выборке кризисов не представлено. Считается, что для полноценной тренировки требуется хотя бы несколько десятков (а лучше сотен) примеров.
Активационная функция нейрона
Активационная функция нейрона определяет нелинейное преобразование, осуществляемое нейроном.
Существует множество видов активационных функций, но более всего распространены следующие четыре:
1. Пороговая функция. На рис. 7.2, а приведен ее график.
. (7.5)
Первая из введенных активационных функций, она была описана в работе Мак-Каллока и Питтса. В честь этого модель нейрона с пороговой активационной функцией называется моделью Мак-Каллока-Питтса.
2. Кусочно-линейная функция. Она изображена на рис. 7.2, б и описывается следующей зависимостью:
. (7.6)
В данном случае a=1, и коэффициент наклона линейного участка выбран единичным, а вся функция может интерпретироваться как аппроксимация нелинейного усилителя. При бесконечно большом коэффициенте наклона линейного участка функция вырождается в пороговую.
В большинстве типов искусственных нейронных сетей используются нейроны с линейной активационной функцией , представляющей собой частный случай (7.6) с неограниченным линейным участком.
Рис. 7.2. Типы активационных функций
а), г) пороговая; б) линейная; в) сигмоидальная;
д) тангенциальная; е) радиально-базисная активационные функции
3. Сигмоидальная функция. Это наиболее широко используемый тип активационной функции. Она была введена по аналогии с пороговой функцией, но везде является строго монотонно возрастающей, непрерывной и дифференцируемой (рис. 7.2, в). Дифференцируемость является важным свойством для анализа нейронной сети и некоторых методов их обучения.
В общем виде сигмоидальная активационная функция описывается зависимостью:
, (7.7)
где a — параметр, определяющий наклон функции.
Варьированием его могут быть получены разные виды сигмоида. Наиболее часто используется a = 1. В случае бесконечно большого a сигмоидальная функция вырождается в пороговую.
Помимо перечисленных функций, изменяющихся в диапазоне [0, 1], вводятся также их аналоги с областью значений [–1, 1]. Так, например (рис. 7.2, г), пороговая функция может быть переопределена как
. (7.8)
То есть
. (7.9)
Вместо сигмоидальной активационной функции широко применяется гиперболический тангенс, обладающий аналогичными свойствами (рис. 11, д)
. (7.10)
Нечетность этой функции делает ее удобной для решения задач управления.
4. Во введенных Брумхеадом и Лоуе нейронных сетях в качестве активационной применяется функция Гаусса (рис. 7.2, е)
. (7.11)
Ее аргумент рассчитывается по формуле:
, (7.12)
где
z — вектор входных сигналов нейрона,
c — вектор координат центра окна активационной функции,
s — ширина окна,
|| || — евклидово расстояние.
В теории нейронных сетей активационные функции типа
(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]. Тогда простым способом нормирования будет
, (7.15)
где
x — исходное значение параметра,
— значение, подаваемое на вход нейронной сети.
Этот способ кодирования не лишен недостатков. Так в случае если , то распределение данных на входе может принять вид
Рис. 11. Распределение входных параметров
Распределение входных параметров будет крайне неравномерным, что приведет к ухудшению качества обучения. Поэтому в подобных ситуациях, а также в случае, когда значение входа лежит в диапазоне [0; ?) можно использовать нормировку с помощью функции вида
. (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 — выходной векторы. В общем случае такая задача, при ограниченном наборе входных данных имеет бесконечное множество решений. Для ограничения пространства поиска при обучении ставится задача минимизации целевой функции ошибки нейронной сети, которая находится по методу наименьших квадратов:
, (7.17)
где
yj — значение j-го выхода нейронной сети,
dj — целевое значение j-го выхода,
p — число нейронов в выходном слое.
Обучение нейронной сети производится методом градиентного спуска, то есть на каждой итерации изменение веса производится по формуле
, (7.18)
где h — параметр определяющий скорость обучения.
, (7.19)
где
yj — значение выхода j–го нейрона
Sj — взвешенная сумма входных сигналов, определяемая по формуле (7.1).
При этом множитель
, (7.20)
где xi — значение i–го входа нейрона.
Далее рассмотрим определение первого множителя формулы (5.19)
, (7.21)
где k — число нейронов в слое n+1.
Введем вспомогательную переменную
. (5.22)
Тогда мы сможем определить рекурсивную формулу для определения n–ного слоя если нам известно
следующего (n +1)–го слоя.
(7.23)
Нахождение же для последнего слоя нейронной сети не представляет трудности, так как нам известен целевой вектор, то есть вектор тех значений, которые должна выдавать НС при данном наборе входных значений.
(7.24)
Запишем формулу (5.18) в раскрытом виде
(7.25)
Рассмотрим теперь полный алгоритм обучения нейронной сети.
1. Подать на вход нейронной сети один из требуемых образов и определить значения выходов нейронов нейросети.
2. Рассчитать для выходного слоя нейронной сети по формуле (7.24) и рассчитать
изменения весов выходного слоя N по формуле (7.25).
3. Рассчитать по формулам (7.23) и (7.25) соответственно и
для остальных слоев НС, n= N-1 … 1
4. Скорректировать все веса нейронной сети
(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, НейроОфис.