Нейронные сети применяются для решения задач классификации или кластеризации многомерных данных. Основная идея лежащая в основе нейронных сетей - это последовательное преобразование сигнала, параллельно работающими элементарными функциональными элементами. Основой нейронной сети является нейрон. Нейрон состоит из 3 логических блоков: входы, функция преобразования, выход. На каждый вариант входа (вектор) функция преобразования нейрона вырабатывает определённый сигнал (выход) (обычно скаляр), и передает его на входы другим нейронам сети. Подавая на входы некоторым нейронам сигналы извне, и отметив выходы части нейронов, как выходы сети в целом, мы получим систему осуществляющею отображение Rn → Rk, где n - размерность входа (информации из вне), а k - размерность выхода. Нейронные сети различаются функцией преобразования в нейронах, внутренней архитектурой связей между нейронами и методами настройки (обучения).
Для того, чтобы нейросеть выполняла желаемое отображение, требуется особым образом настроить функции преобразования нейронов и внутреннюю архитектуру связей. Чаще всего архитектура связей выбирается заранее из известных моделей и остаётся неизменной во время работы и настройки сети; настраиваемой же является функция преобразование. Зачастую применяется следующий подход построения функции преобразования: все элементы вектора входа суммируются с некоторыми весами (синаптические веса), а далее сумма преобразуется нелинейной функцией (самый простой случай - порог) и результат работы данной функции и есть выход нейрона. В процессе настройке сети (обучение) мы подстраиваем только синаптические веса у нейронов. Для каждой нейросетевой архитектуры существуют различные методы обучения. Основным плюсом нейросетей является возможность решения широкого класса задач алгоритмически не разрешимых или задач с нечёткими условиями.
Отметим наиболее интересные нейросетевые архитектуры и результаты их применения:
Далее в статье мы введем общую терминологию и сформулируем основные понятия, затем последовательно разберём несколько нейросетевых архитектур.
Формальный нейрон состоит из 3 логических блоков: входы, функция преобразования, выход. Рассмотрим подробнее блок функции преобразования.

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


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

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

Отметим, что на входе и на выходе у персептрона - двоичные вектора, то есть персептрон осуществляет некоторое двоичное отображение (функцию). Действительными числами являются только веса связей соединяющих рецепторы и ассоциативный слой. Для j-ого нейрона сети определён вектор Vj. Таким образом персептрон определяется матрицей W размерности m x n, где Wij - вес связи i-ого рецептора с j-ым ассоциативным нейроном.
Обучение персептрона
происходит с учителем. Пускай есть обучающая выборка: xα - обучающий вектор, yα - ожидаемый ответ сети на xα. Тогда будем обучать персептрон следующим образом:Поясним смысл формулы в 4 пункте: идея заключается в коррекции весов нейрона, пропорционально внесённой им ошибке, а играет роль темпа обучения.
Итак, мы установили как обучить персептрон некоторой двоичной функции. Возникает вопрос - любую ли двоичную функцию может осуществлять персептрон? Оказывается, что нет. Основным недостатком персептрона является, так называемая, линейная разделимость. Поясним на простом примере. Пускай у нас есть два рецептора и один ассоциативный нейрон.
Такая сеть должна осуществлять двоичную функцию от двух аргументов. К таким функциям относятся многие основные функции алгебры логики, такие как логическое "и", "или", сложение по модулю 2.
Проведём некоторые преобразования. Как известно выход данной сети
![]()
где f - функция преобразования, x1 и x2 -входы, W1 и W2 - веса связей. Следовательно

иными словами нейрон является линейным классификатором, т.е. разделяет пространство входных векторов(образов) на 2 класса
гиперплоскостью, в нашем случае прямой x1W1 + x2W2 - Θ = 0.

Как видно на картинке множества белых и чёрных точек нельзя
разделить прямой. Одна из известных двоичных функций не представимых с
помощью персептрона - исключающие "или" (сложение по модулю 2). Когда
рецепторов больше двух, получим общее уравнение гиперплоскости в n
мерном пространстве:
.
Так как в персептроне ассоциативные нейроны не зависят друг от друга,
то в общем случае (n рецепторов, k ассоциативных нейронов), мы всё
равно получим k линейных классификаторов. Этот недостаток и послужил
причиной забвения персептрона.
Сразу после краха персептрона Розенблата начались попытки создать нейросеть без свойства линейной разделимости. Основной идеей являлось увеличение количества слоёв ассоциативных нейронов, однако долгое время не существовало алгоритма обучения таких сетей. Первым алгоритмом обучения многослойной нейросети был алгоритм обратного распространения ошибки (error back propagation). Итак опишем многослойный персептрон и методы его обучения.
Модель нейрона претерпела изменения. Теперь нейроны рецепторы принимают на вход действительные числа (обычно от 0 до1), а ассоциативные нейроны используют сигмоидальную функцию преобразованияСтруктура связей в многослойном персептроне весьма похожа на структуру классического персептрона Розенблата. Имеется один слой нейронов рецепторов и произвольное число слоёв ассоциативных нейронов. Нейроны одного и того же слоя друг с другом не связаны, и каждый нейрон связан со всеми нейронами последующего слоя (кроме последнего слоя - его выходы являются выходами сети в целом).

На схеме изображена двухслойная нейросеть - хотя можно использовать произвольное число слоёв, но обычно используются два. Существует теорема о том, что для любой n-слойной сети (n>2), можно построить эквивалентную ей двухслойную сеть. На практике иногда используют больше двух слоёв - в некоторых случаях это может сократить суммарное число нейронов. В двухслойной сети первый слой ассоциативных нейронов обычно называют скрытым слоем, а второй - выходным.
Как видно из архитектуры k-слойная нейросеть производит цепочку отображений
. Существует теорема утверждающая, что многослойная
нейронная сеть может с любой заданной точностью приближать произвольную кусочно-непрерывную и ограниченную функцию (мы не будем
приводить доказательство).
Обучение многослойного персептрона происходит по схеме "обучение с наставником". Опишем самый популярный метод обучения многослойного персептрона - метод обратного распространения ошибки. Сначала изложим основную идею метода. Итак, мы хотим изменять веса связей нейронов пропорционально их вкладу в ошибку. Для последнего слоя вычисление ошибки довольно очевидное действие, но как вычислить ошибку для предыдущих слоёв? Главной идеей метода обратного распространения ошибки является предположение, что ошибка распространяется по нейросети в обратном направлении (от выхода к входам). То есть вклад веса связи в ошибку пропорционален значению проходящего по связи сигнала и ошибке (дальнего по ходу сигнала) нейрона. Таким образом ошибка связи двух нейронов зависит от ошибки ближнего к выходу сети нейрона и прошедшего по связи сигнала. Ошибка как бы распространяется от выходов к входам - отсюда и название метода. Опишем его в точных математических терминах. Пускай у нас есть обучающая выборка из пар (Xα, Yα), α=1,2,..,p. Будем использовать для обучения метод градиентного спуска:

Можно было заметить, что мы проводили все вычисления с параметром функции преобразования Θ = 0. Это было сделано для упрощения.
Как же нам учесть его? Легко заметить, что параметр Θ можно заменить, так называемым, фиктивным входом x0 = -1 с весом W0 = Θ. Таким образом для любого нейрона выход равен
![]()
Итак введя фиктивный вход, мы можем применить вышеописанный метод
просто начиная все суммирование с нуля и учитывая в конце смысл W0.
После появления метода обратного распространения ошибки было придумано много других методов: стохастические, генетические и т.д. Всех их объединяет идея впервые использованная в методе обратного распространения ошибки: подход к обучению нейросети, как к задачи многомерной оптимизации.
На сегодняшний день многослойный персептрон - одна из самых популярных и используемых нейросетей. Причин успеха немало. Одно из главных преимуществ многослойного персептрона, это возможность решать алгоритмически неразрешимые задачи или задачи, для которых алгоритмическое решение неизвестно, но для которых возможно составить репрезентативный набор примеров с известными решениями. Многослойный персептрон функционирует очень похоже на человека. При обучение нейросеть, за счёт своего внутреннего строения, выявляет закономерности в связи входных и выходных образов, тем самым как бы "обобщает" полученный на обучающей выборке опыт. В этой способности к обобщению и состоит основа привлекательности многослойного персептрона. Мы сами можем и не знать какова зависимость между входными и выходными образами, достаточно иметь большой набор векторов для которых известен ожидаемый выход. Вот небольшой список задач где успешно применялся многослойный персептрон:
На практике нейросети зачастую применяются для обработки некоторых последовательностей: звуковых волн, видеопоследовательностей, данных с измерительных приборов и т.д. Для предъявления нейросети данные разбиваются на блоки и подаются нейросети. Такая модель, зачастую работает, но обладает недостатком - обычный многослойный персептрон рассматривает каждый блок независимо от другого, не учитывая возможную связь между ними. Для обработки последовательностей это может оказаться существенным недостатком.
Рассмотрим нейросеть, специально приспособленную для обработки последовательностей - рекурсивную сеть. В литературе их, зачастую, называют сетями Эльмана [2], однако, Эльман является автором лишь одной из моделей. Идея состоит в том, что бы приспособить двухслойный персептрон к обработке последовательностей.
Модель нейрона такая же, как и в многослойном персептроне.
Структура связей: любая рекурсивная сеть строится на основе двухслойного персептрона. В первых рекурсивных сетях главной идеей было дать сети видеть свой выходной образ на предыдущем шаге. У такой сети только часть рецепторов принимает сигналы из окружающего мира, на другие рецепторы приходит выходной образ из предыдущего момента времени.

Что же происходит? Рассмотрим прохождение последовательности сигналов через сеть. Сигнал поступает на группу рецепторов соединённых с внешним миром и проходит в скрытый слой (будем считать, что на начальном этапе другие рецепторы неактивны). Преобразованный скрытым слоем сигнал пойдёт на выходной слой. Сигнал, пройдя через выходной слой, выйдет из сети, а его копия попадёт на задержку. Далее в сеть, на рецепторы, воспринимающие внешние сигналы, поступает второй образ, а на вторую группу рецепторов - выходной образ с предыдущего шага из задержки. Далее со всех рецепторов сигнал пойдёт в скрытый слой. Для скрытого слоя безразлична природа сигнала на второй группе рецепторов, поэтому он будет функционировать, как в обычном многослойном персептроне. Сигнал из скрытого слоя поступит в выходной. Переработанный выходным слоем, сигнал выйдет из сети, а его копия опять попадёт на задержку. И так далее.
Следующим шагом было использование того же принципа, но сохранять не выходной образ, а выход скрытого слоя.
Как видно из схемы у сети два входа для сигналов извне. Три нейрона в скрытом слое и три нейрона во входном слое, на которые с задержкой приходит копия результата работы скрытого слоя.
Самым популярным является следующий подход: возьмём обычный двухслойный персептрон и выходы скрытого слоя, передав сигнал выходному слою, пустим через задержку опять на входы скрытого слоя, смешав их сигналом из окружающего мира. Поясним что же имеется ввиду.
Что же происходит? Рассмотрим прохождение последовательности сигналов через сеть. Сигнал поступает на вход проходит в скрытый слой. Преобразованный скрытым слоем сигнал пойдёт на выходной слой, а его копия - на задержку. Сигнал, пройдя через выходной, слой выйдет из сети. Далее в сеть поступает второй сигнал. Поступив на входы он пойдёт на скрытый слой, просуммированный с сигналом, находящимся на задержки. После этого выход скрытого слоя пойдёт в выходной, а его копия опять сохранится в задержке. И так далее. Обычно, перед суммированием сигнал из задержки умножается на некоторый коэффициент W меньше единицы. Чем больше этот коэффициент, тем сильней влияние предыдущих сигналов на выход сети. Иногда между сигналом в задержке и входным сигналом берётся среднее арифметическое. Из структуры понятно, что количество нейронов скрытого слоя и количество входов (размерность входного образа) должны быть равны. Такой вариант рекурсивной сети реализован, например, в Neural Networks Toolbox в системе MatLab.
Можно так же придумывать множество вариантов и комбинаций, но суть останется неизменной: результат работы одного из слоёв сети, в том или ином виде, подается на входы при обработке следующего сигнала.
Сделаем несколько общих для всех рекурсивных нейросетей замечаний:
Обучение, несмотря на всю сложность структуры связей, обучение проводится, примерно, по той же схеме, что и для многослойного персептрона, притом схема одинакова для всех вариантов рекурсивной архитектуры. Основным отличием является, то что обучающая выборка теперь состоит не из отдельных образов, а из их последовательностей. Коротко опишем этот алгоритм.
Итак, пускай у нас есть обучающая выборка: {Xα, Yα}; α = 1,2,...,p, где n - число элементов в последовательности. n - может быть фиксированным для всех последовательностей в обучающей выборке, а может и зависеть от α.Придадим весам случайные значения и далее будем действовать по следующему алгоритму:
Заметим, что каждый раз при оптимизации весов мы работаем с сетью, как с обычным многослойным персептроном (на картинках связи, изображенные пунктиром, не оптимизируются). Следует заметить, что в случае рекурсивных сетей мы будем использовать не сам градиент ошибки, а лишь его приближение. Почему так? При подсчёте ошибки мы не учитываем ошибку, внесённую из-за данных на задержки. Попытка учёта этой составляющей напрямую может привести к слишком глубокой рекурсии и т.д. Из-за этого обучение сходится медленнее и для качественного функционирования рекурсивной сети требуется, в общем случае, большее количество нейронов, чем для обычной. Однако эти недостатки перекрываются множеством достоинств:
Рекурсивные нейросети широко используются в:
Комментарии
Отправить комментарий