МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ СОЦИАЛЬНЫЙ УНИВЕРСИТЕТ Кафедра Информационных систем А.П. Свиридов, Н.А. Слесарева, Б.В. Стрыгин, И.А. Шалобина Лабораторный практикум по учебной дисциплине “Нейросети и нейрокомпьютеры” (часть 1: работы на основе нейропакета SNNS) Для студентов специальностей “Автоматизированные системы обработки информации и управления” и “Программное обеспечение автоматизированныйхсистем и вычислительной техники” Москва 2003 2.2.1. Лабораторная работа №1. Классификация образов Цель работы: Изучение основ моделирования искусственных нейронных сетей (ИНС) с помощью программного пакета SNNS на примере моделирования системы распознавания образов. Формируемые знания, умения и навыки: 1) знания и умения по работе систем распознавания образов, реализованных с использованием технологии нейронных сетей. 2) практические навыки использования системы SNNS. Для выполнения лабораторной работы необходимо знание общих сведений о работе с ПЭВМ IBM PC AT в операционной среде Windows. Желательно также перед выполнением лабораторной работы пройти «Вводный курс» и «Продвинутый курс» обучения по ИНС. Теоретическая часть. Классификация образов Задача классификации образов состоит в указании принадлежности входного образа (например, сигнала или рукописного символа), представленного вектором атрибутов, одному или нескольким предварительно определенным классам. К известным приложениям относятся распознавание букв и речи, классификация сигналов электрокардиограммы, классификация клеток крови и т.д. В настоящее время, кроме программных пакетов оптического распознавания символов (OCR – Optical Character Recognition), существуют еще множество коммерческих продуктов, использующих способности ИНС к классификации. В данной работе Вы построите сеть, которая сможет распознавать заглавные буквы латинского алфавита («A»… «Z»), нарисованные в матрице 5х7 элементов. Безусловно, эта задача несколько искусственна (для реальных систем разрешающая способность матрицы должна быть хотя бы на порядок больше), но ее решение позволит освоить основы пользовательского интерфейса инструментальной системы SNNS, а также понять основы функционирования некоторых систем распознавания образов. Набор обучающих образов для системы распознавания образов: SNNS pattern definition file V3.2 generated at Mon Apr 25 18:08:50 1994 No. of patterns : 26 No. of input units : 35 No. of output units : 26 # Input pattern 1: 0111010001 1000111111 1000110001 10001 # Output pattern 1: 1000000000 0000000000 000000 # Input pattern 2: 1111010001 1000111110 1000110001 11110 # Output pattern 2: 0100000000 0000000000 000000 # Input pattern 3: 0111010001 1000010000 1000010001 01110 # Output pattern 3: 0010000000 0000000000 000000 # Input pattern 4: 1111010001 1000110001 1000110001 11110 # Output pattern 4: 0001000000 0000000000 000000 # Input pattern 5: 1111110000 1000011110 1000010000 11111 # Output pattern 5: 0000100000 0000000000 000000 # Input pattern 6: 1111110000 1000011110 1000010000 10000 # Output pattern 6: 0000010000 0000000000 000000 # Input pattern 7: 0111010001 1000010111 1000110001 01110 # Output pattern 7: 0000001000 0000000000 000000 # Input pattern 8: 1000110001 1000111111 1000110001 10001 # Output pattern 8: 0000000100 0000000000 000000 # Input pattern 9: 0111000100 0010000100 0010000100 01110 # Output pattern 9: 0000000010 0000000000 000000 # Input pattern 10: 1111100001 0000100001 0000110001 01110 # Output pattern 10: 0000000001 0000000000 000000 # Input pattern 11: 1000110010 1010011000 1010010010 10001 # Output pattern 11: 0000000000 1000000000 000000 # Input pattern 12: 1000010000 1000010000 1000010000 11111 # Output pattern 12: 0000000000 0100000000 000000 # Input pattern 13: 1000111011 1010110001 1000110001 10001 # Output pattern 13: 0000000000 0010000000 000000 # Input pattern 14: 1000110001 1100110101 1001110001 10001 # Output pattern 14: 0000000000 0001000000 000000 # Input pattern 15: 0111010001 1000110001 1000110001 01110 # Output pattern 15: 0000000000 0000100000 000000 # Input pattern 16: 1111010001 1000111110 1000010000 10000 # Output pattern 16: 0000000000 0000010000 000000 # Input pattern 17: 0111010001 1000110001 1010110011 01111 # Output pattern 17: 0000000000 0000001000 000000 # Input pattern 18: 1111010001 1000111110 1010010010 10001 # Output pattern 18: 0000000000 0000000100 000000 # Input pattern 19: 0111010001 1000001110 0000110001 01110 # Output pattern 19: 0000000000 0000000010 000000 # Input pattern 20: 1111100100 0010000100 0010000100 00100 # Output pattern 20: 0000000000 0000000001 000000 # Input pattern 21: 1000110001 1000110001 1000110001 01110 # Output pattern 21: 0000000000 0000000000 100000 # Input pattern 22: 1000110001 1000110001 1000101010 00100 # Output pattern 22: 0000000000 0000000000 010000 # Input pattern 23: 1000110001 1000110001 1010110101 01010 # Output pattern 23: 0000000000 0000000000 001000 # Input pattern 24: 1000110001 0101000100 0101010001 10001 # Output pattern 24: 0000000000 0000000000 000100 # Input pattern 25: 1000110001 0101000100 0010000100 00100 # Output pattern 25: 0000000000 0000000000 000010 # Input pattern 26: 1111100001 0001000100 0100010000 11111 # Output pattern 26: 0000000000 0000000000 000001 Работа с программой Рис.2.31. Окна SNNS после запуска. Для запуска системы SNNS следует сначала запустить служебную программу X-Win32 (это верно только для варианта SNNS для Windows). Затем следует запустить файл «snns.bat». После запуска появятся несколько окон (рис.2.31). Окно «banner» (логотип) пропадет после щелчка мышью по нему. После этого можно начать работу с программой. Создание сети Менеджер SNNS дает доступ ко всем возможностям пакета. Ниже представлен рис.2.32, объясняющий функции основных кнопок. Работа с файлами Управление обучением и контроль Подсказка Информация о нейронах и весах Диаграмма сети Выхо д График ошибок Определение сети Рис.2.32. Панель менеджера SNNS. Считывание и запись файлов SNNS использует файлы пяти типов. Самыми важными из них являются: NET – Файлы с описанием сетей содержат информацию о топологии сети и правилах обучения. Файлы заканчиваются символами ‘.net’. PAT – файлы обучающих наборов (образцов, образов), содержащие данные для тренировки и тестирования сетей. Все файлы образов заканчиваются символами ‘.pat’. RES – файлы результатов. Выход сети может быть интерпретирован множеством различных путей в зависимости от решаемой проблемы. SNNS позволяет пользователям делать дамп выходов сети в отдельном файле для последующего анализа. Остальные два типа файлов не важны для первого ознакомления с SNNS. Для открытия файлов сетей и образов используется опция FILE на панели менеджера SNNS. Появится окно загрузки файлов (рис.2.33). Текущий каталог Список имеющихся файлов Имя файла Выбор типа файлов Линейка листания Загрузить Завершить Со хранить Рис.2.33.Файловый проводник SNNS. Верхнее текстовое поле показывает текущий каталог. Главное полесписок показывает все файлы в соответствии с выбранным типом файла, понимаемым SNNS. Каталоги заключены в квадратные скобки. Создание новой сети SNNS позволяет создавать нейронные сети многих различных типов. Здесь приведен пример создания обычной полносвязной сети прямого распространения информации. Эта сеть сможет распознавать большие буквы латинского алфавита. Выберите опцию FEEDFORWARD из меню кнопки BIGNET на панели менеджера. На экране появилась панель, показанная на рис.2.34. Необходимы только две части панели. Определить (создать) слой Определение топологии слоя Выбор типа и расположения нейронов Не обращайте внимания на эти параметры Сделать сеть полносвязной Создать сеть Рис.2.34. Панель построения сети прямого распространения информации BigNet. Верхняя часть позволяет задать топологию сети, т.е. требуемое количество нейронов на каждом уровне и способ вывода нейронов в сети на экран. Нижняя часть формы позволяет соединить нейроны и создать сеть. Примите к сведению, что многое из того, что Вы вводите, носит чисто косметический характер. Файл с обучающими последовательностями образов содержит заранее заданное число входов и выходов сети и они должны совпадать с топологией. Для симулятора неважно, как они расположены на дисплее. Сначала Вы должны определить входной уровень путем заполнения полей ввода в верхнем правом углу формы. Форма показывает текущие установки для каждой группы нейронов (в терминологии SNNS – плоскость, plane). Каждая группа имеет свой тип (входной – input, скрытый – hidden или выходной – output) и каждая плоскость содержит некоторое количество нейронов (в оригинале – unit), распределенных в координатной системе x-y-z. Это распределение используется только при изображении сети! Значения полей ввода можно менять, вводя значения в поле или нажимая на кнопки TYPE и POS для изменения типа и относительной позиции нейрона соответственно. Относительная позиция не используется для первой плоскости нейронов (не к чему привязать относительную позицию). Следующие уровни будут расположены снизу от предыдущего уровня, если поле ‘Rel. Position’ будет изменено на ‘below’ нажатием на кнопку POS. Попробуем проделать работу по созданию простой сети с матрицей ввода 5х7, десятью скрытыми и 26 выходными нейронами: Оставьте тип (‘Type’) входным (input). Установите номер по ‘x’ в 5. То же с ‘y’ – в 7. Нажмите на кнопку ENTER (кнопку формы, а не на клавиатуре). Если Вы все сделали правильно, вход будет скопирован в колонку слева. Следующий шаг – создать скрытый слой, содержащий 10 нейронов и помещенный справа от входного. Измените ‘Type’ с входного (input) на скрытый (hidden), нажимая на кнопку TYPE. Установите по ‘x’ – 1. И по ‘y’ – 10. Смените ‘Rel. Position’ на ‘right’, нажимая на кнопку POS и нажмите на кнопку ENTER. Теперь Вы готовы создать выходной слой, где мы хотим иметь 26 выходных нейронов справа от входа. Для того, чтобы нейронная сеть уместилась на экране, мы построим эти нейроны в две колонки по 13 нейронов в каждой. Смените тип со скрытого (hidden) на выходной (output), нажимая на кнопку POS. Установите по ‘x’ – 2. И по ‘y’ – 13. Нажмите на кнопку ENTER. После определения топологии слоев необходимо обозначить связи в сети. Просто щелкните по кнопке FULL CONNECTION (она находится внизу слева на нижней панели формы). Теперь выберите CREATE NET и DONE. Если перед упражнениями была загружена какая-нибудь сеть, появится сообщение о ее уничтожении. Рис.2.35. Окно просмотра сети SNNS. Если теперь нажать на кнопку DISPLAY менеджера SNNS, мы увидим только что созданную нами нейронную сеть (рис.2.35.). Обычно линии, показывающие веса, не видны, но их можно включить, выбрав SETUP и затем нажав на кнопку ON рядом с опцией ‘связи’ (‘links’). Вы заметите, что SNNS не допускает больше ввода до тех пор, пока Вы не нажмете на кнопку DONE. После создания сети и загрузки файла обучающих последовательностей (он должен соответствовать топологии сети) можно приступать к обучению сети. Сеть, которую мы только что создали, должна соответствовать файлу ‘letters.pat’, расположенному в каталоге примеров SNNS. Существует также альтернативный путь для создания сетей – через графический редактор сетей, встроенный в SNNS. Он хорошо приспособлен для внесения изменений в существующие большие сети или для создания новых небольших сетей. Для создания больших сетей используйте инструмент bignet. Редактор сетей будет описан ниже. Обучение сети Загрузите из каталога примеров SNNS файл с обучающими последовательностями ‘letter’ (предварительно нажмите на кнопку PAT). Сеть – это инструмент для ассоциации учебных примеров и она может быть обучена для отображения входных изображений (в палитре 5х7 представлены буквы) на выходные нейроны, где каждой из 26 букв латинского алфавита соответствует один выходной нейрон. Все обучение и тестирование производится через опцию CONTROL. (рис.2.36) Количество циклов обучения Начать/Остановить обучение Инициализация сети Контрольные параметры Параметры обучения Готово Случайный порядок Обучающая функция Рис.2.36. Панель управления обучением и контролем сетей SNNS. Рассмотрим наиболее важные возможности одну за одной. Форма состоит из двух частей. Верхняя часть управляет определениями параметров процесса обучения, а три нижние строки – это бланк, который должен быть заполнен для определения интенсивности обучения и т.д., а также диапазон, в котором веса будут случайно распределены при инициализации сети. По умолчанию параметры обучения установлены в (0.2 0 0 0 0), а веса по умолчанию – между 1 и –1 (1.0 –1.0 0 0 0). Инициализация Многие сети должны быть инициализированы перед тем, как их можно использовать. Для того, чтобы выполнить инициализацию, щелкните INIT (в верхней линии кнопок в форме). Можно также изменить диапазон случайных чисел, используемых при инициализации, вводя соответствующие значения в поля, расположенные справа от ‘INIT’ (нижний край формы). Выбор алгоритма обучения Для сетей с прямым распространением информации (feedforward) по умолчанию применяется алгоритм обучения Std_Backpropagation (стандартный алгоритм обратного распространения). Для выбора иных алгоритмов щелкните SEL_FUNC (рядом с параметрами распространения ошибки) и выберите функцию, которую хотите использовать. Алгоритмы, которые можно сейчас использовать: Std_Backpropagation, BackpropMomentum или Rprop. Для примера letters используйте BackpropMomentum. Каждый алгоритм обучения требует установки различных параметров. Приведем наиболее важные: Std_Backpropagation 1: - скорость обучения (коэффициент коррекции)– learning rate (0-1) 2: dmax – максимальная ошибка, которая может быть допущена. Используйте 0 или меньшее значение. BackpropMomentum 1: - скорость обучения (коэффициент коррекции) (0-1) 2: - выражение момента – momentum term (0-0.99), 3: с – уничтожение плоской области - flat spot elimination (проигнорируйте пока этот параметр) и 4: dmax – максимальная ошибка, которая может быть допущена. Используйте 0 или небольшое значение. Rprop 1: начальные значения ij (0-0.2) 2: max – максимальное значение для обновления (хорошо работает значение 30) 3: разложение весов по экспоненте (для большинства проблем подходит 5) x=10-=0.00001. После того, как все параметры установлены, можно начинать обучение сети. Обучение производится за определенное количество циклов (CYCLES). Введите номер, например 200. В каждом цикле тренировок используются все обучающие образы. Иногда бывает предпочтительно выбрать образы обучающей последовательности в случайном порядке: для этого нажмите SHUFFLE. Для примера сети – ассоциатора оставьте скорость обучения (learning rate) или коэффициент коррекции 0.2 и установите momentum term (второе поле) в 0.5; остальные поля оставьте с нулями. Перед тем, как начать процесс обучения, откройте окно графиков (нажмите GRAPH в окне менеджера) для того, чтобы можно было наблюдать за процессом тренировки. Теперь нажмите на ALL для начала обучения и затем STOP для его остановки. График начнется из левого положения каждый раз, когда сеть инициализируется, поэтому легко сопоставлять различные параметры алгоритма обучения. Текущая ошибка также показана на экране и может быть использована в любой программе рисования. Невозможно судить о корректности работы сети только по тренировочным данным. Поэтому целесообразно загружать тестовый набор, чтобы убедиться в том, что сеть не перетренирована и проводит обобщения корректно. Для нашего примера тестовый пример не приведен. Возможно иметь одновременно до 5 активных тестовых наборов одновременно. Две кнопки USE на форме позволяют выбрать тестовые наборы для обучения и контроля. Верхняя кнопка соответствует обучающей, а нижняя – контролирующей последовательности. Если ввести ненулевое значение в поле VALID, каждые N циклов (N – введенное значение) будет проводиться проверка на тестовом наборе и среднеквадратичное отклонение ошибки будет нарисовано на графике красным цветом. Можно пройти также по всем образам в наборе и рассчитать выходную активацию без изменения весов связей. Для этого надо щелкать по кнопке TEST. Можно перейти к любому образу обучающей последовательности одним из двух путей: указанием номера образа в поле, обозначенном ‘PATTERN’, и нажатием GOTO. Выходы, рассчитанные сетью во время прохода по данным – это цели, а не вычисленные выводы! Рабочее задание 1. Ознакомиться с описанием лабораторной работы. 2. Изучить действия, приведенные в описании, и последовательно выполнить все шаги. В результате у Вас получится обученная нейронная сеть, способная решать задачу распознавания символов. 3. По окончании п.2 показать преподавателю результаты: 4. дисплей с изображением структуры нейронной сети; 5. панель управления обучением с установленными параметрами алгоритма обучения; 6. график обучения; 7. Создать сеть и обучающую последовательность для решения следующей задачи классификации: 8. для четных вариантов: по аналогии с приведенным примером реализовать распознавание цифр 0-9. 9. для нечетных вариантов: по аналогии с приведенным примером реализовать распознавание первых 10 строчных букв греческого алфавита: . 10.Обучить полученную сеть. Результаты показать преподавателю в виде, аналогичном п. 3 задания. Сохранить обучающую последовательность и обученную сеть в файлы с произвольными именами. 11.Подготовить набор искаженных символов и проверить способность нейронных сетей к обобщению. Отчет должен содержать все файлы обучающих последовательностей и всех обученных сетей, полученные в п. 3 и п. 5 задания (эти файлы находятся в текущем каталоге, имеют текстовый формат и расширения .pat и .net соответственно). Контрольные вопросы Контрольные вопросы представлены в виде теста (см. приложение 2). 2.2.2. Лабораторная работа №2. Решение задач автоматической классификации самоорганизующимися картами Кохонена Цель работы: Изучение способов решения задач автоматической классификации (кластеризации) с помощью самоорганизующихся карт Кохонена; приобретение практических навыков работы с пакетом моделирования SNNS для ИНС. Формируемые знания, умения и навыки: o Знания и умения по решению задач автоматической классификации (кластеризации) объектов с помощью нейронных сетей. o Навыки использования системы SNNS. Для выполнения работы необходимо знание общих сведений о ПЭВМ IBM PC AT и операционной системе Windows. Теоретическая часть. Общие положения по сетям Кохонена Сети Кохонена (Kohonen-Netze, self-organizing maps = SOM, Kohonen maps, Kohonen feature maps) или самоорганизующиеся карты предназначены для решения задач автоматической классификации, когда обучающая последовательность образов отсутствует. Соответственно невозможна и фиксация ошибки, на минимизации которой основаны алгоритмы обучения (например, алгоритм обратного распространения ошибки - Backpropagation). Сеть Кохонена - это двухслойная нейросеть, содержащая входной слой (слой входных нейронов) и слой Кохонена (слой активных нейронов, соревновательный слой). В силу отсутствия обучающей последовательности образов, для каждого из которых известна от учителя принадлежность к тому или иному классу образов, определение весов нейронов слоя Кохонена (Referenz - Codebook Vektoren) основано на использовании алгоритмов автоматической классификации (кластеризации или самообучения). На рис.2.37 приведен пример топологической карты сети Кохонена, содержащей входной слой и слой Кохонена. Нейроны входного слоя служат для ввода значений признаков распознаваемых образов. Активные нейроны слоя Кохонена предназначены для формирования областей (кластеров) различных классов образов. На этом рисунке показаны связи всех входных нейронов лишь с одним нейроном слоя Кохонена. Каждый нейрон слоя Кохонена соединен также с соседними нейронами. Рис. 2.37. Топологическая карта сети Кохонена. Поясним основной принцип работы сети Кохонена, используя следующие обозначения: wj = (wj1, wj2, …, wjn)T , j = 1,2,…,m (2.1) - вектор весовых коэффициентов j-го нейрона слоя Кохонена, x = (x1, x2, … , xn)T (2.2) - входной вектор или вектор значений признаков некоторого образца. На стадии обучения (точнее самообучения) сети входной вектор x попарно сравнивается со всеми векторами wj всех нейронов слоя Кохонена. Вводится некоторая функция близости (например, в виде евклидова расстояния). Активный нейрон с номером c слоя Кохонена, для которого значение функции близости d (x, wc) между входным вектором x, характеризующим некоторый образ, и вектором wc максимально, объявляется "победителем". При этом образ, характеризующийся вектором x, относится к классу, который представляется нейроном-"победителем". В результате осуществляется преобразование n-мерного входного пространства Rn на m-мерную сетку (слой Кохонена). Следует еще раз подчеркнуть, что это отображение реализуется в результате рекуррентной (итеративной) процедуры самообучения (unsupervised learning, nicht ueberwachtes Lernen). Отличительная особенность этого отображения - формирование кластеров (cluster) или классов. По завершении процесса самообучения на стадии реального использования сети Кохонена неизвестные входные образы относятся к одному из выявленных кластеров (классов). На стадии самообучения сети Кохонена осуществляется коррекция весового вектора не только нейрона-"победителя", но и весовых векторов остальных активных нейронов слоя Кохонена, однако естественно в существенно меньшей степени - в зависимости от удаления от нейрона"победителя". При этом форма и величина окрестности вокруг нейрона"победителя", весовые коэффициенты нейронов которой также корректируются, в процессе обучения изменяются. Сначала начинают с очень большой области - она, в частности, может включать все нейроны слоя Кохонена. Изменение весовых векторов осуществляется по правилу: wj(t+1) = wj(t) + (t) dcj (t) [x(t) - wj (t)], j=1,2,…,m (2.3) где wj(t) - значение j–го весового вектора на t-м шаге самообучения сети, dcj(t) - функция близости между нейронами слоя Кохонена (neighborhood Kernel) с номерами c и j и (t) - изменяемый во времени коэффициент коррекции. В качестве (t) обычно выбирается монотонно уменьшающаяся функция (0 < (t) < 1), т. е. алгоритм самообучения начинается сравнительно большими шагами адаптации и заканчивается относительно небольшими изменениями. Обратим внимание, что в соответствии с (2.3) изменение того или иного весового вектора wj пропорционально расстоянию между входным вектором x и этим весовым вектором wj. В качестве примера рассмотрим сеть Кохонена с одномерным слоем Кохонена (рис.2.38). На рис.2.38 отображено движение весовых векторов нейронов слоя Кохонена. К входному вектору x ближе всех расположен весовой вектор w5 для нейрона c=5. Этот весовой вектор изменяется соответственно наиболее сильно: он в большей степени приближается к входному вектору x. На втором месте по степени близости находятся весовые векторы w4 и w6. Изменение их - второе по силе (степени). Весовые векторы w3 и w7 также изменяются - однако в существенно меньшей степени. Нейроны 1, 2, 8 и 9 расположены вне окрестности вокруг нейрона"победителя" c=5, поэтому их весовые векторы оставляются без изменения после показа сети образца, характеризующегося вектором x. Рис.2.38. Сеть Кохонена с одномерным слоем Кохонена. Приведем примеры функций близости (применительно к двумерному слою Кохонена). При этом евклидово расстояние между нейронами i и j в двумерном пространстве равно: z ( k i1 k j1 )2 ( k i 2 k j2 )2 (2.4) где ki1 и ki2 - координаты по оси x и оси y нейрона i, kj1 и kj2 - аналогично для нейрона j. При этом можно использовать следующие функции близости: d Gauss ( z ) e z 2 d mexican hat ( z ) (1 z 2 ) e z (2.5) 2 cos(z 2), для z 1 d cos ( z ) 0 (2.6) (2.7) Как отмечено выше, изменение весовых векторов wj осуществляется в направлении входного вектора x, и эти изменения осуществляются многократно. В процессе самообучения варьируется как коэффициент коррекции , так и радиус d, задающий окрестность вокруг нейрона"победителя". В результате самообучения сети Кохонена весовые векторы нейронов слоя Кохонена равномерно распределяются во входном пространстве. В работе используется следующий набор образов для системы распознавания в режиме обучения без поощрения: SNNS pattern definition file V3.2 generated at Thu Apr 21 19:56:37 1994 No. of patterns : 8 No. of input units : 3 # Input pattern 1: 111 # Input pattern 2: -1 1 1 # Input pattern 3: 1 -1 1 # Input pattern 4: 1 1 -1 # Input pattern 5: -1 -1 1 # Input pattern 6: -1 1 -1 # Input pattern 7: 1 -1 -1 # Input pattern 8: -1 -1 -1 Эта простая последовательность образов отображает вершины гиперкуба с центром в начале координат. Эти вершины отображаются на двумерную плоскость размером 16x16 или 20х20. Заметьте, что в файле образов примеры содержат только входы, выход определяется самой нейросетью! Реализация карт Кохонена в SNNS Близость между нормализованным (т.е. имеющим единичную длину) входным вектором x = (xi) и весами нейронов w = (wij) в SNNS рассчитывается с помощью скалярного произведения: n Net j ( t ) x w j x i ( t ) w ij ( t ) (2.8) i 1 Вектор wc , наиболее близкий к x, имеет наибольшее скалярное произведение с x: Net c ( t ) max Net j ( t ) x w c (2.9) Изменение весов связей входного и соревновательного слоев вычисляется следующим образом: w ij ( t ) e j ( t ) ( x i ( t ) w ij ( t )) , при j N c w ij ( t ) 0 , при j N c (2.10) ( d j r ( t )) 2 где e j ( t ) h ( t ) e - функция Гаусса; dj - расстояние между wj и победителем wc; h(t) - вес адаптации в момент времени t (0 h( t ) 1) ; r(t) - радиус множества соседей Nc в момент времени t. Вес и радиус адаптации обычно уменьшаются на каждом шаге алгоритма обучения без поощрения или самообучения для обеспечения его сходимости: h( t 1) h( t ) mult _ H ; r( t 1) r( t ) mult _ R , где mult_H и mult_R - факторы уменьшения, задаваемые из диапазона (0, 1]. Работа с программой самоорганизующихся карт Кохонена Создание самоорганизующихся карт Кохонена. В системе SNNS самоорганизующиеся карты (в отличие от сетей других типов) нельзя создавать или модифицировать при помощи встроенного графического редактора сетей. Это объясняется тем, что первоначально SNNS не был предназначен для моделирования нейронов, геометрическое положение которых несет семантическую информацию. Создание новых карт должно осуществляться с использованием инструмента BIGNET (Kohonen) , расположенного на панели менеджера SNNS. Для запуска SNNS следует сначала запустить служебную программу X-Win32, а затем файл «snns.bat» (см. лабораторную работу №1). После запуска SNNS, выберите из выпадающего списка BIGNET на панели менеджера строку (опцию) Kohonen, при этом появится диалоговое окно «Карта Кохонена» (рис.2.39): Рис.2.39. Панель создания сети Кохонена. Здесь в поле Components необходимо задать число входных нейронов сети, совпадающее с размерностью исследуемых образов; в полях X-size и Y-size соответственно горизонтальный и вертикальный размер плоского соревновательного слоя. Карты Кохонена могут иметь и объемный соревновательный слой, однако в SNNS реализованы только двумерные SOM. В поле Components введите число входных нейронов 3, соревновательный слой Кохонена задайте 20 х 20. Нажмите Create net, затем Done. Нажмите кнопку Display на панели менеджера, в открывшемся окне редактора появится графическое изображение SOM. Для удобства визуализации результатов отключите надписи сверху и снизу нейронов, а также уменьшите масштаб сетки прорисовки нейронов. Для этого в меню Setup окна редактора установите параметр grid width в 16 и отожмите утопленные кнопки ON опций units top и bottom (рис.2.40). Рис.2.40. Панель экранных настроек. Выбор функции обновления Щелкните кнопку SEL_FUNC как показано на рис.2.41: Рис.2.41. Кнопка функции обновления. В SNNS также реализована специальная функция обновления (Kohonen_Order). Нужно использовать именно эту функцию, так как только она обеспечивает особый порядок элементов в соревновательном слое. Если выбрана другая функция обновления, то могут выдаваться сообщения вида "Error: Dead units in the network". Выбор функции инициализации. Щелкните последнюю кнопку SEL_FUNC. Прежде, чем SOM могут быть обучены, их веса надо проинициализировать, используя функцию инициализации Kohonen_Weight. Эта функция сначала инициализирует все веса со случайными значениями в указанных границах, затем нормализует все связи. Два используемых параметра, которые представляют минимум (a) и максимум (b) диапазона, вне которого начальные значения для второго i - передача весов к модулю i Kohonen уровня инициализирован как нормализованный вектор (длина 1) выведенный наугад из части гипер тела, используется согласно табл.2.3. Таблица 2.3 Влияние минимума и максимума на инициализацию весовых векторов для SOM. min (a) a0 a0 a<0 a<0 max (b) b0 b<0 b0 b<0 векторы в ... положительном секторе целой гиперсфере целой гиперсфере отрицательном секторе Далее активируйте панель управления SNNS. Выберите функцию обучения - Kohonen, функцию обновления - Kohonen_Order и функцию инициализации - Kohonen_Weights. До того, как начать тренировку SOM, веса нейронов соревновательного слоя должны быть инициализированы с помощью функции Kohonen_Weights. Эта функция сначала инициализирует все веса случайными значениями из заданного диапазона. Затем она нормализует все связи между нейронами. Задайте диапазон весов [-1,1] и нажмите кнопку INIT в панели управления. Выбор алгоритма обучения Для сетей с прямым распространением информации (feedforward) по умолчанию применяется Std_Backpropagation (стандартный алгоритм обратного распространения ошибки). Для выбора других алгоритмов обучения просто щелкните SEL_FUNC и выберите алгоритм, который вы хотите использовать. Для примера Som_cube используйте kohonen (алгоритм обучения Кохонена). Каждая обучающая функция требует установки различных параметров: Алгоритм обучения Кохонена Обучение SOM в SNNS можно выполнить на основе алгоритма обучения Кохонена. Для этого его следует выбрать из списка функций в панели управления. Этому алгоритму необходимо передать пять параметров: Высота (вес) адаптации (высота обучения). Начальный вес адаптации (вес обучения) h(0). Он определяет общую способность сети к адаптации; может назначаться из диапазона (0,1). Для работы установим 0,85. Радиус адаптации (радиус обучения). Начальный радиус адаптации (радиус обучения) r(0) задает множество соседей победившего нейрона, весовые векторы которых адаптируются. Значение может выбираться от 1 до размера карты. Фактор уменьшения веса адаптации mult_H. Высота адаптации уменьшается монотонно, причем это уменьшение управляется фактором уменьшения mult_H:= h(t) · mult_H. Фактор уменьшения радиуса адаптации mult_R. Радиус адаптации также уменьшается после каждого шага обучения сети, причем это уменьшение управляется фактором уменьшения mult_R: r(t+1) := r(t) · mult_R. Горизонтальный размер. Внутреннее представление сети не позволяет задать двухмерную сеть, поэтому алгоритму обучения следует задать горизонтальный размер в числе нейронов (у нас 20). Факторы уменьшения должны задаваться из диапазона (0,1]. Значение “1” сохраняет параметры адаптации на неизменном уровне. Замечание: После завершения каждого цикла обучения параметры высота адаптации и радиус адаптации модифицируются в панели управления, чтобы отразить их новые значения. Таким образом, когда обучение продолжается, оно начинается с той точки, где было остановлено в предшествующий раз. И mult_H, и mult_R должны находиться в диапазоне (0,1]. Единичное значение сохраняет значения адаптации на постоянном уровне. После того, как все параметры установлены, можно начинать обучение сети. Обучение производится за определенное количество циклов (CYCLES). Введите номер, например 200. В каждом цикле тренировок используются все обучающие образы. Иногда бывает предпочтительно выбрать образы обучающей последовательности (тренировочного выбора) в случайном порядке: для этого нажмите SHUFFLE. В панели управления SNNS эти параметры заносятся в пять горизонтальных полей ввода, расположенных справа от надписи LEARN (рис.2.42): Рис.2.42. Панель управления SNNS. Занесите в эти поля значения, как показано выше. Поле CYCLES (число эпох обучения ) установите в 10. Обучение сети Далее посредством кнопки FILE на панели менеджера вызовите диалоговое окно работы с файлами; утопите кнопку PAT и в директории examples дважды щелкните мышью на файле som_cube. Для загрузки файла образцов som_cube.pat нажмите LOAD, затем DONE. Примите к сведению, что SNNS распознает файлы только в том случае, если их расширения записаны в нижнем регистре. Многие оболочки DOS при копировании файлов записывают их имена большими буквами. Все обучение и тестирование производится через опцию CONTROL. Рассмотрим наиболее важные возможности одну за другой. Форма состоит из двух частей. Верхняя часть управляет определениями параметров процесса обучения, а три нижние строки – это бланк, который должен быть заполнен для определения интенсивности обучения и т.д., а также диапазон, в котором веса будут случайно распределены при инициализации сети. По умолчанию параметры обучения установлены в (0.2 0 0 0 0), а веса по умолчанию – между 1 и –1 (1.0 –1.0 0 0 0). Для запуска процесса обучения сети нажмите кнопку ALL на панели управления и STOP для его остановки. Предварительно можно утопить переключатель SHUFFLE для предъявления сети входных образцов в случайном порядке. Текущая ошибка также показывается на экране и может быть использована в любой программе рисования. После прохождения всех эпох обучения кнопкой TEST можно предъявлять сети образцы, наблюдая в графическом окне активацию соревновательного слоя. По умолчанию для нейронов этого слоя задана функция активации Act_Euclid (рис.2.43): Рис.2.43. Панель с функцией активации Act_Euclid. Она копирует евклидово расстояние между входным вектором сети и вектором весов связей входных нейронов с нейроном соревновательного слоя на выход этого нейрона. Это основной режим функционирования карты Кохонена. При правильно обученной сети в соревновательном слое должны сформироваться компактные непересекающиеся группы нейронов, веса связей которых близки различным подмножествам входных векторов. Это и позволяет карте кластеризировать множество входных образов на непересекающиеся подмножества (кластеры, группы). На период обучения сети нейронам соревновательного слоя можно назначить другую функцию активации Act_Component (рис.2.44): Рис.2.44. Панель с функцией активации Act_Component. Она просто записывает вес определенной связи нейрона в его выходную переменную. Для назначения этой функции необходимо проделать следующее: в окне Display выделить нейроны соревновательноого слоя (мышью при нажатой левой кнопке), выделенные нейроны окрашиваются в желтый цвет; не выводя указатель мыши из окна, нажать и удерживать левую кнопку при нажатой клавише Ctrl, в позиции указателя возникнет контекстное меню; из меню выбрать пункт Units. повторять п.2, последовательно выбирая из новых меню пункты: Set, Function, Activation Func, Act_Component. для снятия выделения нейронов щелкнуть правой кнопкой мыши на свободном месте окна Display. Выбор связи, вес которой визуализируется картой, осуществляется при помощи инструмента Kohonen, который вызывается из панели менеджера SNNS (рис.2.45): Рис.2.45. Панель выбора компонента входного вектора. В поле LAYER вводится номер компонента входного вектора (номер нейрона), веса связей которого с соревновательным слоем показываются картой. Этот режим функционирования карты Кохонена можно назвать отладочным, поскольку он используется лишь на этапе обучения сети: в процессе обучения веса связей изменяются сначала значительно, затем все менее заметно. Этот процесс можно визуально контролировать. О корректности работы сети невозможно судить только по тренировочным данным. Поэтому целесообразно загружать тестовый набор, чтобы убедиться в том, что сеть не перетренирована и проводит обобщения корректно. Для нашего примера тестовый пример не приведен. Возможно иметь до 5 активных тестовых наборов одновременно. Две кнопки USE на форме позволяют выбрать тестовые наборы для обучения и контроля. Верхняя кнопка соответствует обучающему набору, а нижняя – контролирующему. Если ввести ненулевое значение в поле VALID, то каждые N циклов (N – введенное значение) будет проводиться проверка на тестовом наборе и среднеквадратичная ошибка будет нарисована на графике красным цветом (рис.2.46). Рис.2.46. Пример заполнения параметров контрольной панели. Не забудьте поставить значение циклов от 100 и выше! Можно пройти также по всем образам в наборе и рассчитать выходную активацию без изменения весов связей. Для этого надо щелкать по кнопке TEST. Для контроля обучения карт Кохонена в SNNS предусмотрен еще один инструмент: можно наблюдать победившие нейроны. Для этого в меню Setup окна Display в выпадающем меню SHOW справа от опции Units top необходимо выбрать пункт winner; затем утопить кнопку ON. Далее нажмите кнопку WINNER в панели Kohonen. Над каждым победившим нейроном появится номер входного образца, при предъявлении которого победил данный нейрон. Наблюдая множество нейронов-победителей, можно оценить распределение кластеров по карте (рис.2.47). Рис.2.47. Пример распространения кластеров по карте. Рабочее задание 1. Ознакомиться с описанием лабораторной работы. 2. Изучить действия, приведенные в описании, и последовательно выполнить все шаги, описанные в разделе 2.3.3. В результате у Вас получится обученная карта Кохонена, способная решать задачу автоматической классификации (кластеризации). 3. Создать обучающую последовательность нормализованных векторов и карту Кохонена: для четных вариантов: размерность входного вектора 4, размер конкурирующего слоя подобрать, исходя из требования непересечения кластеров и минимального числа нейронов в слое; для нечетных вариантов: размерность входного вектора 5, конкурирующий слой - 30 х 30 нейронов. 4. Обучить полученную сеть. Сохранить в файлах обучающую после– довательность и обученную сеть. 5. Подготовить произвольные ненормализованные входные векторы и проверить качество обучения карты Кохонена. Отчет должен содержать все файлы обучающих последовательностей и всех обученных сетей, полученные в п. 3 и п. 5 задания (эти файлы находятся в текущем каталоге, имеют текстовый формат и расширения .pat и .net соответственно), а также параметры алгоритма обучения. Контрольные вопросы Контрольные вопросы представлены в виде теста (см. приложение 2). 2.2.3. Лабораторная работа №3. Распознавание образов сетями Хопфилда Цель работы: Реализация ассоциативной памяти средствами ИНС на примере сетей Хопфилда; приобретение практических навыков работы с пакетом моделирования ИНС SNNS. Формируемые знания, умения и навыки: 1. Основные знания по сетям Хопфилда и областям их применения; 2. Знания и умения по использованию сетей Хопфилда для распознавания зашумленных изображений; 3. Навыки использования системы SNNS для распознавания искаженных образов сетями Хопфилда. Теоретическая часть. Общие сведения о сетях Хопфилда Американским исследователем Хопфилдом в 80-х годах предложен специальный тип нейросетей, названных в его честь. Они открыли новое направление в теории и практике нейросетей. До сих пор рассматривались лишь сети с прямыми связями (feedforward networks или FF - nets). Сети Хопфилда являются рекуррентными сетями или сетями с обратными связями (feedback networks). Ниже рассматриваются основы их построения. Сети Хопфилда обладают следующими свойствами: 1. симметрия дуг: сети содержат n нейронов, соединенных друг с другом. Каждая дуга (соединение) характеризуется весом wij , причем имеет место: i, j N : i j : 1 wij , где N – множество нейронов: N = {1, 2, … , n}, 2. симметрия весов: вес соединения нейрона ni с нейроном nj равен весу обратного соединения: wij = wji; wii = 0 (2.11) 3. бинарные входы: сеть Хопфилда обрабатывает бинарные входы {0,1} или {-1,1}. В литературе встречаются модели сетей как со значениями 0 и 1, так и –1, 1. Для структуры сети это безразлично. Однако формулы для распознавания образов (изображений) при использовании значений –1 и 1 для входов и выходов нейронов сети Хопфилда получаются нагляднее, поэтому эти значения и предполагаются ниже. Определение. Бинарная сеть Хопфилда определяется симметричной матрицей с нулевыми диагональными элементами, вектором Т порогов нейронов и знаковой функцией активации или выхода нейронов. Каждый вектор o с компонентами –1 или 1, удовлетворяющий уравнению o = S(wo – T), называется образом для сети Хопфилда. (2.12) Принцип функционирования сетей Хопфилда отличается от ранее рассмотренных сетей. На так называемой recall-стадии на входы сети подается некоторый образ. Он оставляется на входах сети до тех пор, пока не завершатся изменения состояний сети. В этом случае говорят о сходимости сети. Наглядно это можно представить следующим образом. В начале сеть находится на высоком энергетическом уровне, из которого возможны переходы в различные состояния. Затем энергетический уровень сети уменьшается до тех пор, пока не достигается некоторое конечное состояние. Ниже мы рассмотрим, как обучаются сети Хопфилда, и как считывается (извлекается) запомненная в них информация. Класс сетей Хопфилда содержит только один слой нейронов, причем каждый нейрон соединен с остальными. Обратные связи с выхода нейрона на его же вход отсутствуют. На рис.2.48 приведен конкретный пример сети Хопфилда из 4-х нейронов. in1 w41 w w31 21 w12 w32 in2 in3 in4 1 w42 w43 w34 w23 w24 w13 w14 2 3 4 out1 out2 out3 out4 Рис.2.48. Сеть Хопфилда из 4 нейронов. Алгоритм Хопфилда Обозначим через xs образ s-го класса, а через xsi – i-ю составляющую вектора xs. При этом алгоритм Хопфилда может быть описан следующим образом: 1. Расчет весов k 1 x x ,i j , wij s 0 si sj 0 ,i j где k – число классов образов; (2.13) 2. инициализация сети путем ввода : oi(0) = xi ,1 i n , (2.14) где oi(0) – выход i - го нейрона в начальный (нулевой) момент времени. 3. итерационное правило: Repeat n1 oi (t 1) S h wij o j (t ) , i 0 1 i n : oi (t 1) oi (t ) Until (2.15) где oi(t) – выход i – го нейрона в момент времени t. Соотношения (3.4), (3.5) представим в векторной форме: o(t+1) = S(wo(t)), t=1,2,… o(0) = x(0), где x – входной вектор, w – симметричная матрица, S – вектор-функция активации или выхода нейронов. Взвешенная сумма входов j – го нейрона сети Хопфилда равна: z j net j wij oi . (2.16) (2.17) (2.18) i Функция активации или выхода имеет вид: 1 o j S ( zi ) 1 для zj 0 для zj 0 (2.19) Таким образом, алгоритм Хопфилда может быть сформулирован следующим образом: Пусть имеется некоторый образ, который следует запомнить в сети Хопфилда, тогда веса искомой сети могут быть рассчитаны, т.е. процесс обучения исключается. Если этот образ характеризуется n – мерным вектором x = (x1,… , xn)T, то веса соединений определяются по формулам: xi x j wij 0 для i j для i j (2.20) В этом случае сеть Хопфилда, характеризуемая матрицей w и порогами Ti = 0, i=1, 2, … , n, запоминает предъявленный образ. Веса wij можно умножить на некоторый положительный коэффициент (например, 1/n). Использование такого коэффициента особенно целесообразно в тех случаях, когда запоминаемые образы характеризуются большим числом признаков (например, видеоизображение отображается большим числом пикселов). Пример 2.1. Имеется изображение из 4 – х пикселов: +1 -1 -1 +1 Соответствующий вектор (образ) имеет вид: x = (1,-1,-1,1)T . Стационарная сеть Хопфилда содержит при этом 4 элемента (нейрона). Ее весовая матрица рассчитывается на основе (2.20) и принимает вид: 0 1 1 1 1 1 1 0 w 1 1 0 1 1 1 1 0 При этом легко можно убедиться в справедливости равенства x = S(wx). Подадим на входы сети искаженный образ: 1 1 -1 1 Можно легко установить, что сети потребуется лишь одна итерация, чтобы выдать корректное изображение. Если имеется не много изображений (т.е. k мало), то сеть с матрицей (2.13) запоминает k образов, полагая, естественно, что изображения не сильно коррелированы. Если же число k велико, то весовая матрица оказывается недостаточной для запоминания всех k изображений. С ростом k уменьшается вероятность воспроизведения образа. Приведем утверждение относительно числа k запоминаемых образов при использовании сети Хопфилда из n нейронов. Пусть k – число образов, а n – число признаков (пикселов), и образы, подлежащие запоминанию, некоррелированы, т.е. для двух изображений j и s сумма x ji xsi (2.21) i мала. При этом при подаче на вход сети с весовой матрицей (13) одного образа каждый пиксел корректно воспроизводится с вероятностью p 0.99 при выполнении условия: k 0.15n n (2.22) Пример 2.2. Образ характеризуется тысячью признаками (n = 1000). В этом случае бинарная сеть Хопфилда в состоянии запомнить и корректно воспроизвести до 150 образов (например, видеоизображений). В работе сети Хопфилда можно выделить следующие три стадии: 1. Инициализация сети: на этой стадии рассчитываются все веса сети для некоторого множества образов. Подчеркнем еще раз: эти веса не определяются на основе рекуррентной процедуры, используемой во многих алгоритмах обучения с поощрением, 2. Ввод нового образа: нейроны сети устанавливаются в соответствующее начальное состояние по алгоритму (2.13) – (2.17), 3. Затухающий колебательный процесс: путем использования итеративной процедуры рассчитывается последовательность состояний сети до тех пор, пока не будет достигнуто стабильное состояние, т.е. oj(t+1) = oj(t), j = 1, 2, … , n, (2.23) Или: в качестве выходов сети используются значения (2.23), при которых сеть находится в динамическом равновесии: o = S(wo), где o – выходной вектор сети. Выход бинарной сети Хопфида , содержащей n нейронов, может быть отображен бинарным вектором o состояния сети. Общее число таких состояний – 2n (вершины n – мерного гиперкуба). При вводе нового входного вектора состояние сети изменяется от одной вершины к другой до достижения сетью устойчивого состояния. Из теории систем с обратными связями известно: для обеспечения устойчивости системы ее изменения с течением времени должны уменьшатся. В противном случае возникают незатухающие колебания. Для таких сетей Коэном (Cohen) и Гроссбергом (Grossberg) (1983) доказана теорема, формулирующая достаточные условия устойчивости сетей с обратными связями: Рекуррентные сети устойчивы, если весовая матрица w = (wij) симметрична, а на ее главной гиагонали – нули: 1. wij = wji для всех i j; 2. wii = 0 для всех i. Обратим внимание, что условия данной теоремы достаточны, но не необходимы. Для рекуррентных сетей отсюда следует, что возможны устойчивые сети, не удовлетворяющие приведенному критерию. Пример 2.3. Дана сеть из трех нейронов: 1 1 1 Рис.2.49. Сеть Хопфилда с тремя нейронами и весами, равными 1. Соответствующая весовая матрица имеет вид: 0 1 1 w 1 0 1 1 1 0 В качестве функции активации или выхода нейронов выберем знаковую функцию (sign) с нулевыми порогами. Пусть на вход такой сети подается вектор: x = (1,-1,1)T. Рассчитаем для него выходной вектор сети. При этом в соответствии с (2.13) – (2.17) получим: o(1) = S(wx) = (-1,1,-1)T; o(2) = S(wo(1)) = (-1,-1,-1)T; o(3) = S(wo(2)) = (-1,-1,-1)T. Т.к. o(3) = o(2), то после 3-го шага выходы сети не изменятся, т.е. выходной вектор определяется сетью после 3-го шага. Основная область применения сетей Хопфилда – распознавание образов. Например, каждое черно-белое изображение, представляемое пикселами, можно отобразить вектором x = (x1, … ,xn)T, где xi для i – го пиксела равен 1, если он черный, и xi = -1, если – белый. При подаче на входы обученной сети Хопфилда искаженного изображения сеть после некоторого числа итераций выдает на выходы корректное изображение. Работа с программой. Сети Хопфилда в SNNS На рис.2.50 представлено окно графического редактора SNNS с сетью Хопфилда из трех нейронов. В связи с особенностями реализации рекуррентных сетей в SNNS, каждый нейрон имеет обратную связь с самим собой, хотя это расходится с теорией. На эту особенность не следует обращать внимания. Рис.2.50. Графический редактор. Для создания сети Хопфилда из меню BIGNET менеджера выберите опцию Hopfield, в появившемся окне задайте размер сетки нейронов по горизонтали и вертикали, затем нажмите ENTER, CREATE NET, DONE. На рис.2.51 приведен пример сети из 36 нейронов в виде квадратной матрицы 6 x 6. Рис.2.51. Пример сети. Поскольку синаптические веса сети Хопфилда рассчитываются на основе входных образов за один шаг в отличие от классических алгоритмов обучения, требующих многократного предъявления образов сети. В SNNS этап обучения совмещен с инициализацией сети, поэтому в панели управления необходимо задать лишь функции инициализации и обновления. Функция обучения (Learning func.) для данной сети в SNNS не используется. SNNS поддерживает бинарные сети Хопфилда с двумя алгоритмами функционирования: Стандартная сеть Хопфилда с обучением по правилу Хебба (функция инициализации Hebb, первый параметр – смещение (BIAS) входных нейронов, второй – смещение выходных нейронов; функция обновления – Hopfield_Synchronous, параметров нет (рис.2.52).); Сеть Хопфилда, хранящая образы с фиксированным числом единиц (функция инициализации – Hebb_Fixed_Act, первый параметр – число единиц на образ, второй – вероятная степень искажения образов в процентах; функция обновления – Hopfield_Fixed_Act, единственный параметр – число единиц в образе). Рис.2.52. Формат файла входных образов. Нейроны в сети Хопфилда являются одновременно входными и выходными, однако в файле *.pat необходимо формально задать битовые карты входа и выхода для каждого образа (они должны совпадать). Рабочее задание 1. Ознакомиться с описанием лабораторной работы. 2. Создать сеть Хопфилда из 40 нейронов: для четных вариантов: стандартная сеть Хопфилда; определить максимальное количество образов, которое сеть способна запомнить и корректно воспроизводить при условии незначительных искажений тестовых образов; для нечетных вариантов: сеть Хопфилда для образов с фиксированным числом единиц; количество хранимых образов - 6. 3. Продемонстрировать работу сети на тестовых (искаженных) образах. Отчет должен содержать: 1. файлы обучающих и тестовых образов, обученную сеть; 2. выводы по проделанной работе, в частности, проверку условия (2.22), предельную степень искажения образов (2.21), при которой сеть еще способна правильно их распознать. Контрольные вопросы Контрольные вопросы представлены в виде теста (см. приложение 2). 2.2.4. Лабораторная работа №4. Классификация образов сетями ART Цель работы: Изучение основ моделирования искусственных нейронных сетей теории адаптивного резонанса (ART) с помощью программного пакета SNNS на примере моделирования системы распознавания символов. Формируемые знания, умения и навыки: лабораторная работа дает студентам начальное представление о функционировании систем распознавания символов, реализованных с использованием технологии нейронных сетей. представленная работа дает студентам практические навыки использования системы SNNS. Для выполнения лабораторной работы необходимо знание общих сведений о работе с ПЭВМ IBM PC AT в операционной среде Windows. Желательно также перед выполнением лабораторной работы пройти «Вводный курс» и «Продвинутый курс» обучения по ИНС. Теоретическая часть.Классификация образов ART – сетями. Задача классификации образов состоит в указании принадлежности входного образа (например, сигнала или рукописного символа), представленного вектором атрибутов, одному или нескольким классам. К известным приложениям относятся распознавание букв, распознавание речи, классификация сигнала электрокардиограммы, классификация клеток крови и т.д. Сети ART (Adaptive Resonance Theory) образуют целый класс различных нейросетей, предложенных Карпентером (Carpenter) и Гроссбергом (Grossberg) (Бостонский университет, 1987-1991). В реальной практике часто данные, используемые для обучения или самообучения сети, не стабильны. Представьте себе, например, обычную сеть с прямыми связями, обучаемую с помощью алгоритма с обратным распространением ошибки (backpropagation of error). Каково ее поведение, если на вход этой обученной нейросети подать образ такого класса, который не был представлен в обучающей последовательности или в множестве образов, подлежащих автоматической классификации или кластеризации (обучение сети без поощрения или самообучение сети, unsupervised learning). Здесь мы сталкиваемся с двумя противоречивыми требованиями или свойствами нейросети. С одной стороны очень важно, чтобы она была способна выявлять (обнаруживать) образы новых классов, ранее не представленных сети. Это свойство пластичности. С другой же стороны изученные классы образов должны сохраняться – свойство устойчивости нейросетей. Эти два свойства – пластичности и стабильности в известной мере противоречивы – дилемма пластичности-стабильности. Сети ART и были разработаны для разрешения этой дилеммы, а именно: установление новых ассоциаций (классов) нейронной сетью без забывания старых ассоциаций (классов). В работе рассматриваются следующие сети: ART-1: для бинарных входных векторов, когда признаки распознаваемых образов принимают два значения 1 или 0; ART-2: расширение ART-1-сетей на непрерывные входные векторы; ART-2a: оптимальная версия ART-2-сетей, отличающаяся повышенной скоростью сходимости; Принцип работы ART-сетей сравнительно прост. При вводе значений признаков некоторого образа ART-1-сеть пытается сопоставить ему некоторый класс из числа уже изученных. Если такой класс удается найти, то производится сравнительно небольшая модификация прототипа ( стереотипа, типичного представителя ) этого класса для того, чтобы он хорошо отображал и новый образ. В этом случае классификация образа на этом заканчивается. Если же такой класс найти не удается, то образуется (вводится) новый класс. При этом предъявленный образ несколько модифицируется и используется затем в качестве прототипа (стереотипа, типичного представителя) для нового класса. При этом уже изученные классы не изменяются. На рис.2.53 показаны основные компоненты ART-1-сетей на примере сети с четырьмя нейронами в слое сравнения и тремя нейронами в слое распознавания: 1) 2) 3) 4) слой сравнения (Vergleichsschicht, comparison layer); слой распознавания (Erkennungsschicht, recognition layer); весовые матрицы; коэффициенты усиления ( ключи ) и reset. Рис.2.53. Основные компоненты ART-1 сетей. Обратим внимание, что обе весовые матрицы Wij и Wji отличаются обозначениями индексов: индекс i относится к элементу (входу) слоя сравнения F1, а индекс j – к нейрону (классу) слоя распознавания F2. Слой сравнения (comparison layer) Он осуществляет сравнение выхода слоя распознавания с текущим входом (входным образом). Для этого входной вектор I (input) преобразуется сначала в вектор S, который затем передается на весовую матрицу действительных чисел (bottom-up matrix). В начале расчета коэффициент усиления (gain) g1 равен 1. На выходе слоя распознавания рассчитывается так называемый ожидаемый вектор V или типичный представитель (прототип, стереотип) для класса образов, к которому отнесен вектор S. В процессе обучения (точнее самообучения) сети вектор S определяется на основе правила: 1, еслиI i vi I i g1 vi g1 1 si 0, в _ противном _ случае (2.24) или: i-я компонента вектора S принимает значение единица, если по крайней мере две из трех следующих переменных приняли значение 1: коэффициент усиления g1 (для всех нейронов одинаков); i-я компонента Ii входного вектора I; i-я компонента vi ожидаемого вектора V (взвешенная сумма выходов слоя распознавания). Это правило кратко можно обозначить «2 из 3». Пример 2.4. Дано: I= 1 V= 1 0 1 1 1 0 0 1 0 0 0 1 1 0 0 1 0 0 0 При этом следует: S= 1 0 1 0 0 0 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 0 1 0 0 0 При этом получаем: S= 1 1 1 0 1 0 1 0 1 0 g1=0 Пример 2.5. Дано: I= 1 V= 1 0 1 g1=1 Определим вектор S при предъявлении сети первого образа, когда ожидаемый вектор нулевой: V=(0, 0, …, 0): I= V= 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 1 0 1 0 g1=1 S= т. е. вектор S на первом шаге обучения сети совпадает со входным вектором: S=I. Слой распознавания Он сопоставляет каждому входному вектору соответствующий класс. Если для входного вектора не удается найти достаточно близкий класс из числа уже выявленных, то открывается (образуется) новый класс. Класс, представляемый j-м нейроном слоя распознавания и наиболее близкий ко входному вектору I или вектору S, определяется следующим образом: m t j max max k t k SWk s i w ik i 1 (2.25) где SWk – cкалярное произведение векторов S и Wk. При этом сработает нейрон j слоя распознавания, действительный весовой вектор Wj=(w1j, w2j,…, wmj) которого имеет наибольшее сходство с вектором S. Компоненты вектора U на выходе слоя распознавания определяются при этом следующим образом: 1, если _ t j SW j max uj 0, в _ противном _ случае (2.26) то есть uj=1, если скалярное произведение весового вектора Wj=(w1j, w2j,…, wmj) и вектора S=(s1,s2,…,sm) максимально. Весовые матрицы В ART-1-сетях используются две весовые матрицы: 1) Действительная матрица Wij (bottom-up matrix). Она служит для расчета степени сходства в фазе распознавания; 2) Бинарная матрица Wji (top-down matrix): она предназначена для перепроверки степени корректности классификации входного образа с помощью матрицы Wij (bottom-up matrix). Коэффициенты усиления и reset В ART-1-сетях используются два коэффициента усиления (gain) g1 и g2. Строго они не выполняют функции усиления, а используются лишь в качестве ключей для синхронизации работы нейросети. g1 принимает значение 1, если по меньшей мере одна составляющая входа I имеет значение 1 и одновременно ни один нейрон слоя распознавания не находится в состоянии 1. g2 реализует логическое ИЛИ для входного вектора. g2=1, если по меньшей мере одна составляющая входного вектора равна 1: Для актуального нейрона («победителя») слоя распознавания resetсоставляющая равна 1 (то есть функция reset активируется), если различие входного вектора I и вектора S превышает некоторый порог (параметр толерантности). Принцип работы В ART-1-сетях можно выделить следующие пять фаз внутренней обработки информации: 1) Инициализация сети: в начале инициализируются обе весовые матрицы (bottom-up matrix и top-down matrix), а также параметр толерантности; 2) Распознавание (recognition): на этой фазе для входного вектора I или для вектора S, определенного на основе вектора I, определяется наиболее близкий класс; 3) Сравнение (comparison): в фазе сравнения ожидаемый вектор V сравнивается со входным вектором I или вектором S. При слишком малом совпадении векторов V и S осуществляется повторное распознавание; 4) Поиск (search): на этой стадии производится поиск альтернативного класса или же при необходимости открывается новый класс; 5) Адаптация весов (training): на этой стадии осуществляется модификация обеих весовых матриц. Поток информации в сети Представим еще раз кратко поток информации внутри ART-1нейросети. Для каждого входа I ART-1-сеть ищет адэкватный класс образов в слое раcпознавания F2. Для этой цели на входе I в слое сравнения F1 генерируется образ долговременной памяти или ДВП-образ (short term memory, STM-Muster) S. При этом одновременно функция Reset отключается. Вектор S трансформируется затем в вектор T, который в свою очередь активирует некоторый класс J в слое F2. Слой распознавания F2 генерирует затем вектор U, который преобразуется в так называемый ожидаемый вектор V или иначе в вектор V, ожидаемый для класса J. Если степень совпадения между V и входом ниже установленного порога, то генерируется новый вектор S. В этом случае активируется функция Reset, а выявленный ранее класс J в слое распознавания F2 забывается, ибо введенный образ не может быть отнесен к этому классу. Затем осуществляется новый поиск подходящего класса для I. Этот поиск заканчивается тогда, когда в слое сравнения не активируется функция Reset или же слой распознавания F2 дополняется еще одним классом. ART-2 и ART-2a - сети. Их главное отличие от ART-1-сетей: они обрабатывают не бинарные, а действительные входные векторы. ART-2aсеть представляет собой «более быстрый» вариант сети ART-2. В силу этого многими авторами ART-2a-сети рекомендуются для решения сложных задач. Сравнительными исследованиями установлено, что качество классификации (образование классов) сетями ART-2 и ART-2a почти во всех случаях идентично. Скорость же обучения (сходимости) при использовании ART-2a-сетей значительно выше по сравнению с ART-2сетями. Сети адаптивного резонанса в представлении SNNS Эта глава посвящена описанию модели сети ART-1 в представлении SNNS. Структура сети представлена на рис.2.54. Рис.2.54. Структура ART-1-сети. Тонкие стрелки представляют собой связи между элементами. Толстые стрелки идущие от уровня к элементу говорят о том, что каждый элемент данного уровня связан с текущим элементом. Аналогично толстые стрелки, идущие от элемента к уровню говорят о связи текущего элемента со всеми элементами в данном слое. Две большие стрелки в середине рисунка характеризуют собой полносвязное соединение между уровнями сравнения и распознавания, и между уровнями задержки и сравнения соответственно. Входной уровень F0 (на рисунке помечен как inp) состоит из N входных элементов, каждый из которых имеет соответствующий элемент в слое сравнения F1 (на рисунке помечен как cmp). M элементов слоя F2 разделены на три уровня, поэтому каждый элемент в этом слое состоит как бы из трех частей : элемента распознавания (rec), элемента задержки (del) и элемента Reset (rst). Эти три части одного элемента выполняют разные функции. Роль элемента распознавания понятна из теории, элемент задержки необходим для корректной синхронизации сети. Это существенно только для алгоритма ART-1, используемого в SNNS. Кроме того элемент задержки в состоянии активации показывает “победителя” слоя F2. Работа Reset-элемента заключается в переключении элемента слоя F2 из активного состояния в обычное. Наконец существуют несколько специальных элементов. Элемент cl устанавливается в активное состояние в случае, когда входной образец правильно классифицирован. Активированное состояние элемента nc говорит о том, что образец классификации не подлежит. Роль элементов соревнования g1 и g2 ясна из теории. Функция элементов Reset объяснена выше. В представлении SNNS используются три элемента Reset : элемент ri (Reset для входного уровня), rc (Reset для уровня сравнения) и rg (общий Reset). Задача распознавания символов В данной работе Вы построите сеть, которая сможет распознавать заглавные буквы латинского алфавита («A»… «Z»), нарисованные в матрице 5х7 элементов. Безусловно, эта задача несколько искусственна (для реальных систем разрешающая способность матрицы должна быть хотя бы на порядок больше), но ее решение позволит вам освоить основы пользовательского интерфейса инструментальной системы SNNS, а также понять основы функционирования некоторых систем распознавания символов. Файл letters.pat содержит 26 двоичных входных образцов с величинами 0 и 1, представляющих заглавные буквы из матрицы 5x7. Набор обучающих образов для системы распознавания символов: SNNS pattern definition file V3.2 generated at Mon Apr 25 17:54:03 1994 No. of patterns : 26 No. of input units : 35 # Input pattern 1: 01110100011000111111100011000110001 # Input pattern 2: 11110100011000111110100011000111110 # Input pattern 3: 01110100011000010000100001000101110 # Input pattern 4: 11110100011000110001100011000111110 # Input pattern 5: 11111100001000011110100001000011111 # Input pattern 6: 11111100001000011110100001000010000 # Input pattern 7: 01110100011000010111100011000101110 # Input pattern 8: 10001100011000111111100011000110001 # Input pattern 9: 01110001000010000100001000010001110 # Input pattern 10: 11111000010000100001000011000101110 # Input pattern 11: 10001100101010011000101001001010001 # Input pattern 12: 10000100001000010000100001000011111 # Input pattern 13: 10001110111010110001100011000110001 # Input pattern 14: 10001100011100110101100111000110001 # Input pattern 15: 01110100011000110001100011000101110 # Input pattern 16: 11110100011000111110100001000010000 # Input pattern 17: 01110100011000110001101011001101111 # Input pattern 18: 11110100011000111110101001001010001 # Input pattern 19: 01110100011000001110000011000101110 # Input pattern 20: 11111001000010000100001000010000100 # Input pattern 21: 10001100011000110001100011000101110 # Input pattern 22: 10001100011000110001100010101000100 # Input pattern 23: 10001100011000110001101011010101010 # Input pattern 24: 10001100010101000100010101000110001 # Input pattern 25: 10001100010101000100001000010000100 # Input pattern 26: 11111000010001000100010001000011111 Работа с программой Для запуска системы SNNS следует сначала запустить служебную программу X-Win32. Затем следует запустить файл «snns.bat». После запуска появятся несколько окон, изображенных на рис.2.55. Рис.2.55. Окна SNNS после запуска. Окно «banner» (логотип) пропадет после щелчка мышью по нему. После этого можно начать работу с программой. Создание сети Менеджер SNNS дает доступ ко всем возможностям пакета. Ниже представлен рис.2.56, объясняющий функции основных кнопок. Как и для типов нейросетей, создание ART-сетей производит встроенная в SNNS утилита BIGNET. Рис.2.56. Панель менеджера SNNS. Считывание и запись файлов SNNS использует файлы пяти типов (рис.2.57). Самыми важными из них являются: NET – Файлы с описанием сетей содержат информацию о топологии сети и правилах обучения. Файлы заканчиваются символами ‘.net’. PAT – файлы обучающих наборов (образцов, образов), содержащие данные для тренировки и тестирования сетей. Все файлы образов заканчиваются символами ‘.pat’. RES – файлы результатов. Выход сети может быть интерпретирован множеством различных путей в зависимости от решаемой проблемы. SNNS позволяет пользователям делать дамп выходов сети в отдельном файле для последующего анализа. Остальные два типа файлов не важны для первого ознакомления с SNNS. Текущий каталог Список имеющихся файлов Имя файла Выбор типа файлов Линейка листания Загрузить Завершить Сохранить Рис.2.57. Файловый проводник SNNS. Для открытия файлов сетей и образов используется опция FILE на панели менеджера SNNS. Появится окно загрузки файлов. Верхнее текстовое поле показывает текущий каталог. Главное полесписок показывает все файлы в соответствии с выбранным типом файла, понимаемым SNNS. Каталоги заключены в квадратные скобки. Создание новой сети SNNS позволяет создавать нейронные сети многих различных типов. Здесь приведен пример создания обычной сети адаптивного резонанса. Эта сеть сможет распознавать большие буквы латинского алфавита. Выберите опцию ART1 из меню кнопки BIGNET на панели менеджера. Создание ART сетей базируется всего лишь на нескольких параметрах. Несмотря на то, что сетевая топология для этих моделей несколько сложна, имеются только четыре параметра для ART1 и ART2.Если вы выбираете клавишу ART1 или ART2, появится одно из окон показанных на рис.2.58. Рис.2.58. Создание сети. Для сети ART необходимо определить четыре параметра. Их значения легко объяснить. Во-первых необходимо указать количество элементов в слое F1. Поскольку слой F0 содержит тоже число элементов, BigNet достаточно знать только одно значение. Далее требуется указать каким образом эти элементы будут отображены на экране. Для этого существует поле No. of rows в меню для ART сетей. Ту же процедуру нужно проделать для слоя F2 (рис.2.59). Рис.2.59. Пример генерации ART1 сети. Примите к сведению, что многое из того, что Вы вводите, носит чисто косметический характер. Файл с обучающими последовательностями образов содержит заранее заданное число входов и выходов сети и они должны совпадать с топологией. Для симулятора неважно, как они расположены на дисплее. Попробуем проделать работу по созданию простой сети с матрицей ввода 5х7, 35 входными нейронами и 26 выходными: Установите число элементов слоя F1 в 35 Установите число элементов слоя F2 в 26 Установите число рядов для F1 в 9 Установите число рядов для F2 в 9 Чтобы сеть уместилась на экране, расположим элементы слоев сравнения и распознавания в девять рядов. Теперь выберите CREATE NET для генерации сети с указанными параметрами и DONE для закрытия панели BigNet. Если перед упражнениями была загружена какая-нибудь сеть, появится сообщение о ее уничтожении. Если теперь нажать на кнопку DISPLAY менеджера SNNS, мы увидим только что созданную нами нейронную сеть. Эта сеть изображена на рис.2.60. Рис.2.60. Нейронная ART1-сеть, созданная с помощью меню Bignet. Обычно линии, показывающие веса, не видны, но их можно включить, выбрав SETUP и затем нажав на кнопку ON рядом с опцией ‘связи’ (‘links’). Вы заметите, что SNNS не допускает больше ввода до тех пор, пока Вы не нажмете на кнопку DONE. После создания сети и загрузки файла обучающих последовательностей (он должен соответствовать топологии сети) можно приступать к обучению сети. Сеть, которую мы только что создали, должна соответствовать файлу ‘art1_letters.pat’, расположенному в каталоге примеров SNNS. Существует также альтернативный путь для создания сетей – через графический редактор сетей, встроенный в SNNS. Он хорошо приспособлен для внесения изменений в существующие большие сети или для создания новых небольших сетей. Для создания больших сетей используйте инструмент bignet. Редактор сетей будет описан через одну главу. Обучение сети. Загрузите из каталога примеров SNNS файл с обучающими последовательностями ‘art1_letter’ (предварительно нажмите на кнопку PAT). Сеть – это инструмент для ассоциации учебных примеров и она может быть обучена для отображения входных изображений (в палитре 5х7 представлены буквы) на выходные нейроны, где каждой из 26 букв латинского алфавита соответствует один выходной нейрон. Все обучение и тестирование производится через опцию CONTROL (эта панель представлена на рис.2.61). Рассмотрим наиболее важные возможности одну за одной. Форма состоит из двух частей. Верхняя часть управляет определениями параметров процесса обучения, а три нижние строки – это бланк, который должен быть заполнен для определения интенсивности обучения и т.д., а также диапазон, в котором веса будут случайно распределены при инициализации сети. Количество циклов обучения Начать/Остановить обучение Инициализация сети Контрольные параметры Параметры обучения Готово Случайный порядок Обучающая ф-ия Рис.2.61. Панель CONTROL управления обучением и контролем сетей SNNS. Инициализация сети. Многие сети должны быть инициализированы перед использованием. Это касается и сетей ART1. Для начала следует выбрать из списка функций функцию инициализации ART1_Weights. Эта функция устанавливает начальные значения обучаемых связей сети ART1, которые следуют одна из уровня F1 в F2, другая в обратном направлении соответственно. Все связи F2F1 с устанавливаются в единицу. Веса связей F1F2 объяснить несколько сложнее. Если принять, что в инициализируемой сети элементы уровня F2 имеют собственные индексы, то веса связей от F1 к F2 должны уменьшаться с уменьшением индекса. Другое ограничение накладывается на значение веса связи, которое должно быть больше 0, но меньше 1/N. Обозначим через j вес связи, следующей из элемента уровня F1 в j-ый элемент уровня F2. Тогда имеет место следующее соотношение : 0 < M < M-1 < … < 1 1/ ( + N) Чтобы получить конкретные значения, необходимо уменьшить правую дробную часть формулы наряду с уменьшением индекса j и приписать это значение j . Введем для этих целей величину и получим: j 1 / [ + (1 + j) N] Зная число элементов M в слое F2 и новый параметр , можно расчитать следуюшим образом : /M Таким образом для функции ART1_Weights необходимо определить два параметра : и . На стадии инициализации оба параметра необходимо установить в 1, для чего следует воспользоваться кнопкой INIT из меню управления. Необходимо всегда использовать функцию ART1_Weights при инициализации ART1 сети. В случае, если будет выбрана другая функция инициализации, поведение симулятора во время обучения невозможно будет предсказать, потому что будут установлены не только обучаемые связи, но и фиксированные веса сети. Выбор алгоритма обучения Алгоритм обучения ART-1 сети. Для обучения ART1 сети следует в качестве алгоритма обучения выбрать ART1. Чтобы начать обучение, установите в 1 параметр бдительности (vigilance) p в ячейках LEARN и UPDATE панели управления. Параметр , который нужен для регулирования весов между слоями F1 и F2, уже был определен как параметр инициализации. Он хранится в поле настройки структуры элемента и считывается когда это необходимо. Функции обновления ART-1 сети. Чтобы продвинуть новый образец по сети ART1 без изменения весов, т.е. классифицировать его, должны быть определена одна из двух функций обновления: ART1_Stable ART1_Synchronous. Подобно алгоритму обучения, функции обновления используют только один параметр – это параметр бдительности (vigilance) p. Он должен быть введен в следующей строке после параметра для алгоритма обучения на панели управления. Следующие различия существуют между функциями обновления : ART1_Stable распространяет образец по сети пока сеть стабильна, т.е. когда хотя бы один из элементов cl или nc находится в активном состоянии. Чтобы использовать эту функцию нажмите кнопку TEST на панели управления (Control Panel). Следующий образец быдет скопирован во входной и будет распространяться по сети, пока она находится в стабильном состоянии. ART1_Synchronous выполняет только один шаг по продвижению образца по сети при каждом вызове. Чтобы использовать эту функцию нажмите кнопку Reset чтобы переустановить сеть в определенное состояние инициализации, где каждый элемент имеет свою величину активации. Затем скопируйте следующий образец во входной слой, используя кнопки < и >. Теперь укажите желаемое число шагов распространения и нажмите кнопку STEP (по умолчанию 1). Используя эту функцию обновления, можно наблюдать, как ART1-алгоритм выполняет свою работу. Таким образом функция ART1_Synchronous распределяет образец по сети, а функция ART1_Stable продвигает образец пока сеть находится в стабильном состоянии. Для того, чтобы установить все вышеописанные функции, воспользуйтесь одной из трех кнопок SEL_FUNC (рядом с параметрами распространения ошибки) и выберите функцию, которую хотите использовать. Первая кнопка - для установки алгоритма обучения (установите в ART1), вторая - для функции обновления (установите в ART1_Stable или ART1_Synchronous) и третья - для функции инициализации (установите в ART_Weights). Каждый алгоритм обучения требует установки различных параметров. Установите параметры, как это было описано выше. После того, как все параметры установлены, можно начинать обучение сети. В каждом цикле тренировок используются все обучающие образы. Иногда бывает предпочтительно выбрать образы обучающей последовательности в случайном порядке: для этого нажмите SHUFFLE. Теперь нажмите на ALL для начала обучения и STOP – для его остановки. Невозможно судить о корректности работы сети только по тренировочным данным. Поэтому целесообразно загружать тестовый набор, чтобы убедиться в том, что сеть не перетренирована и проводит обобщения корректно. Для нашего примера тестовый пример не приведен. Возможно иметь одновременно до 5 активных тестовых наборов одновременно. Две кнопки USE на форме позволяют выбрать тестовые наборы для обучения и контроля. Верхняя кнопка соответствует обучающему набору, а нижняя – контролирующему. Можно пройти также по всем образам в наборе и рассчитать выходную активацию без изменения весов связей. Для этого надо щелкать по кнопке TEST. Можно перейти к любому образу в тренировочном наборе одним из двух путей: указанием номера образа в поле, обозначенном ‘PATTERN’ и нажатием GOTO. Выходы, рассчитанные сетью во время прохода по данным – это цели, а не вычисленные выводы! Рабочее задание 1) Ознакомится с описанием лабораторной работы. 2) Изучить действия, приведенные в описании, и последовательно выполнить все шаги, описанные в разделе. В результате у Вас получится обученная нейронная сеть, способная решать задачу распознавания символов. 3) По окончании п.2 показать преподавателю результаты: дисплей с изображением структуры нейронной сети; панель управления обучением с установленными параметрами; график обучения; Контрольные вопросы Контрольные вопросы представлены в виде теста (см. приложение 2). 2.2.5. Лабораторная работа №5. Представление времени нейросетями. Прогнозирование с помощью нейросетей Цель работы: Применение пакета SNNS для моделирования системы предсказания поведения световой интенсивности NH3- лазера в следующий момент времени на основе частично рекуррентной сети Жордана. Исходные данные имели значение в диапазоне [0 .. 255], а после нормализации в интервале [0 .. 1]. Знания, умения и навыки, формируемые лабораторной работой: o знание основ прогнозирования на базе нейронных сетей, o знания по одому из видов частично рекурентных сетей: сетью Жордана, o навыки использования нейропакета SNNS. Обучающая последовательность образов: SNNS pattern definition file V3.2 generated at Thu Apr 21 21:22:30 1994 No. of patterns : 16 No. of input units : 2 No. of output units : 2 # Input pattern 1: 0.03806 0.853553 0.96194 0.853553 # Input pattern 9: # Output pattern 1: 0.03806 0.853553 0.853553 1 # Output pattern 9: # Input pattern 2: 0.146447 1 0.853553 1 # Input pattern 10: # Output pattern 2: 0.146447 1 0.691342 0.853553 # Output pattern 10: # Input pattern 3: 0.308658 0.853553 0.691342 0.853553 # Input pattern 11: # Output pattern 3: 0.308658 0.853553 0.5 0.5 # Output pattern 11: # Input pattern 4: 0.5 0.5 0.5 0.5 # Input pattern 12: # Output pattern 4: 0.5 0.5 0.308658 0.146447 # Output pattern 12: # Input pattern 5: 0.691342 0.146447 0.308658 0.146447 # Input pattern 13: # Output pattern 5: 0.691342 0.146447 0.146447 0 # Output pattern 13: # Input pattern 6: 0.853553 0 0.146447 0 # Input pattern 14: # Output pattern 6: 0.853553 0 0.03806 0.146447 # Output pattern 14: # Input pattern 7: 0.96194 0.146447 0.03806 0.146447 # Input pattern 15: # Output pattern 7: 0.96194 0.146447 0 0.5 # Output pattern 15: # Input pattern 8: 1 0.5 0 0.5 # Input pattern 16: # Output pattern 8: 1 0.5 # Output pattern 16: 0.96194 0.853553 Нейросети Жордана и Элмана Для распознавания и классификации образов, изменяющихся во времени, и прогнозирования временных рядов особо пригодны рекуррентные архитектуры нейросетей (нейросети с обратными связями). Временной ряд — это последовательность образов, которые не могут рассматриваться изолированно. В них важна сама последовательность: важен не только тот или иной образ, но и позиция, которую он занимает во всей временной последовательности. Соответственно при обработке временного ряда с помощью нейронный сетей результат зависит не только от текущего образа, но и от предшествующих образов. Представление времени нейросетями. Временной ряд образов может быть учтён и заменён нейросетью путём единовременного представления или ввода в нейросеть не отдельного образа, а подмножества из образов. При этом применяется техника подвисного окна путём его сдвига на один следующий образ. Эта техника делает возможным применение сетей с прямыми связями для представления времени, которым присуще и следующие недостатки: 1. размер входного окна жёстко задаётся топологией нейросети, 2. для формирования выхода нейросети существенна лишь позиция образа в пределах входного окна, а не абсолютная позиция во всей временной последовательности, 3. два одинаковых подмножества образов по длине, генерируют один и тот же выход независимо от контекста, в который они включены. Другой подход состоит в применении частично рекуррентных сетей, содержащих контекстные нейроны: с помощью их реализуется механизм запоминания памяти. Контекстные нейроны в качестве входов используют выходы скрытых или входных нейронов. Эти частично рекуррентные сети занимают промежуточное положение между сетьями с прямыми связями и полностью рекуррентными нейросетями (например, сети Хопфилда, машина Больцмана и другие). Существенным преимуществом частично рекуррентных сетей является то, что для их обучения могут использоваться модифицированные алгоритмы обучения для сетей с прямыми связями. Нейросети Жордана В нейросетях Жордана архитектура сетей с прямыми связями дополняется контекстными нейронами, которые предназначены для запоминания состояния выхода (рис.2.62). Рис.2.62. Архитектура сети Жордана. Вход для скрытых нейронов формируется входными и контекстными нейронами. Выходы скрытых нейронов подаются на входы выходных нейронов. Выходы выходных нейронов с одной стороны являются выходами нейросети, с другой стороны с постоянными весовыми коэффициентами ( обычно =1) подаются на входы контекстных нейронов. Кроме того, контекстные нейроны имеют непосредственно свои обратить внимание, что при такой архитектуре число контекстных уровней равно числу входных нейронов. При этом настраивающимися связями являются связи от входных и контекстных нейронов к скрытым нейронам и от скрытых к выходным нейронам. Выход нейросети в любой момент времени определяется с одной стороны внешним входом, а с другой стороны – состоянием нейросети, запомненным контекстными нейронами. Обозначим через S(t) – вектор внутреннего состояния, зависящий от времени. При этом поведение нейросети можно описать двумя уравнениями: O(t)=F(S(t),I(t)) (2.27) S(t+1)=G(S(t),I(t)) (2.28) Здесь F-функция выхода, G-функция перехода состояния нейросети в момент времени t в состояние в момент времени t+1 (подобно теории автоматов), I(t)-вектор входа в момент времени t. Обе функции F и G зависят от текущего входа I(t) и текущего состояния S(t). В соответствии с (2) состояние нейросети в момент времени t+1 определяется текущим состоянием S(t) и входным I(t). Выходы нейросети O(t) в момент времени t определяются входом и состоянием нейросети в момент времени t. Нейроны нейросети имеют линейную функцию активации или выхода y=z=net .Пусть S0 —начальное состояние нейросети, тогда вектор состояния в момент времени t определяется так: S(t) = S0 при t=1; (3) S(t) = S (t-1)+ O(t-1) при t>1 (4) Эта функция перехода представляет собой экспоненциально взвешенную всех предшествующих выходов. Параметр для [0,1] определяет свойства памяти сети. При малых значениях далеко отстоящие во времени состояния оказывают всё более уменьшающееся влияние, влияние же последних состояний относительно более сильное. При выборе вблизи 1 влияние более поздних выходов становится более важным. В предельном случае =1 суммируется на предшествующие выходы. При =0,5 обеспечивается компромисс между учётом старых значений выходов и гибкостью к новым изменениям. Сети Элмана Сети Элмана представляют собой модификацию сетей Жордена. Их отличие в использовании обратных связей не от выходных нейронов (сети Жордана), а от скрытых нейронов. Кроме того в них отсутствуют и прямые обратные связи с выходов самих контекстных нейронов на их же входы (рис.2.63). Рис.2.63. Архитектура сети Элмана. В них числа скрытых и контекстных нейронов естественно совпадают. Веса обратных связей от скрытых нейронов к контекстным равны 1. Функция активации или выхода контекстных нейронов линейная y=net=z (выход равен входу) . то есть выходы контекстных нейронов- это копии входов соответствующих скрытых нейронов. Выходы скрытых нейронов как обычно подаются на входы выходных нейронов. При вводе следующего образа контекстные нейроны имеют активации скрытых нейронов для предшествующего образа. Таким образом, запоминается временная последовательность образов. Задача скрытых нейронов состоит в отображении внешнего входа и запомненного внутреннего состояния (контекстными нейронами) в желаемый вход. Простые сети Элмана имеют лишь один слой скрытых нейронов. Для многих приложений лучшие результаты достигаются иерархическими сетями Элмана, имеющими несколько скрытых и соответствующих им контекстных слоёв нейронов (рис.2.64). Рис.2.64. Архитектура сети Элмана с двумя скрытыми слоями. Архитектура иерархической сети Элмана с двумя скрытыми слоями, причём каждый скрытый слой имеет свой собственный контекстный слой. Выходной слой также может быть снабжён контекстным слоем. Преимущество иерархических сетей Элмана - во-первых, в использовании многих скрытых слоёв, и во-вторых, в моделировании различных свойств памяти путём выбора различных значений параметров памяти i. Алгоритмы обучения частично рекуррентных нейросетей Для обучения частных рекуррентных сетей могут быть использованы модифицированные алгоритмы Backpropagation и его разновидности(Quikprop, Rprop и другие). Если опустить все рекуррентные связи (связи к контекстным нейронам), то сеть Элмана становится обычной сеть с прямыми связями сетью, в которой контекстные нейроны являются дополнительными входными нейронами. Расширенный входной вектор состоит из обычного вектора входа и вектора состояний контекстных нейронов. Соответственно для обучения сети Элмана можно использовать с небольшой модификацией следующий Backpropagation-алгоритм: 1. Инициализация контекстных нейронов. 2. Для каждого образа обучение временной последовательности выполняются следующие операции: 2.2. Ввод образа и передача его на выход (не обращая внимания на рекуррентные связи). 2.3. Сравнение желаемого и действительного выхода и расчёт ошибки для каждого выхода нейрона. 2.4. Обратное распространение ошибки от выходных к входным нейронам (не обращая внимания на рекуррентные связи). 2.5. Расчёт изменений весовых коэффициентов на основе сигналов ошибки 2.6. Адаптация весов. 2.7. Расчёт следующего состояния контекстных нейронов согласно их соединениям - это единственный шаг, на котором учитываются рекуррентные связи. Запуск программы Для запуска системы SNNS следует сначала запустить служебную программу X-Win32. Затем следует запустить файл «snns.bat». Создание и обучение сети Жордана SNNS позволяет создавать нейронные сети многих различных типов. Здесь приведен пример создания частично рекуррентной сети JORDAN. Эта сеть сможет прогнозировать поведение интенсивности светового потока NH3-лазера. Выберите опцию JORDAN из меню кнопки BIGNET на панели менеджера. На экране появится панель: Слева цифра указывает номер уровня. Левый столбец No of units -количество нейронов в уровне. Правый столбец No of col. -количество столбцов представления уровня. Остальные кноки и поля этого меню будут рассмотрены на примере ниже. Попробуем проделать работу по созданию сети следующего вида: 1 входной нейрон, 8 скрытых нейронов в скрытом уровне, 1 контекстный нейрон в контекстном уровне, 1 выходной нейрон. Входной слой (input layer): установите значение 1, где значение количества нейронов (No of units), другая колонка- количество столбцов (No of col) для нашего случая вся заполнена единицами. Создайте восемь скрытых нейронов в скрытом слое 1 (hidden layer), поставив напротив значение 8. Напомним, что другая колонка - количество столбцов (No of col), для нашего случая вся заполнена единицами. Выходной слой (output layer) установите значение 1, где значение количества нейронов (No of units). Теперь выберите CREATE NET и DONE. Если перед упражнениями была загружена какая-нибудь сеть, появится сообщение об её уничтожении. Если теперь нажать на кнопку DISPLAY менеджера SNNS, мы увидим только что созданную нами нейронную сеть. Обычно линии, показывающие веса, не видны, но их можно включить, выбрав SETUP и затем нажав на кнопку ON рядом с опцией ‘связи’ (‘links’). Вы заметите, что SNNS не допускает больше ввода до тех пор, пока Вы не нажмете на кнопку DONE. После создания сети и загрузки файла обучающей последовательностей (он должен соответствовать топологии сети) можно приступать к обучению сети. Сеть, которую мы только что создали, должна соответствовать файлу ‘laser_1.pat’, расположенному в каталоге примеров SNNS. Обучение сети. Загрузите из каталога примеров SNNS файл с обучающей последовательностью ‘laser_1’ (предварительно нажмите на кнопку PAT). Сеть может быть обучена для прогнозирования входных сигналов. Все обучение и тестирование производится через опцию CONTROL. Форма состоит из двух частей. Верхняя часть управляет параметрами алгоритма обучения, а три нижние строки – это бланк, который должен быть заполнен для определения коэффициента коррекции и т.д., а также диапазон, в котором веса будут случайно распределены при инициализации сети. Выбор алгоритма обучения Были адаптированы следующие алгоритмы обучения частично рекуррентных сетей, подобных сетям Жордана и Элмана: JE_BP: Стандартный алгоритм обратного распространения для частично рекуррентных сетей, JE_BPMomentum: Стандартный алгоритм обратного распространения с моментом для частично рекуррентных сетей, JE_Quickprop: Quickprop для частично рекуррентных сетей, JE_Rprop: Rprop для частично рекуррентных сетей Параметры для этих алгоритмов обучения – те же, что и для их обычных версий этих алгоритмов плюс один специальный параметр. Выбор функции обновления JE_Order (Порядок для сетей JE) Эта функция обновления распространяет образ от входного слоя на первый скрытый, потом на второй, и т.д. до выходного слоя. После этого идет синхронное обновление всех задействованных вершин. Эта функция применима только к сетям JE. JE_Special (Специальный порядок для сетей JE) При использовании этой функции входные образы генерируются динамически. Пусть n - число входных вершин, и m - число выходных вершин сети. Функция JE_Special генерирует новый входной вектор из выходов последних n-m входных вершин и m выходных вершин. Для использования требуется соблюдение условия n>m. Распространение сгенерированного образа осуществляется так же, как и распространение при применении функции JE_Update. При использовании этой функции число входных образов, устанавливаемое в контрольной панели, не играет никакой роли. Выбор функции инициализации JE_Weights ( Веса для сетей JE ) Она инициализации требует указания пяти параметров: ,: Веса прямых соединений случайным образом выбираются из интервала [ ; ]., задаются в полях 1 и 2. : веса рекуррентных связей от контекстных вершин к самим себе. Сети Элмана используют =0. задается в поле 3. : Веса других рекуррентных связей к контекстным вершинам. Это значение часто полагают равным 1.0. задается в поле 4. : Начальное значение функции активации всех контекстных вершин. задается в поле 5. Требуется, чтобы было больше . Если это не так, на экране появляется сообщение об ошибке. Контекстные вершины будут инициализированы так, как описано выше. Для всех остальных нейронов смещения и все веса будут выбраны случайным образом из интервала [;]. Для сетей с прямым распространением информации (feedforward) по умолчанию применяется алгоритм обучения Std_Backpropagation (стандартный алгоритм обратного распространения). Для выбора иных алгоритмов щелкните SEL_FUNC (рядом с параметрами распространения ошибки) и выберите алгоритм, который вы хотите использовать: Std_Backpropagation, BackpropMomentum или Rprop. Для примера letters используйте BackpropMomentum. После того, как все параметры установлены, можно начинать обучение сети. Обучение производится за определенное количество циклов (CYCLES). Введите номер, например 200. В каждом цикле тренировок используются все обучающие образы. Иногда бывает предпочтительно выбрать образы обучающей последовательности в случайном порядке: для этого нажмите SHUFFLE. Для примера сети – ассоциатора оставьте коэффициент коррекции (learning rate) 0.2 и установите momentum term (второе поле) в 0.5; остальные поля оставьте с нулями. Перед началом процесса обучения откройте окно графиков (нажмите GRAPH в окне менеджера) для того, чтобы можно было наблюдать за процессом тренировки. Теперь нажмите на ALL для начала обучения и STOP – чтобы его остановить. График начнется из левого положения каждый раз, когда сеть инициализируется, поэтому легко сопоставлять различные параметры обучения. Текущая ошибка также показана на экране и может быть использована в любой программе рисования. Можно пройти также по всем образам обучащей последовательности и рассчитать выходную активацию без изменения весов связей. Для этого следует нажимать на кнопку TEST. Можно также перейти к любому образу обучающей последовательности одним из двух способов: указанием номера образа в поле, обозначенном ‘PATTERN’ и нажатием GOTO. Использование сетевого анализатора Ошибку обучения для частично рекуррентных сетей можно посмотреть с помощью панели сетевого анализатора, которую можно вызвать при помощи кнопки ANALYZER на панели SNNS-MANAGER. Для просмотра динамики ошибки следует нажать кнопку ON, после этого нажатие кнопки M-TEST прогон нескольких образцов через нейросеть. Ошибки образцов можно будет видеть в виде точек на графике. Для построения кривой нужно перед нажатием кнопки M-TEST нажать на кнопку LINE (кнопка GRID - для создание сетки на графике). Рис.2.65. Сетевой анализатор SNNS. Рабочее задание 1. Ознакомится с описанием лабораторной работы. 2. Изучить действия, приведенные в описании, и последовательно выполнить все шаги, описанные в разделе. В результате у Вас получится обученная нейронная сеть, способная решать задачу прогнозирования световой интенсивности лазера. 3. По окончании этой работы показать преподавателю результаты: дисплей с изображением структуры нейронной сети; панель управления обучением с установленными параметрами; график сетевого анализатора; 4. Поэкспериментируйте с параметрами сети и параметрами функций обучения, обновления и инициализации. Посмотрите, как это отражается на графике сетевого анализатора и времени обучения сети. 5. Отчет должен содержать все файлы обучающих последовательностей и всех обученных сетей (эти файлы находятся в текущем каталоге, имеют текстовый формат и расширения .pat и .net соответственно). Контрольные вопросы Контрольные вопросы представлены в виде теста (см. приложение 2). 2.2.6. Лабораторная работа №6. Прогнозирование на основе нейросетей Элмана Цель работы: Применение пакета SNNS для моделирования системы предсказывания поведения световой интенсивности NH3- лазера на основе частично рекуррентной сети Элмана. Исходные данные имели значение в диапазоне [0 .. 255], а после нормализации в интервале [0 .. 1]. Знания, умения и навыки, формируемые лабораторной работой: o знание основ прогнозирования, на базе одного из видов частично рекурентных сетей: сетью Элмана. o навыки использования нейропакета SNNS. Перед выполнением этой лабораторной работы необходимо выполнить лабораторную работу №5. Набор обучающих образов для системы распознавания символов взят из лабораторной работы N5. Запуск программы Для запуска системы SNNS следует сначала запустить служебную программу X-Win32. Затем следует запустить файл «snns.bat». Создание и обучение сети Для создания частично текущей сети ELMAN выберите опцию ELMAN из меню кнопки BIGNET на панели менеджера. На экране появится панель: Слева цифра указывает номер уровня. Левый столбец No of units - количество нейронов в слоя. Правый столбец No of col. - количество столбцов представления слое. Остальные кнопки и поля этого меню будут рассмотрены на примере ниже. Попробуем проделать работу по созданию сети следующего вида: 1 входной нейрон, 8 скрытых нейронов в скрытом слое 1, 8 контекстных нейронов в контекстном слое 1, 8 скрытых нейронов в скрытом слое 2, 8 контекстных нейронов в контекстном слое 2 и 1 выходной нейрон. Входной нейрон (1 input): установите значение 1, где значение количества нейронов (No of units), другая колонка- количество столбцов (No of col) для нашего случая вся заполнена единицами. Восемь скрытых нейронов в скрытом слое 1 (2 hidden) создайте, поставив напротив значение 8. Напомним что другая колонка – это количество столбцов (No of col) для нашего случая вся заполнена единицами. Восемь контекстных нейронов в скрытом слое 1 создайте, нажав напротив Output Context: клавишу YES . Чтобы создать следующие восемь скрытых нейронов в скрытом слое 2 (3 hidden), следует нажать клавишу INSERT (для удаления DELETE). Далее введите значение 8. Восемь контекстных нейронов в скрытом слое 2 создайте, нажав напротив Output Context клавишу YES . Выходной нейрон (4 output): установите значение 1, где значение количества нейронов (No of units). Теперь выберите CREATE NET и DONE. Если перед упражнениями была загружена какая-нибудь сеть, появится сообщение об её уничтожении. Если теперь нажать на кнопку DISPLAY менеджера SNNS, мы увидим только что созданную нами нейронную сеть (рис.2.66): Рис.2.66. Нейронная сеть Элмана Обычно линии, показывающие веса, не видны, но их можно включить, выбрав SETUP и затем нажав на кнопку ON рядом с опцией ‘связи’ (‘links’). Вы заметите, что SNNS не допускает больше ввода до тех пор, пока Вы не нажмете на кнопку DONE. После создания сети и загрузки файла обучающей последовательности (он должен соответствовать топологии сети) можно приступать к обучению сети. Сеть, которую мы только что создали, должна соответствовать файлу ‘laser_1.pat’, расположенному в каталоге примеров SNNS (рис.2.67). Рис.2.66. Нейронная сеть Элмана после создания сети Обучение сети. Загрузите из каталога примеров SNNS файл с обучающей последовательностью ‘laser_1’ (предварительно нажмите на кнопку PAT). Сеть – может быть обучена для прогнозирования входных сигналов. Все обучение и тестирование производится через опцию CONTROL. Форма состоит из двух частей. Верхняя часть управляет параметрами алгоритма обучения, а три нижние строки – это бланк, который должен быть заполнен для определения коэффициента коррекции и т.д., а также диапазон, в котором веса будут случайно распределены при инициализации сети. Выбор алгоритма обучения Используются те же алгоритмы, что и в случае сети Жордана и те же функции обновления и инициализации (см. лабораторную работу №5). Пример контрольной панели с параметрами для сети Элмана (рис.2.68): Рис.2.68. Контрольная панель SNNS с параметрами для сети Элмана. Теперь нажмите на ALL для начала обучения и STOP – для его остановки. График начнется из левого положения каждый раз, когда сеть инициализируется, поэтому легко сопоставлять различные параметры обучения. Текущая ошибка также показана на экране и может быть использована в любой программе рисования. Можно пройти также по всем образам в обучающей последовательности и рассчитать выходную активацию без изменения весов связей. Для этого следует нажимать на кнопку TEST. Можно перейти к любому образу в обучающей последовательности одним из двух способов: указанием номера образа в поле, обозначенном ‘PATTERN’ и нажатием GOTO. Рабочее задание 1. Ознакомится с описанием лабораторной работы. 2. Изучить действия, приведенные в описании, и последовательно выполнить все шаги, описанные в разделе. В результате у Вас получится обученная нейронная сеть, способная решать задачу распознавания символов. 3. По окончании п.2 показать преподавателю результаты: дисплей с изображением структуры нейронной сети; панель управления обучением с установленными параметрами; график обучения; 4. Сравните работу сетей Элмана и Жордана, результаты сравнения запишите в отдельный отчёт.