Представление знаний нейронными сетямиТеория нейронных сетей (НС) включают широкий круг вопросов из разных областей науки: биофизики, математики, информатики, схемотехники и технологии. Поэтому понятие «нейронные сети» детально определить сложно. Приведем несколько определений. Нейронные сети — самообучающиеся системы, имитирующие деятельность человеческого мозга. Искусственные нейронные сети — устройства параллельных вычислений, состоящие из множества взаимодействующих простых процессоров (обрабатывающих элементов). Искусственная нейронная сеть (ИНС) может рассматриваться как направленный граф с взвешенными связями, в котором искусственные нейроны являются узлами. Матрицу весов связей обученной нейронной сети можно отнести к эвристическим моделям представления знаний. По архитектуре связей ИНС могут быть сгруппированы в два класса: сети прямого распространения, в которых графы не имеют петель, и рекуррентные сети, или сети с обратными связями. Нейронные сети различают по структуре сети (связей между нейронами), особенностям модели нейрона, особенностям обучения сети. По структуре нейронные сети можно разделить на неполносвязные (или слоистые) и полносвязные, со случайными и регулярными связями, с симметричными и несимметричными связями. По используемым на входах и выходах сигналам нейронные сети можно разделить на аналоговые и бинарные. По моделированию времени нейронные сети подразделяются на сети с непрерывным и дискретным временем. По организации обучения разделяют обучение нейронных сетей с учителем (supervised neural networks), без учителя (nonsupervised). По особенностям модели нейрона различают нейроны с разными нелинейными функциями: пороговой, экспоненциальной сигмоидой, рациональной сигмоидой, гиперболическим тангенсом. В настоящее время нейронные сети применяются для решения многих неформализуемых или трудно формализуемых задач: · распознавания и синтеза речи; · распознавания аэрокосмических изображений; · прогнозирования котировки ценных бумаг и курса валют; · предупреждения мошенничества с кредитными карточками; · оценки стоимости недвижимости; · оценки финансового состояния предприятий и риска невозврата кредитов; · обработки радиолокационных сигналов; · контроля движения на скоростных автомагистралях и железных дорогах; · диагностики в медицине; · добычи знаний из больших объемов данных в бизнесе, финансах и научных исследованиях. Нейронные сети можно использовать при следующих условиях: 1. Если задачу может решать человек. 2. Если при решении задачи можно выделить множество входных факторов (сигналов, признаков, данных и т.п.) и множество выходных факторов. 3. Если изменения входных факторов приводит к изменению выходных. При применении нейронных сетей необходимо решить следующие задачи: 1. Постановка задачи, пригодной для решения с помощью нейронной сети. 2. Выбор модели ИНС. 3. Подготовка исходных данных для обучения ИНС. 4. Обучение ИНС. 5. Собственно решение задачи с помощью обученной ИНС Кроме того, иногда нужен еще один этап – интерпретация решения, полученного нейронной сетью. Несмотря на большое разнообразие вариантов нейронных сетей, все они имеют общие черты. Так, все они, как и мозг человека, состоят из большого числа однотипных элементов — нейронов, которые имитируют нейроны головного мозга, связанных между собой.
Рис. 8. Биологический нейрон Биологический нейрон моделируется как устройство, имеющее несколько входов и один выход. Каждому входу ставится в соответствие некоторый весовой коэффициент (w), характеризующий пропускную способность канала и оценивающий степень влияния сигнала с этого входа на сигнал на выходе. Обрабатываемые нейроном сигналы могут быть аналоговыми или цифровыми (1 или 0). В теле нейрона происходит взвешенное суммирование входных возбуждений, и далее это значение является аргументом активационной функции нейрона. На рис. 9 показана схема искусственного нейрона.
Рис. 7.1. Схема искусственного нейрона Состояние нейрона определяется по формуле
где n — число входов нейрона, xi — значение i-го входа нейрона, wi — вес i-го синапса. Затем определяется значение аксона нейрона по формуле Y = f (S), (7.2)
Основное достоинство этой функции в том, что она дифференцируема на всей оси абсцисс и имеет очень простую производную:
При уменьшении параметра a сигмоид становится более пологим, вырождаясь в горизонтальную линию на уровне 0,5 при a=0. При увеличении a сигмоид все больше приближается к функции единичного скачка. Будучи соединенными определенным образом, нейроны образуют нейронную сеть. Среди различных структур нейронных сетей одной из наиболее известных является многослойная структура, в которой каждый нейрон произвольного слоя связан со всеми аксонами нейронов предыдущего слоя или, в случае первого слоя, со всеми входами НС. Такие нейронные сети называются полносвязными. Обучить нейронную сеть — значит, сообщить ей, чего мы от нее добиваемся. Этот процесс очень похож на обучение ребенка алфавиту. Показав ребенку изображение буквы «А», мы спрашиваем его: «Какая это буква?» Если ответ неверен, мы сообщаем ребенку тот ответ, который мы хотели бы от него получить: «Это буква А». Ребенок запоминает этот пример вместе с верным ответом, то есть в его памяти происходят некоторые изменения в нужном направлении. Мы будем повторять процесс предъявления букв снова и снова до тех пор, когда все 33 буквы будут твердо запомнены. Такой процесс называют «обучение с учителем». При обучении нейронной сети мы действуем совершенно аналогично. У нас имеется некоторая база данных, содержащая примеры (набор рукописных изображений букв). Предъявляя изображение буквы «А» на вход сети, мы получаем от нее некоторый ответ, не обязательно верный. Нам известен и верный (желаемый) ответ — в данном случае нам хотелось бы, чтобы на выходе с меткой «А» уровень сигнала был максимален. Обычно в качестве желаемого выхода в задаче классификации берут набор (1, 0, 0, ...), где 1 стоит на выходе с меткой «А», а 0 — на всех остальных выходах. Вычисляя разность между желаемым ответом и реальным ответом сети, мы получаем 33 числа — вектор ошибки. Алгоритм обратного распространения ошибки — это набор формул, который позволяет по вектору ошибки вычислить требуемые поправки для весов сети. Одну и ту же букву (а также различные изображения одной и той же буквы) мы можем предъявлять сети много раз. В этом смысле обучение скорее напоминает повторение упражнений в спорте — тренировку. Оказывается, что после многократного предъявления примеров веса сети стабилизируются, причем сеть дает правильные ответы на все (или почти все) примеры из базы данных. В таком случае говорят, что «нейронная сеть выучила все примеры», «нейронная сеть обучена», или «нейронная сеть натренирована». В программных реализациях можно видеть, что в процессе обучения величина ошибки (сумма квадратов ошибок по всем выходам) постепенно уменьшается. Когда величина ошибки достигает нуля или приемлемого малого уровня, тренировку останавливают, а полученную сеть считают натренированной и готовой к применению на новых данных. Итак, под обучением понимается процесс адаптации сети к предъявляемым эталонным образцам путем модификации (в соответствии с тем или иным алгоритмом) весовых коэффициентов связей между нейронами. Важно отметить, что вся информация, которую нейронная сеть имеет о задаче, содержится в наборе примеров. Поэтому качество обучения сети напрямую зависит от количества примеров в обучающей выборке, а также от того, насколько полно эти примеры описывают данную задачу. Так, например, бессмысленно использовать нейросеть для предсказания финансового кризиса, если в обучающей выборке кризисов не представлено. Считается, что для полноценной тренировки требуется хотя бы несколько десятков (а лучше сотен) примеров. Активационная функция нейрона определяет нелинейное преобразование, осуществляемое нейроном. Существует множество видов активационных функций, но более всего распространены следующие четыре: 1. Пороговая функция. На рис. 7.2, а приведен ее график.
Первая из введенных активационных функций, она была описана в работе Мак-Каллока и Питтса. В честь этого модель нейрона с пороговой активационной функцией называется моделью Мак-Каллока-Питтса. 2. Кусочно-линейная функция. Она изображена на рис. 7.2, б и описывается следующей зависимостью:
В данном случае a=1, и коэффициент наклона линейного участка выбран единичным, а вся функция может интерпретироваться как аппроксимация нелинейного усилителя. При бесконечно большом коэффициенте наклона линейного участка функция вырождается в пороговую. В большинстве типов искусственных нейронных сетей используются нейроны с линейной активационной функцией
Рис. 7.2. Типы активационных функций 3. Сигмоидальная функция. Это наиболее широко используемый тип активационной функции. Она была введена по аналогии с пороговой функцией, но везде является строго монотонно возрастающей, непрерывной и дифференцируемой (рис. 7.2, в). Дифференцируемость является важным свойством для анализа нейронной сети и некоторых методов их обучения. В общем виде сигмоидальная активационная функция описывается зависимостью:
где a — параметр, определяющий наклон функции. Варьированием его могут быть получены разные виды сигмоида. Наиболее часто используется a = 1. В случае бесконечно большого a сигмоидальная функция вырождается в пороговую. Помимо перечисленных функций, изменяющихся в диапазоне [0, 1], вводятся также их аналоги с областью значений [–1, 1]. Так, например (рис. 7.2, г), пороговая функция может быть переопределена как
То есть
Вместо сигмоидальной активационной функции широко применяется гиперболический тангенс, обладающий аналогичными свойствами (рис. 11, д)
Нечетность этой функции делает ее удобной для решения задач управления. 4. Во введенных Брумхеадом и Лоуе нейронных сетях в качестве активационной применяется функция Гаусса (рис. 7.2, е)
Ее аргумент рассчитывается по формуле:
z — вектор входных сигналов нейрона, c — вектор координат центра окна активационной функции, s — ширина окна, || || — евклидово расстояние. В теории нейронных сетей активационные функции типа
называются радиально-базисными функциями (РБФ), а основанные на них сети — РБФ-сетями (RBF — radial basis function). Особенность нейронной сети в том, что в них все входные и выходные параметры представлены в виде чисел с плавающей точкой обычно в диапазоне [0..1]. В то же время данные предметной области часто имеют другое кодирование. Так, это могут быть числа в произвольном диапазоне, даты, символьные строки. Таким образом, данные о проблеме могут быть как количественными, так и качественными. Рассмотрим сначала преобразование качественных данных в числовые, а затем способ преобразования входных данных в требуемый диапазон. Качественные данные мы можем разделить на две группы: упорядоченные (ординальные) и неупорядоченные. Для определения способов кодирования этих данных рассмотрим задачу о прогнозировании успешности лечения какого-либо заболевания. Примером упорядоченных данных могут, например, являться данные о дополнительных факторах риска при данном заболевании.
А также возможным примером может быть возраст больного.
Опасность каждого фактора возрастает в таблицах при движении слева направо. В первом случае видим, что у больного может быть несколько факторов риска одновременно. В этом случае нам необходимо использовать такое кодирование, при котором отсутствует ситуация, когда разным комбинациям факторов соответствует одно и то же значение. Наиболее распространен способ кодирования, когда каждому фактору ставится в соответствие разряд двоичного числа. Число 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 — количество входов. |


, (7.1)
. (7.3)
. (7.4)
. (7.5)
. (7.6)
, представляющей собой частный случай (7.6) с неограниченным линейным участком.
, (7.7)
. (7.8)
. (7.9)
. (7.10)
. (7.11)
, (7.12)
(7.13)
, (7.15)
— значение, подаваемое на вход нейронной сети.
, то распределение данных на входе может принять вид
. (7.16)
, (7.17)
, (7.18)
, (7.19)
, (7.20)
, (7.21)
. (5.22)
n–ного слоя если нам известно
следующего (n +1)–го слоя.
(7.23)
для последнего слоя нейронной сети не представляет трудности, так как нам известен целевой вектор, то есть вектор тех значений, которые должна выдавать НС при данном наборе входных значений.
(7.24)
(7.25)
для выходного слоя нейронной сети по формуле (7.24) и рассчитать
изменения весов выходного слоя N по формуле (7.25).
и
для остальных слоев НС, n= N-1 … 1
(7.26)