Пример - распознавание текстов
Постановка задачи. В данной задаче не ставится необходимость создания системы, принимающей на вход некоторое изображение, и выдающей как результат код символа (класс изображения). Мы лишь хотим в первом приближении показать, что создание такой системы не является сверхсложной задачей и вполне практически осуществимо. Изображение представляется в форме матрицы 16x8, элементами которой являются 0 и 1. 1 обозначает черный пиксель , а 0 - белый пиксель. Таким образом, по 128 категориальным параметрам необходимо получить код одного из 162 символов (т. е. однозначно определить, изображение какого символа подавалось на вход).
Решение. Решение задачи состоит из нескольких этапов:
На первом этапе были построены избражения символов. Выглядят они примерно следующим образом:

Рисунок 1. Изображение символа b.
Следующим пунктом идет создание зашумленных копий всех строк. В задаче было использовано 3 вида шума: низкий (10%), средний (20%) и высокий (40%).

Рисунок 2. Изображение символа b с низким шумом.

Рисунок 3. Изображение символа b со средним шумом.

Рисунок 4. Изображение символа b с высоким шумом.
С точки зрения теории вероятностей этот шум моделировался следующим образом: каждый бит с вероятностью p инвертировался, а с вероятностью 1-р оставался неизменным. Очевидно, высокому шуму соответствует p=0,4, среднему шуму p=0,2 и низкому - p=0,1. Чтобы увеличить объем исследуемой выборки (а следовательно, увеличить точность и надежность результатов), было сделано по 6 копий для среднего и высокого шума, и 17 копий для низкого шума. Таким образом, имеется выборка из 162+162*17+162*6+162*6=4860 наблюдений; 128 входных переменных, одна выходная.
При таком большом объеме данных затраты времени на обучение сети слишком велики; имеет смысл провести понижение размерности. Так как изображение обрабатывается целиком, то нет необходимости физически удалять переменные, нужно лишь отобразить набор входов в пространство меньшей размерности. Такой метод позволит значительно сократить время на обучение сети, при этом сохраняя приемлемое качество классификации.
Было выделено 32 главных компоненты, которые содержали 60% изменчивости данных.
Далее, на выделенных главных компонентах была обучена вероятностная нейронная сеть. Выбор в ее пользу был сделан по следующим соображениям: во-первых, ВНС обучаются очень быстро, а во-вторых, они специально предназначены для задач классификации. Конечно, в большинстве задач лучшую производительность демонстрируют многослойные персептроны, однако время на обучение персептрона требуется несравнимо большее. В данной задаче это сыграло существенную роль. Кроме того, для многослойных персептронов существенным является выбор алгоритма обучения, т. е. необходимо провести несколько попыток с разными алгоритмами и разными значениями параметров алгоритмов обучения.
Полученные результаты. Обученная вероятностная нейронная сеть имеет следующие показатели производительности:

Рисунок 5. Показатели качества классификации.
Это значит, что на обучающей выборке процент правильной классификации 99.18, на контрольной - 84.12, на тестовой - 84.53.
Теперь рассмотрим подробнее результаты классификации на тестовой выборке. Получились следующие показатели:

Рисунок 6. Результаты классификации на тестовой выборке.
В результате рассмотрения матрицы несоответствий можно выделить и типичные ошибки сети при распознавании символов. Например:

Рисунок 7. Типичные ошибки сети.
Чаще всего сеть не "узнавала" следующие символы:

Рисунок 8. "Нелюбимые" символы сети.
Выводы. Итак, результат нельзя назвать выдающимся (представьте себе, при сканировании текста с распознаванием исправлять каждый четвертый символ - и это при не самой высокой зашумленности текста).
Однако видны большие резервы ресурсов для улучшения результата. Если запастись временем, терпением, мощным компьютером и инвестициями, можно попытаться сделать следующее:
1) Увеличить размерность бинарной матрицы (т. е. разбить изображение на более мелкие фрагменты)
2) Выделить большее число главных компонент, или вообще не выделять их
3) Запустить для этой задачи Мастер решений (уникальный инструмент STATISTICA Нейронные Сети 6.0, предназначенный для автоматического поиска наиболее подходящей нейросетевой архитектуры). Его работа займет, возможно, несколько часов или даже дней, но результат, скорее всего, улучшится.
4) Использовать в качестве классификатора многослойный персептрон.
Еще один важный момент - можно избежать ошибок, связанных с ошибками в латинских и русских буквах идентичного написания. Например, фиксировать язык предыдущего распознанного символа, и текущий символ (в случае возникающей двойственности) выбирать из того же самого языка. Разумеется, это лишь пример, общая рекомендация, и при ее реализации нужно обходить множество подводных камней, таких как определение ситуации, названной двойственность, в терминах отклика сети, учет точек и пробелов и т. д.
Кроме путей дальнейшего решения данной задачи нужно заметить и некоторые сложности: дело в том, что наиболее распространенных шрифтов существует несколько десятков, поэтому на вход сети для обучения придется подавать гораздо больше образцов, чем в нашем примере. Соответственно, объем выборки для обучения и тестирования сети увеличивается в несколько (или даже в несколько десятков - в зависимости от поставленных перед сетью целей) раз.
Тем не менее, построить хороший нейросетевой классификатор представляется вполне осуществимым на практике.
![]()
(c) Copyright StatSoft, Inc., 1984-2003
STATISTICA является торговой маркой StatSoft, Inc.