Распознование образов нейронной сетью Многие задачи можно свести к задачам, решаемой нейронной сетью. Рассмотрим, как при ее помощи можно реализовать распознавание символов алфавита. Пусть у нас имеется растровое черно-белое изображение буквы размером 30x30 пикселей. В русском алфавите 33 буквы и нам требуется определить, какую букву представляет заданное изображение. Понятно, что входной вектор можно представить как набор из 900 (30x30) двоичных значений. Распознование образов нейронной сетью Тогда нам требуется построить нейронную сеть с 900 входами и 33 выходами (каждый выход обозначает соответствующую букву). Если на входе нейронной сети поступает изображение буквы «А», то максимальное значение выходного сигнала достигается на соответствующем выходе «А», аналогично и для остальных букв. Распознование образов нейронной сетью В принципе, уровень выходного сигнала может принимать любые значения из какого-то диапазона. Но нас интересует номер категории, т.е. буквы в алфавите. Поэтому используется следующий подход - каждой категории сопоставляется свой выход, а ответом нейронной сети считается та категория, на чьем выходе уровень сигнала максимален. Распознование образов нейронной сетью Уровень сигнала на выходе, например, «А» можно рассматривать как достоверность того, что на вход нейронной сети было подано изображение буквы «A». Задачи, в которых нужно отнести входные данные к одной из известных категорий, называются задачами классификации. Изложенный подход - стандартный способ классификации с помощью нейронных сетей. Распознование образов нейронной сетью Построение нейронной сети производится в два этапа: 1. Выбор типа или архитектуры сети. 2. Подбор весовых коэффициентов или обучение сети. На первом этапе выбирается структура перцептронов (число их входов, передаточные функции), конфигурация связей между ними, производится определение входов и выходов сети. Распознование образов нейронной сетью Нейронную сеть не требуется создавать «с нуля», существует множество архитектур, предназначенных для решения разных классов задач, например многослойный перцептрон, нейронная сеть с общей регрессией, нейронные сети Кохонена. На втором этапе требуется «обучить» выбранную нейронную сеть, подобрать такие значения ее весов, чтобы она работала нужным образом. Распознование образов нейронной сетью Обучить нейронную сеть - «передать» сети, чего мы от нее добиваемся. Этот процесс очень похож на обучение ребенка алфавиту. Показав ребенку изображение буквы «А», мы спрашиваем его: «Какая это буква?». Если ответ неверен, мы сообщаем ребенку тот ответ, который мы хотели бы от него получить: «Это буква А». Ребенок запоминает этот пример вместе с верным ответом, то есть в его памяти происходят некоторые изменения в нужном направлении. Это процесс повторяется до тех пор, когда все 33 буквы не будут твердо запомнены. Такой процесс называют «обучение с учителем». Архитектура нейронной сети Часто для распознавания образов используют архитектуру многослойной нейронной сети (многослойный перцептрон). Такая сеть состоит из последовательно соединённых слоев, где нейрон каждого слоя своими входами связан со всеми нейронами предыдущего слоя, а выходами следующего. Нейронная сеть с двумя решающими слоями может с любой точностью аппроксимировать любую многомерную функцию. Архитектура нейронной сети Входной (распределительный) псевдослой Промежуточный (скрытый) слой Выходной слой X1 O1 X2 O2 X3 O3 … … X900 O33 Архитектура нейронной сети Первый слой (слева) называется входным (распределительным) или сенсорным, внутренние слои называются промежуточными (скрытыми) или ассоциативными, последний (самый правый) — выходным или результативным. Количество нейронов в слоях может быть произвольным. Обычно во всех скрытых слоях одинаковое количество нейронов. Архитектура нейронной сети Количество входных и выходных элементов определяется условиями задачи. Вопрос о том, сколько использовать промежуточных слоев и элементов в них, может решаться по разному. В качестве начального приближения можно взять один промежуточный слой. Существует неоднозначность с подсчетом количества слоев в сети. Входной слой не выполняет никаких вычислений, а лишь распределяет входные сигналы, поэтому иногда его считают, иногда — нет и иногда называют псевдослоем. Обучение нейронной сети Обучение нейронной сети Пусть при обучении нейронной сети имеется некоторый набор примеров (набор изображений букв). Предъявляя изображение буквы «А» на вход нейронной сети, мы получаем от нее некоторый ответ (возможно, неверный). Нам известен верный (желаемый) ответ - чтобы на выходе нейронной сети с меткой «А» уровень сигнала был максимален. Обычно в качестве желаемого выхода в задаче классификации берут набор (1, 0, …, 0), где 1 стоит на выходе с меткой «А», а 0 - на всех остальных выходах. Обучение нейронной сети Вычисляя разность между требуемым ответом и реальным ответом сети, мы получаем 33 числа вектор ошибки. Одним из наиболее популярных методов обучения нейронных сетей является алгоритм обратного распространения ошибки (Error Back Propagation) - набор формул, который позволяет по вектору ошибки вычислить требуемые поправки для весов нейронной сети. Одну и ту же букву (и различные варианты ее изображений) мы можем предъявлять нейронной сети много раз. Обучение нейронной сети Обратное распространение ошибки стандартный способ обучения нейронной сети. 1. Входной набор данных, на котором сеть должна быть обучена, подается на входной слой сети, и сеть функционирует в нормальном режиме (т.е. вычисляет выходные данные). 2. Полученные данные сравниваются с требуемыми выходными данными для рассматриваемого входного набора. Разница между полученными и требуемыми данными вектор ошибки. Обучение нейронной сети 3. Вектор ошибки используется для модифицирования весовых коэффициентов выходного слоя с тем, чтобы при повторной подаче того же набора входных данных вектор ошибки уменьшался. 4. Модифицируются весовые коэффициенты скрытого слоя, на этот раз сравниваются выходные сигналы нейронов скрытого слоя и входные сигналы нейронов выходного слоя, целью данного сравнения является формирование вектора ошибки для скрытого слоя. Обучение нейронной сети 5. Если в сети существует входной слой (именно слой, а не псевдослой, распределяющий ряд входных значений), то проводятся аналогичные действия и с ним. Подробные описания принципов функционирования нейронных сетей, алгоритма обратного распространения ошибки и примеры реализации можно изучить тут: http://www.gotai.net/documents-neural_networks.aspx http://www.gotai.net/documents/doc-imp-006.aspx Обучение нейронной сети После многократного предъявления примеров веса нейронной сети стабилизируются, причем нейронная сеть дает правильные ответы на все (или почти все) примеры из базы данных. В таком случае считается, что нейронная сеть обучена. В программных реализациях можно видеть, что в процессе обучения величина ошибки (сумма квадратов ошибок по всем выходам) постепенно уменьшается. Обучение нейронной сети Когда величина ошибки достигает нуля или приемлемого малого уровня, обучение прекращается, а полученную нейронную сеть считают обученной и готовой к применению на новых (реальных) данных. Вся информация, которую нейронная сеть имеет о задаче, содержится в наборе примеров. Поэтому качество обучения нейронной сети напрямую зависит от количества примеров в обучающей выборке, а также от того, насколько полно эти примеры описывают данную задачу. Применение нейронной сети Применение нейронной сети После того, как нейронная сеть обучена, ее можно применять для решения реальных задач. Важнейшая особенность человеческого мозга состоит в том, что, однажды обучившись определенному процессу, он может верно действовать и в тех ситуациях, в которых он не бывал в процессе обучения. Например, человек может читать некоторый почерк, даже если ранее он с ним не сталкивался. Так же и нейронная сеть, грамотным образом обученная, может с большой вероятностью правильно реагировать на новые, не предъявленные ей ранее данные. Применение нейронной сети Например, мы можем предоставить системе изображение некоторой букву, написанной другим почерком (не присутствовавшим в обучающей выборке). Веса правильно обученной нейронной сети хранят достаточно много информации о сходстве и различиях букв, поэтому можно рассчитывать на правильный ответ и для этого нового варианта изображения. Области применения нейронных сетей Нейросетевая классификация. Следует заметить, что задачи классификации (то же распознавание символов) достаточно трудно реализуются с применением обычного алгоритмического подхода. Если в случае распознавания букв верный ответ очевиден для нас заранее, то в более сложных практических задачах обученная нейронная сеть выступает как эксперт, обладающий большим опытом и способный дать ответ на трудный вопрос. Области применения нейронных сетей Примером может служить медицинская диагностика, где нейронная сеть может учитывать большое количество числовых параметров (кардио- и энцефалограмма, давление, вес и т.д.). Конечно, решение нейронной сети в этом случае нельзя считать окончательным. Классификация предприятий по степени перспективности - распространенный способ использования нейронных сетей в современном бизнесе. При этом нейронная сеть также использует множество экономических показателей, сложным образом связанных между собой. Области применения нейронных сетей Нейросетевой подход особенно эффективен в задачах экспертной оценки по той причине, что он сочетает в себе вычислительные мощности компьютеров и способность мозга к обобщению и распознаванию. Говорят, что у хорошего врача способность к распознаванию в своей области столь велика, что он может провести приблизительную диагностику уже по внешнему виду пациента. Также на биржевом рынке опытный трейдер чувствует направление движения рынка по виду графика. Области применения нейронных сетей Однако в случае с врачом все факторы наглядны, то есть характеристики пациента мгновенно воспринимаются человеком как «бледное лицо», «дрожащие руки», «постоянный кашель» и т.д. Во втором случае учитывается только один фактор, показанный на графике - курс за определенный период времени. Нейронная сеть позволяет обрабатывать огромное количество факторов (до нескольких тысяч), независимо от их наглядности это универсальный «хороший врач», который может поставить свой диагноз в любой области. Области применения нейронных сетей Кластеризация и поиск зависимостей. Нейронная сеть на основе методики МГУА (метод группового учета аргументов) позволяет на основе обучающей выборки построить зависимость одного параметра от других в виде полинома. Такая нейронная сеть может не только мгновенно выучить таблицу умножения, но и найти сложные скрытые зависимости в данных (например, финансовых), которые не обнаруживаются стандартными статистическими методами. Области применения нейронных сетей Кластеризация - разбиение набора примеров на несколько компактных областей (кластеров), число которых заранее неизвестно. Кластеризация позволяет представить неоднородные данные в более наглядном виде и использовать далее для исследования каждого кластера различные методы. Например, таким образом можно быстро выявить фальсифицированные страховые случаи или недобросовестные предприятия. Области применения нейронных сетей Задачи прогнозирования. Задачи прогнозирования особенно важны для практики, в частности, в финансовой области. Пусть у нас имеется набор значений курса валюты за последние 300 дней. Простейший вариант в данном случае - попытаться построить прогноз завтрашней цены на основе курсов за последние несколько дней. Понятно, что прогнозирующая нейронная сеть должна иметь всего один выход и столько входов, сколько предыдущих значений мы хотим использовать для прогноза - например, 4 последних значения. Области применения нейронных сетей Составить обучающий пример очень просто входными значениями нейронной сети будут курсы за 4 последовательных дня, а желаемым выходом нейронной сети - известный нам курс в следующий день за этими четырьмя. Объем обучающей выборки зависит от выбранного нами количества входов нейронной сети. Можно сделать 299 входов, то такая нейронная сеть потенциально могла бы строить лучший прогноз, чем нейронная сеть с 4 входами, однако в этом случае мы имеем всего 1 обучающий пример, и обучение бессмысленно. Области применения нейронных сетей При выборе числа входов нейронной сети следует учитывать это, выбирая разумный компромисс между глубиной предсказания (число входов нейронной сети) и качеством обучения нейронной сети (количество примеров в обучающем наборе).