Текст
                    }
УДК 681.142.2 Пакеты прикладных программ
ББК 32.97 Выпускается с 1999 г.
М42
Медведев В. С, Потемкин В. Г.
М42 Нейронные сети. MATLAB б / Под общ. ред. к. т. н. В. Г. Потемкина. ~ М.:
ДИАЛОГ-МИФИ, 2002.-496 с. - (Пакеты прикладных программ; Кн. 4).
ISBN 5-86404-163-7 (Кн. 4)
В книге содержится описание пакета прикладных программ Neural Network Toolbox (ППП
NNT) версии 4 (выпуски 11 и 12), функционирующего под управлением ядра системы MATLAB
версий 5.3 и 6.
Книга состоит из двух частей. Первая часть содержит теорию и описание различных типов
нейронных сетей; вторая - включает справочный материал, связанный с описанием М-функций
пакета. Рассмотрено 15 типов нейронных сетей, для каждой из которых описана архитектура,
методы адаптации, обучения и настройки параметров. Показано применение нейронных сетей
для решения прикладных задач фильтрации и предсказания сигналов, подавления шумов,
распознавания образов, построения систем управления.
Приведено полное описание вычислительной модели нейронной сети в виде массива
записей. Архитектура нейронной сети представлена ее S-моделью, которая воспроизводится с
помощью системы SIMULINK Паке программ дополнен библиотекой Neural Network Toolbox
Block Library, содержащей блоки, необходимые для формирования S-модели нейронной сети.
Большое количество вспомогательных графических функций помогает пользователю
создавать наглядные проекты нейронных сетей для различных приложений.
Книга предназначена для инженеров, научных работников, аспирантов и студентов,
занимающихся созданием технических систем на основе нейронных сетей и использующих в своей практике
современные вычислительные инструменты и средства прикладного программирования.
Учебно-справочное издание
Медведев Владимир Степанович, Потемкин Валерий Георгиевич
Нейронные сети. MATLAB 6
Под общ. ред. к. т. н. В. Г. Потемкина
Редактор О. А. Голубев
Корректор В. С. Кустов
Макет Е. К. Виноградовой
Лицензия ЛР N 071568 от 25.12.97. Подписано в печать 6.12.2001.
Формат 70x100/16. Бум. офс. Печать офс. Гарнитура Тайме.
Усл. псч. л. 39,99. Уч.-изд. л. 18,9 Тираж 4 000 экз. Заказ 4418.
Акционерное общество "ДИАЛОГ-МИФИ"
115409, Москва, ул. Москворечье, 31, корп. 2. Т.: 320-43-55, 320-43-77
Http://www.bitex.ru/~diaIog E-mail: diaiog@bitex.ru
ISBN 5-86404-163-7 (Кн. 4) @ M^Be^eB В- С> Потемкин В. Г., 2002
ISBN 5-86404-135 1 © Оригинал-макет, оформление обложки.
ЗАО "ДИАЛОГ-МИФИ", 2002
\\ Г
i Г , , .^
Г


ПРЕДИСЛОВИЕ Предлагаемая вниманию читателя книга входит в серию "Пакеты прикладных программ". Эта серия книг [54-56] посвящена описанию прикладного программного обеспечения фирмы MathWorks, функционирующего под управлением ядра системы MATLAB. Нейронные сети представляют новое направление в практике создания технических систем. Возможности нейронных сетей выполнять операции сравнения по образцу и классификации объектов, недоступные для традиционной математики, позволяют создавать искусственные системы для решения задач распознавания образов, диагностики заболеваний, автоматического анализа документов и многих других нетрадиционных приложений. Теория нейронных сетей развивается в течение последнего полувека, но практическое ее применение стало возможно только в последние 10-15 лет, когда была создана необходимая элементная база для реализации нейронных сетей. Обращаем внимание читателей на ряд обзорных работ по нейронным сетям на русском языке [57, 58]. Тем не менее данная книга занимает особое место, поскольку в ней описан реальный инструмент для расчета и проектирования нейронных сетей. Книга состоит из двух частей. Часть 1 содержит теорию и описание конкретных нейронных сетей. В нее также включен раздел по системе MATLAB 6 и GUI-интерфейсу для работы с ППП NNT. Часть 2 включает справочный материал по описанию М-функций пакета. Значительное внимание уделено проектированию контроллеровГдля систем управления на основе нейронных сетей. Рассмотрено несколько весьма сложных систем управления, для которых процедура проектирования контроллера занимает значительное время. В первую очередь это модель химического реактора с непрерьшным перемешиванием, где используется модель управляемого процесса для предсказания поведения реактора в процессе его функционирования. Другая модель - управление движущимся объектом в магнитном поле. Здесь в качестве модели управляемого процесса используется нелинейная авторегрессионная модель со скользящим средним, которая входит в состав регулятора и реализуется в виде нейронной сети. Еще один пример связан с управлением роботом, здесь нейронные сети используются для построения как модели управляемого объекта, так и самого регулятора. Работа с этими системами возможна только при наличии ядра системы MATLAB версии 6 и системы Simulink версий 4 (R12) или 5. Читателю следует выбрать стиль работы с книгой. Начинающему знакомиться с теорией и практикой нейронных сетей рекомендуется в первую очередь просмотр демонстрационных примеров и формирование сетей с помощью GUI-интерфейса NNTool. Опытному пользователю, создающему собственные архитектуры нейронных сетей, следует применять режим работы из командного окна, который позволяет воспользоваться всеми возможностями ППП NNT. Следует также обратить внимание на интерфейс ППП NNT с системой SIMULINK, что позволяет наглядно отображать архитектуру сети и выполнять моделирование как статических, так и динамических нейронных сетей. 3
■.^w^^-j^e^s^^^^^M^'-^^^^ ^^^^^^личество-примеров" формирования ^^■'Л^ШШШ^^^^-^&^^*^^^^^'- *™* ™™мепах шэоверены и в точности соот- ^1-Ш%у^ш^^^Ш^^\1иШ'сегея' Всеоператорыв^тих примера*, при» ^ ■*ЭД# %1^даШ#1Н^"— *^ ?>^«'тяй«м'обпазом читатель, предполагающий активно 1.^%-:-. ?^&^&5*£йй#£йпйволймьшрезультатам.-Таким орразим, i«'« r &£ --«Зда*^*^ ППП NNT Кломе того мы .^%-ЩШШ&&Ш£^:№Е*В с установленным ШШ ИМД. Кроме того, мы ■ Ш?4Юет^Ю^ будуг'доступны для копирования. Это позволит избавиться 1 ff^" ;^ЖШ^^^У§ЙЙ.ёпа*Й^нос1ь-0. А. Мишулиной за полезные советы при подго- ;fijjl|j|^^ ; ;■■ '■'■■;■;•; ;;•';;';;;'';-;';;-;'.v fli^*'.*" -"■ 'V: - ' ->-VV-* ■'.'.•':"-•- "--С-; Ш"^ 5.' С. Медведев? - В. Г. Потешат? сентябрь 2001 г. U: ■ ■-' . 1.. Нейронные сети. MATLAB 6
ВВЕДЕНИЕ * В последние годы наблюдается повышенный интерес к нейронным сетям, которые нашли применение в самых различных областях:человеческой деятельности- бизнесе, медицине,'технике. Нейронные сети используются при решении задач' прогнозирования, классификаций, управления. Такой впечатляющий успех определяется несколькими причинами.[46-49]: ,-'- -'.. ':'-'-■ '.*"'.' • Нейронные сети - это исключительно, мощный метод имитации процессов и явлений, ... позволяющий воспроизводить чрезвычайно.сложные зависимости. Нейронные.сети по свой природе являются нелинейными, в то время как на протяжении многих лет для построения моделей использовался линейный подход!.. Кроме того, во многих слу- . ..чаях нейронные сети позволяют.преодолеть "проклятие размерности", обусловленное . тем, что моделирование нелинейных явлений в случае большого числа переменных требует огромного количества вычислительных ресурсов. ...... • Другая особенность нейронных сетей: связана с тем, что они используют механизм обучения. Пользователь нейронной сети подбирает представительные данные, а затем запускает алгоритм обучения, который автоматически настраивает параметры сети. При этом от пользователя, конечно, требуется какой-то набор эвристических знаний ■ о том, как следует отбирать и подготавливать данные, выбирать нужную архитектуру сети и интерпретировать результаты, однако уровень знаний, необходимый-для успешного применения нейронных сетей, гораздо скромнее, чем^ например, при использовании традиционных методов;...... - - Г . . . : ..'. f Тем не менее искусственные нейронные сети основаны на весьма простой биологической модели нервной системы. Нервная"система человека, построенная из элементов, называемых нейронами, имеет ошеломляющую сложность. Около: 1011 нейронов участвуют примерно в Ю-5 передающих связях, имеющих длину метр и более. Каждый нейрон обладает многими качествами, общими с другими элёментамиорганизма^человека, но его уникальной способностью является прием, обработка и передача электрохимических сигналов по нервным путям, которые образуют коммуникационную систему мозга: '"' Интенсивность; сигнала, получаемого нейроном (следовательно,1 и возможность его активации), сильно зависит от активности линий связи. Каждая линия связи имеет определённую протяжённость; и специальные химические вещества передают сигнал вдоль неё. Предполагается, что обучение заключается в'первую'очередь в изменении интенсивности связей. Например; в классическом опыте Павлова каждый раз непосредственно перед кормлением собаки звонил колокольчик и собака быстро'Научилась! связывать звонок колокольчика с пищей. . ..-'-'■. ;"" '■•'•'•'"':_;'■■ -" Мозг, построенный из очень большого числа нейронов (каждый из которых принимает взвешенную сумму входных сигналив и 1фи:6пределённьгх условиях имеет возможность, передавать сигнал дальше),^ способен решать чрезвычайно сложные задачи. Такую же модель реализуют и искусственные нейронные сети.;.;-.-. -...-... . Теория нейронных сетей возникла из исследований в области искусственного интеллекта, а именно из попыток воспроизвести способность нервных биологических систем обучаться и* исправлять ошибки, моделируя низкоуровневую структуру мозга. Основой
исследований по искусственному интеллекту в 60 - 80-е гг. были экспертные системы. Такие системы основывались на высокоуровневом моделировании процесса мышления (в частности, на представлении, что процесс нашего мышления построен на манипуляциях с символами). Скоро стало ясно, что подобные системы, хотя и могут принести пользу в некоторых областях, не отражают ключевых свойств человеческого интеллекта. Согласно одной из точек зрения причина этого состоит в том, что они не в состоянии воспроизвести структуру мозга. Чтобы создать искусственный интеллект, необходимо построить систему с архитектурой похожей на строение мозга. Искусственные нейронные сети также составлены из множества простых элементов, действующих параллельно. Как и в природе, функция нейронной сети в значительной степени определяется связями между элементами. Нейронную сеть можно обучать для выполнения конкретной функции, регулируя значения коэффициентов (весов) связи. ] Обычно искусственные нейронные сети настраиваются или обучаются так, чтобы кон- j кретные входы преобразовывались в заданный целевой выход. Сеть настраивается (обу- - J чается), основываясь на сравнении сигналов выхода и цели до тех пор, пока выход сети не будет соответствовать цели. Чтобы обучить сеть при таком управляемом обучении, как ) правило, используется много пар значений сигналов вход/цель. Нейронные сети обучаются выполнять сложные функции в различных областях при- -". ложений, включая распознавание образов, идентификацию, классификацию объектов, \ распознавание речи, системы технического зрения и системы управления. В этих случаях применяются достаточно простые нейронные сети, но даже они оказываются мощным ' инструментом в арсенале специалиста. ' Сегодня могут быть построены искусственные нейронные сети для решения таких задач, которые являются трудными как для компьютеров, построенных по традиционной ] схеме, так и для человека. j Теория нейронных сетей развивается в течение последних пяти десятилетий, но нашла широкое применение только в последние 15 лет. Поэтому строгая терминология в области нейронных сетей еще не установилась. Этим теория нейронных сетей отличает- j: ся от теории управления или оптимизации, где терминология, основные математические I методы и процедуры проектирования выверены при решении практических задач в течение многих лет. ППП Neural Network Toolbox служит средством, которое помогает пользователям раз- :. вивать методы проектирования и расширять область применения нейронных сетей. Поскольку данная область исследований характеризуется значительной новизной, данное пособие описывает только основные положения теории нейронных сетей и используемые в ней методы и процедуры, а на примерах поясняет, как применять их. Мы полагаем, что понимание примеров и их приложений весьма существенно для успешного использования . этого ППП. Нейронные сети нашли применение во многих областях техники, где они использу- I ются для решения многочисленных прикладных задач: • в космонавтике и аэронавтике - для построения систем автоматического пилотирова- j ния самолетов, имитации траекторий полета, разработки перспективных конструкций автопилотов, моделирования и обнаружения неисправностей агрегатов летательных аппаратов, управления воздушным движением, обработки аэрокосмической информации; 6 Нейронные сети. MATLAB б
• в автомобилестроении - для проектирования автоматических систем управления; • в банковском деле - для автоматического чтения документов и их контроля, оценки эффективности кредитных вложений; • в военном деле - для управления оружием, слежения за целями, выделения и распознавания объектов, построения новых типов датчиков, обработки звуковых, радиолокационных и телевизионных изображений, постановки и подавления помех, идентификации сигналов и изображений; • в электронике - для управления процессом проектирования и размещения микросхем на плате, нелинейного моделирования и анализа отказа микросхем, для построения систем машинного зрения и синтеза речи; • в ф и иаисовом деле - для анализа кредитных потоков, оценки недвижимости, общего финансового анализа, прогнозирования стоимости валюты; • в страховом деле - для определения оптимальной стратегии страхования; • в промышленном производстве - для управления производственными процессами, анализа продукции, диагностики работы машин, контроля качества, тестирования продукции, анализа качества сварочных работ, шлифовальных операций, анализа и синтеза химических веществ, прогнозирования цены продукта; • в медицине - для анализа раковых клеток, диагностики заболеваний, конструирования протезов, оптимизации времени трансплантации, планирования расходов больницы, консультаций в отсутствие специалистов; • в нефтегазовой промышленности - для разведки месторождений; • в робототехнике - для управления роботами, построения контроллеров роботов и манипуляторов и систем технического зрения; • при передаче данных - для сжатия и отображения данных, распознавания речи, классификации гласных звуков, преобразования текста в речь, для синхронного перевода Этот перечень можно продолжить и далее. Широкое применение нейронных сетей, . значительные ресурсы, вкладываемые в создание программного обеспечения и аппаратуры для реализации нейронных сетей, показывают, что имеется большая заинтересованность в разработке искусственных нейронных сетей. Используемые обозначения Обозначения скаляров, векторов и матриц: скаляры — курсивные строчные буквы: a, bt с; векторы - прямые строчные полужирные буквы: а, Ь, с; матрицы - прямые прописные полужирные буквы: А, В, С. Обозначения весовых матриц: весовая матрица - W(t); элемент матрицы — vt^(f), где i - номер строки, j - номер столбца, t~ время или итерация; вектор-столбец — Wj(t) (вектор, соответствующий столбцу./ матрицы W); вектор-строка - w,(?) (вектор, соответствующий строке i матрицы W); вектор смещений - Ь(/); элемент вектора смещений - 6;(0- Введение 7
Обозначения для слоев нейронной сети: верхний индекс из одного символа применяется для того, чтобы указать принадлежность некоторого элемента слою. Например, вектор входа слоя 3 обозначается как р3; верхний индекс из двух символов применяется для того, чтобы указать источник сигнала (0 и пункт назначения (к); он используется для обозначения матриц весов входа IW^' и матриц весов слоя LW*1'. Например, матрица весов от слоя 2 к слою 4 будет обозначаться как LW42. Пример структурной схемы нейронной сети: На рисунке приведены обозначения, используемые при изображении структурных схем нейронных сетей. Входы Слои 1,2 a'(k) = tansieClWyOO+b1) СлойЭ Выходы 3x1 а3<Тк) = bgsig(IW11((PI(k)+P,Ot-l)) * WV (к-3)) аэ(к) - purelinO-W1 V(k-1) + 1ЛУИ*2 (к) + Ь^) Связь математических обозначений с обозначениями, принятыми в алгоритмах и программах ППП. При переходе от математических обозначений к кодам системы MATLAB следует руководствоваться следующими правилами: • верхние индексы соответствуют индексам массива ячеек: р —> р{ I}; • нижние индексы соответствуют индексам массива чисел: Р2~->рС2>), р1г~>р{ 1 }(2); • индекс в круглых скобках соответствует второму индексу массива ячеек: р1 (к) ~>р{ 1, к). 8 Нейронные сети. MATLAB 6
Часть 1. ППП NEURAL NETWORK TOOLBOX 1. СИСТЕМА MATLAB 6 Семейство программных продуктов MATLAB б поставляется на двух компакт-дисках, и в соответствии с инструкцией пользователь должен инсталлировать те программные продукты, которые необходимы для последующей работы. Требования, предъявляемые к ресурсам персонального компьютера, следующие: • рекомендуемые процессоры - Pentium, Pentium Pro, Pentium II, Pentium III или AMD Athlon; • операционные системы Microsoft Windows 95, Windows 98, Windows NT 4.0 c пакетом Service Pack 5 или Windows 2000; • устройство CD-ROM для выполнения инсталляции; • требования к оперативной памяти - минимум 64 М для Windows 95, 98, NT 4.0 и 2000, крайне рекомендуется использовать 128 М, поскольку потери в производительности при 64 М составляют около 40 %; • объем требуемого пространства памяти на диске зависит в основном от размеров используемой справочной системы, рекомендуется не менее 4 Г; • рекомендуется применять 8-битовый графический адаптер и дисплей с палитрой не менее 256 цветов. Далее предполагается, что необходимая установка выполнена и вы готовы к сеансу работы в среде MATLAB 6. 1.1. Операционная среда MATLAB б Работа с системой MATLAB начинается с того, что вы запускаете систему с иконки рабочего стола системы Windows. В результате на дисплее открывается рабочий стол системы (рис. 1.1). Он содержит элементы графического интерфейса пользователя, которые предназначены для работы с файлами, переменными и приложениями, связанными с MATLAB. На рис. 1Л вы видите три открытых окна: командное окно Command Window, в котором расположена командная строка, окно (панель) запуска приложений Launch Pad с кнопками развертки/свертки и окно предыстории вызовов Command History. Кроме того, имеются клавиши для переключения окна запуска Launch Pad на окно рабочей области Workspace и окна предыстории Command History на окно текущего каталога Current Directory. Здесь же показан вертикальный разделитель окон, перемещение которого управляет размещением окон в поле экрана. Отметим также информационное окно текущего каталога на инструментальной панели рабочего стола, а также кнопки вызова подсказки, закрытия и отделения командного окна от рабочего стола. Последняя кнопка позволяет перейти в режим работы предшествующих версий системы MATLAB. 9
Ошопредистолня Клавиши переключения Псртеиил-кмйртлсянпльокон Описанный рабочий стол появляется по умолчанию при запуске системы MATLAB 6. Вы можете изменить состав и размещение рабочих окон, открывая новые, закрывая имеющиеся, а также изменяя их размеры с помощью вертикальных и горизонтальных разделителей. Кроме того, можно отделять окна от рабочего стола и помещать их на рабочий стол, используя меню View инструментальной панели. Для настройки таких параметров рабочего стола, как тип и размер шрифта, цвета символов командной строки, следует воспользоваться опцией Preferences меню File (рис. 1.2). »> Preference» ■* \ ШШШ Ю Нейронные сети. MATLAB б
Командное окно Командное окно Command Window показано на рис. 1.3 и предназначено для работы с переменными, файлами и функциями системы MATLAB. «^ Command Window ■-■',■■ ..■■Л 'iV-H'-iCI* To get started, select "HATLAB Help" fron the Help menu. ans = ij'EysJude.SeleCTjonrSIt^ 1 -:>Cp«ri Selection ^j^;^ 16 s 9 4 ■! .!:.^ js\5,:: -W,- v*p'- 1!Ч?й«У: ■«•ЙЯ?: >^Г^лВ?^~^ ж шштйшштшяшштшттт Рис. 1.3 В отличие от предшествующих версий в среде системы MATLAB 6 все операторы как в зоне просмотра командного окна, так и в командной строке могут быть активизированы с помощью правой кнопки мыши. При этом появляется контекстное меню со следующими опциями: Evaluate Selection (Вычислить выделенное), Open Selection (Открыть выделенное), Help on Selection (Справка по выделенному), Сору (Копировать), Paste (Вставить). Окно предыстории Окно предыстории вызова операторов Command History показано на рис. 1.4. Оно содержит строки операторов, которые вводились в командном окне с начала сеанса работы. -> Command Histoiy -■.;■-• •*? ^ЙН FFite- ?£Ш' ¥$*$ Steffi? Щ^сМ1р^Ш%кШ:ё^Ш^- ШМ) Н— 11:04 ЛИ 1/31/01 —* Р = [-3 -2-2 0 0 О 0 2 2 3; О 1 -1 2 1 -1 -2 Г -1 О]; Тс- [1112222111]; T » £ull(ind2vec(Tc)); пес = neulvq(miruaax() ,4,[.б .4]); 1И net - newlvq(minmax(P),4,С-6 .4 net. crainPaEam.epochs = 1000; пес. ttainPanam.show ~ 50; nec.trainPacam.li: = 0.05; [net,cc] = ccain(nec,P,T); V - nec.IU{l,l) nee «• netJlvq(mihla.ax(P) ,4,[.6 . nee.crainPacam.epochs = 150; nee » ccain(net,P,T); V - пес.1И{1,Д.) P _ > rj Ddete«Selection\y3s^-* Ъл Delete:f о ,Selectf<to%i;»t^ ^Ready;.; $m ::^*i Рис. 1.4 /. Система MATLAB 6 11
Эти строки можно активизировать к выполнению двойным щелчком левой кнопки мыши, можно переносить из окна на командную строку, а можно использовать правую кнопку мыши. При этом появляется контекстное меню со следующими опциями: Сору (Копировать), Evaluate Selection (Вычислить выделенное), Create M-File (Создать М-файл), Delete Selection (Удалить выделенное), Delete to Selection (Удалить до выделенного), Delete Entire History (Удалить всю предысторию). Окно запуска Окно, или панель запуска, Launch Pad показано на рис. 1.5 и предназначено для вызова программных продуктов, включенных в состав инсталлированной версии системы MATLAB. -> Launch Pad «ПЙ a~^HATLAB -<^Help — & Demos 3l Current Directory ШWorkspace —[JSJPath ©Product Pace №Ь)1.Г?!^А|$ » -• ^EdfcSource/i^'jsS j+J-<f\Communications Toolbo::biiS&A^^fcd-S 1&-ф. Control System TooibtgVj^j^^ga^ iiS-^tData Acquisition Toolbox Sb^Database Toolbox ГВ-^Datefeed Toolbox t+H^ Filter Design Toolbox !+Ьч$1 Financial Derivatives Toolbox !+hi^Financial Time Secies Toolbox m -A wj — ,„_j._^„ 4i- .11. «„ „ ..... — _ i i Рис. 1.5 Активизация кнопки вызова подменю для каждого из продуктов позволяет обратиться к средству подсказки Help, демонстрационным примерам Demos. Применительно к ядру системы MATLAB можно активизировать либо окно текущего каталога Current Directory, либо окно рабочей области Workspace, либо средство управления путями доступа Path. Можно также вызвать средство построения графического интерфейса пользователя GUIDE (GUI Builder), обратиться через Интернет к странице Product Page (Web) на сайте фирмы The MathWorks Inc., где приведено описание продуктов семейства MATLAB. И вновь доступно контекстное меню со следующими опциями: Open (Открыть), Edit Source (Отредактировать источник), Refresh (Обновить). Окно текущего каталога Окно для просмотра текущего каталога Current Directory показано на рис. 1.6; оно позволяет открывать, просматривать и выполнять поиск информации в файлах системы MATLAB, имеющих необходимое расширение. 12 Нейронные сети. MATLAB 6
•A Cunent Diiecloiy Ffc £dt View;v/eb WW*»,; a«vi;,; :-'.";"-. ;;;> ч Л;;; cl -f^-):~ztX~; ■-.^;> ■ 1'%^?^;i_v;j Контекстное меню, связанное с правой кнопкой мыши, позволяет реализовать следующие действия: Open (Открыть), Run (Выполнить), View Help (Просмотреть справку), Open as Text (Открыть как текст), Import Data... (Импортировать данные...), New (Открыть новый...), Rename (Переименовать), Delete (Удалить), Cut (Вырезать), Сору (Копировать), Paste (Вставить), File Filter (Задать список расширений), Add to Path (Добавить к пути доступа), Refresh (Обновить). На инструментальной панели системы MATLAB 6 имеется информационное окно Current Directory, с помощью которого всегда обеспечивается доступ к списку ранее вызванных текущих каталогов, как это показано на рис. 1.7. Это позволяет быстро переходить от одного каталога к другому, получая доступ к интересующим файлам. -Л matlab *' ISOE3 'тштшшшшшшшшшшшшншшшшшшшашшшшшш] E\pvfllCon)M£PhmctacltoviAStetetlow ; eV^\ConfMEPhl\2001 CVn«JabR124oolboxVinennndemos : EVnatln№/vork l D:\TcoltioxVSNAEapcode E>pvg\ConfMEPrVnPalm OS SteteYlow App>Steteflow eyivaVConlMEPhntMacYlowASteteftowSrc ElpvelConfMEPhTOgest Article Automalb Code Generation from Statettow for Palm OS tiendheids a Tutorial.fltes ; ElpvgKonJMEPN ; e\pvflV:orifMEPW\Peim OS Stnteliow AppVObJ Elpve\Con)MEPhttttctaeflowVDbJ ElpvgVCenlMEPhrtlctacflovrtictac(towJ)eia\Sterler ElpvslContMEPhfticlacfiow ElpvgAConfMSWalm OS Stotellow App CVnotlabRI 24oolboxlqftVift(lemo« C: VnattabRI 24oorbo>:\qttl4ft C: VnatlabRI 24oo!box\qft eVnellab C:\roatlabR124oolboxVnoUab\demos \ \ 1. Система МЛ TLAB 6 13
Окно рабочей области Окно рабочей области Workspace показано на рис. 1.8 и содержит список переменных (именованные массивы), накопленных в памяти в процессе работы, расширение списка переменных при обращении к функциям, выполнении М-файлов и загрузке сохраненньк переменных. *У Woikspace ^ПЕ ' Нам* fflc glints Hi ы» Up mm? 1x10 1x10 lxl Eyte's; 80 160 252 т^т^штяштшт? 1x10 3x3 lxlo 1x10 lxl 1x10 lxl 1x10 ao 9 80 20 828 244 856 80 double array double array (complex) cell array double array (global) pgyggg' uintS array double array char array inline object sparse array (coaplex struct array Щ8вм*^ргЩж^^1ЩЩ uint32 array (conplex):^ m?"%mm iRJ^-'-v* Й^^:}ч Ш& mm *>лщ mmmmmm^mtmtm^u Рис. 1.8 На рис. 1.8 показан список переменных, охватывающий все типы данных: это массивы действительных и комплексных (complex) чисел удвоенной точности double array, разновидности этих массивов, описываемые глобальной переменной global и переменными логического типа logical. Кроме того, список содержит массив строк char array, массив разреженной матрицы sparse array, массив записей struct array, массив ячеек cell array, а также специальные типы целочисленных массивов uint8 и uint32 и объект типа inline, object. Для каждой переменной указывается размер массива Size, объем памяти Bytes и тип массива Class. Окно рабочей области, как и все окна рабочего стола системы MATLAB 6, сопровождается контекстным меню, которое включает следующие опции: Open Selection... (Открыть выделенное...), Graph Selection (Построить график), Select All (Выделить все), Import Data (Импорт данных), Save Selection As... (Сохранить выделенное как...), Save Workspace As... (Сохранить рабочую область как...), Delete Selection (Удалить выделенное), Delete Workspace (Удалить рабочую область). На рис. 1.9 показана глубина вложенности опции Graph Selection, что позволяет в режиме контекста строить любые типы графиков. Это определяет совершенно новый стиль работы в среде системы MATLAB б, когда многие предварительные действия вообще не требуют обращения к командной строке и могут быть реализованы с использованием только правой кнопки мыши. 14 Нейронные сети. MATLAB б
*>Woikspace ■ '-JET*! pf^a jlxlO J80 {double array После завершения сеанса работы данные в рабочей области не сохраняются, и пользователь должен предусмотреть их сохранение в виде файла данных. Это реализуется либо с помощью опции контекстного меню Save Workspace As..., либо с помощью этой же опции из меню File, либо с использованием команды save. Любая из этих операций приводит к созданию специального двоичного файла с расширением .mat. Чтобы прочитать МАТ-файл и разместить его в рабочей области, следует воспользоваться опцией Import Data... или использовать команду load. Окно рабочей области помимо перечисленных функций выполняет функции обозревателя (средства просмотра) данных. Достаточно выполнить двойной щелчок по левой клавише мыши, чтобы вызвать редактор данных Array Editor. На рис. 1.10 показан редактор данных, который позволяет в интерактивном режиме просматривать и корректировать одномерные и двумерные числовые массивы, массивы строк и массивы строковых ячеек. /. Система MATLAB 6 15
Справочная подсистема В состав системы MATLAB 6 входит чрезвычайно мощная подсистема справки Help. Объем документации, к которой организуется доступ, составляет более 250 М и поставляется на отдельном компакт-диске. Обеспечивается доступ не только к встроенной системе Help, но и к документам в формате HTML, а также к полнотекстовым документам в формате PDF. *>НЫр НПО, ^т^^ш^щ^шш^шш^я^ Зн^ R12 Release Notes ?-<£ MATLAB S-gJ Oetiino Started S-|i Using MATLAB Зг-JU Reference j—[U Printable Documentation» *J1. Цг$1 product Pacje (Web) j's* £-i^ Slmullnlc ^ 5-^ Stateflow f £'. W^ Real-Time WorKshop K., s-<^ CDMA Reference Blockset fV? #-<£ Communications Toolbox 'ф£ f£ Communications SlocKset ^/g 4? Contra] System Toolbox s-ф Data Acquisition Toolbox £-1^ Database Toolbox >(■ :& ijjf JfЩШй^1,^ ... .1,- ,...v.,~~- jfflE matlab Release 12 J e g i n Her ^'A^ofayoriies' Release 12 Ш What's New • Release Notes describe new features, new products, and important bug fixes. The Release Notes are available as a printable version "n POF format { % «-The MATLAB deskton Is MATLAB's new development environment i Product Documentation and Demos • MATLA9 Documentation provides complete Information about using MATLAB. й • The Launch Pad in the desktop provides access to Щ) Рис. 1.11 Экран справочной системы делится на 2 области: область навигатора Help Navigator, где пользователь может указать интересующую его тему, термин или функцию, относящиеся к продуктам семейства MATLAB, и область для просмотра найденной информации. Остановимся подробнее на описании этих областей. Навигатор справочной системы позволяет установить в поле Product Filter меру использования источников информации: в полном (All) или ограниченном объеме (Selected). С помощью кнопки Contents tab вывести заголовки и оглавления документов; с помощью кнопки Index tab вывести на экран индексный указатель, а с помощью кнопки Search tab обратиться к поисковой системе. Наконец, кнопка Favorites tab позволяет просмотреть и изменить список справочных документов, определенных в качестве первоочередных для просмотра. Как только требуемая информация найдена, она выводится в окно просмотра. При этом обеспечивается возможность перехода к другим страницам, используя стрелки в верхней и нижней частях страницы или клавиши "вперед" и "назад" инструментальной панели этого окна. Здесь же вы можете увидеть кнопку вывода на печать содержимого страницы, а также окно для поиска Find in page, окно с названием документа-источника, а также кнопку создания закладки Add to Favorites. 16 Нейронные сети. MATLAB 6
File ЕЛ Л#Й"£о 'Wefc/VftMyfiiSp"; iWriavigaioV -,. :"-/Ь«.-'■■"' 1:1~ГГ^Ш$-'?;',*'?.-v. ■<"£-- ¥-f"-;'-rr^::-ТД^ - Proton <* ?а< CStwctri i s£3£ fa ff-fi- SJjtJLs£%fci^u5&= ^i»v:.^ ,.с-л- Сейте» .• "«™* 1 - SeerchWeJE for-,- arguments ,,, ..,,.до,,>,- to Java methods data conversion effect of dimension... argumentlyjre.Java effect on method dlsp... checking number of default defined for function for ODE file function return functions as *|.-1Г.!""-^|ЯГ. ^. - *~-.,_ **-***- *i vPrtSoftS*;j? MATLAB. Л1?: matub-V*,: МАТШЭ. _fJ'J HATLAB-yJ? matlab-;^-- MATUB-^if. MATLAB O^i MATLAB-"-4 HATLAB- |йч Flnancia1*'.'i|| MATLAB Cvjj ^;SSSjiJiK-' .WW-,41^-, I MATVaB Function Reference: Шок ignored. token - юик [ ■ s tr') uses the default delimiters, the white space characters These include tabs (ASCII 9). carnage returns (ASCII 13). and Щ spaces (ASCII 32). Any leading vrtiite space characters are ignored. 'fib [token.tu] - acccokt...) returns the remainder хел of the original string. The remainder consists of all characters from the first delimiter on. Examples з • • Tlus is token,ifm) - л token • Ready «J •ЬйУЖ idasSs (pod ?.■: iBPie. • C*eh'SiSeetionp.-"j-- 1л i >iotfl ечяар!» S«e Also ~^SFl?JET>^r^rrr<^.-i4T^ f^r Ш ^я^а^Ш-ЖШЗ Рис. 1.12 И вновь, как это свойственно среде MATLAB 6, пользователь имеет доступ к контекстному меню со следующими опциями: Evaluate Selection (Вычислить выделенное), Open Selection (Открыть выделенное), Help on Selection (Справка о выделенном), Back (Назад), Forward (Вперед), Reload (Перезагрузить раздел), Сору (Копировать). 1.2. GUI-интерфейс для ППП NNT Отличительной особенностью 12-го выпуска программных продуктов фирмы Math- Works является включение в их состав различных инструментальных средств организации диалога с пользователем. Как правило, это GUI-интерфейсы. Не является исключением и пакет по нейронным сетям ППП NNT, в состав которого входит инструментальное средство NNTool. Этот графический интерфейс позволяет, не обращаясь к командному окну системы MATLAB, выполнять создание, обучение, моделирование, а также импорт и экспорт нейронных сетей и данных, используя только инструментальные возможности GUI-интерфейса. Конечно, такие инструменты наиболее эффективны лишь на начальной стадии работы с пакетом, поскольку имеют определенные ограничения. В частности, интерфейс NNTool допускает работу только с простейшими однослойными и двухслойными нейронными сетями, но при этом пользователь выигрывает во времени и эффективности освоения новых объектов. Вызов GUI-интерфейса NNTool возможен либо командой nntool из командной строки, либо из окна запуска приложений Launch Pad с помощью опции NNTool из раздела Neural Network Toolbox. После вызова на экране терминала появляется окно Network/Data Manager (Управление сетью/данными) (рис. 1.13) 1. Система MATLAB 6 17
+')■ Nelwotk/Dala Manager inputs;" ';'"-'--'-..{s "--V-"-l^eiwcrks:" nf3 ^OulpUlS^^' П останов атепьноети входов Targets:.1., е.-'-.".- \ Yrrr П о следов атетности цепей Начальные условия шшии задержки входа Список нейронных сетей П о следов атепьноети выходов Errors? "Ъ-" -: ,'Л &' '*/- *'гЫ П с следовательности ошибок сети Layer Delay-Slates'j -■" тЯк Начальные условия шшии задержки слоя Рис. 1.13 Здесь: Help - кнопка вызова окна подсказки Network/Data Manager Help (рис. 1.14); New Data... - кнопка вызова окна формирования данных Create New Data (рис. 1.15); New Network... - кнопка вызова окна создания новой нейронной сети Create New Network (рис. 1.16); Import...- кнопка вызова окна для импорта или загрузки данных Import or Load to Network/Data Manager (рис. 1.17); Export... - кнопка вызова окна для экспорта или записи данных в файл Export or Save from Network/Data Manager (рис. 1.18). Кнопки View, Delete становятся активными только после создания и активизации данных, относящихся к последовательностям входа, цели, выхода или ошибок сети. Кнопка View позволяет просмотреть, а кнопка Delete удалить активизированные данные. Кнопки View, Delete, Initialize..., Simulate..., Train..., Adapt... становятся активными после создания и активизации самой нейронной сети. Они позволяют просмотреть, удалить, инициализировать, промоделировать, обучить или адаптировать нейронную сеть и будут описаны ниже. Прежде всего рассмотрим назначение и способы работы с перечисленными выше окнами. Окно Network/Data Manager Help. Это окно подсказки показано на рис. 1.14 и описывает правила работы с диспетчером Network/Data Manager при создании нейронной сети. 18 Нейронные сети. MATLAB б
*) Netwoik/Oata Manager Help s[30 /8&Й&22&-&?Ж "-ф. ■«««'й-?'. &$»* m&* To, getstarte d ;orf а;пеул prpijlem: doJh&foilowjrig: -,;:;, ;лл.';л'; .г. v^-v. .;.f ;;,.: ■ ffomlife woШ1^асё^гЫМ^^%Ш1СШ^'^^^^^--^ '*%•>'&■■ ■*- ^Select the- network Ш,ше Network list *ahdicircl< (TRAIN.VJ to.opeftv.-. ■;,»■$ i; Here {KlEW.I Рис. 1.14 Чтобы создать нейронную сеть, необходимо выполнить следующие операции: • Сформировать последовательности входов и целей (кнопка New Data), либо загрузить их из рабочей области системы MATLAB или из файла (кнопка Import). • Создать новую нейронную сеть (кнопка New Network), либо загрузить ее из рабочей области системы MATLAB или из файла (кнопка Import). • Выбрать тип нейронной сети и нажать кнопку Train..., чтобы открыть окно для задания параметров процедуры обучения. • Открыть окно Network для просмотра, инициализации, моделирования, обучения и адаптации сети. Окно Create New Data. Это окно показано на рис. 1Л 5 и включает 2 области редактирования текста для записи имени вводимых данных (область Name) и ввода самих данных (область Value), а также б кнопок для указания типа вводимых данных. 1. Система MATLAB 6 19
vl Create New Data - Namei ^■E&l data1 r*az&>!^sp*^z^?£ i01-l;2 31l '•■'•..■%< ',"•>.-.■ :.л уу-;т-'~ .--та»-c-;V^,"r'-->1lt^.i':.?- :а.- ■■ '""-''у .?':;.-4 тшшт Рис. 1.15 Различают следующие типы данных: Inputs (Входы) - последовательность значений входов; Targets (Цели) - последовательность значений цели; Input Delay States (Состояния ЛЗ входа) - начальные условия линии задержки на входе; Layer Delay States (Состояния ЛЗ слоя) - начальные условия линии задержки в слое; Outputs (Выходы) - последовательность значений выхода сети; Errors (Ошибки) - разность значений целей и выходов. Как правило, пользователь задает только последовательности входа и цели, т. е. типы данных Inputs и Targets. При этом следует помнить, что при адаптации нейронной сети данные должны быть представлены в виде массива ячеек. Окно Create New Network. Это окно показано на рис. 1.16 и включает поля для задания параметров создаваемой сети. В зависимости от типа сети количество полей и их названия изменяются. ; */ Creole New Netwaik X'- VS-V'.-l;?- :>•>»'. ^' i ■«,... ■ @E НШ'^ЖФк'Р^^Щ^^Ш^^^] r~ Create:' it Рис. 1.16 Обратимся к описанию полей. Network Name (Имя сети) - стандартное имя сети, присваиваемое GUI-интерфейсом NNTool; в процессе создания новых сетей порядковый номер будет изменяться автоматически. 20 Нейронные сети. MATLAB б
Network Type (Тип сети) - список сетей, доступных для работы с интерфейсом NNTool. Для удобства этот список повторен в нижеследующей таблице. Интерфейс NNTool позволяет создавать нейронные сети только с одним или двумя слоями. №п/п 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Тип сети Competitive Cascade-forward backprop Elman backprop Feed-forward backprop Time delay backprop Generalized regression Hopfteld Linear layer (design) Linear layer (train) LVQ Perceptron Probabalistic Radial basis (exact fit) Radial basis (fewer.neurons) Self-organizing map' Название сети Конкурирующая сеть Каскадная сеть с прямым распространением сигнала и обратным распространением ошибки Сеть Элмана с обратным распространением ошибки Сеть с прямым распространением сигнала и обратным распространением ошибки Сеть с запаздыванием и обратным распростра- . нением ошибки Обобщенная регрессионная сеть Сеть Хопфилда Линейный слой (создание) Линейный слой (обучение) Сеть для классификации входных векторов Персептрон Вероятностная сеть Радиальная базисная сеть с нулевой ошибкой Радиальная базисная сеть с минимальным числом нейронов Самоорганизующаяся карта Кохонена Число слоев 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 Обучаемые параметры IW{l,lJ,b{I} IW{l,l},b{l}, LW{2,1}, 1W{2, l},b{2} IW{l,l}.b{l}. LW{2, 1},Ь{2}, LW{1,1} IW{l,l},b{l}, LW{2, l},b{2} IW{l,l},b{l}, LW{2, I},b{2} IW{1, l},b{l}, LW{2, 1} LW{l,l],b{lJ IW{l,l},b{l} IW{1, l}.b{l} IW{1, 1},LW{2,1} IW{l,l},b{l} IW{l,l},b{l}, LW{2, 1J IW{l,l},b{l}, LW{2, 1} IW{l,l},b{l}, LW{2, l}.b{2} IW{1, 1} Примечания: • Для сетей 2, 3, 7 в данной версии интерфейса NNTool не обеспечивается просмотр структурных схем. .^, • Сети 5, 9 допускают введение линий задержек на входе. ?i *-"*" • Сети 3 допускают введение линий задержек в слое. /. Система MATLAB 6 21
• Сети с двумя слоями имеют последовательную структуру, когда выход первого слоя служит входом второго слоя. Исключение составляют сети 3, которые допускают наличие обратной связи в первом слое и передачу входного сигнала на входы обоих слоев. Продолжим описание полей. Input ranges (Диапазоны входа) -допустимые границы входов, которые либо назначаются пользователем, либо определяются автоматически по имени входной последовательности, выбираемой из списка Get from Inp... . Training function (Функция обучения) - список обучающих функций. Adaption learning function (Функции настройки для режима адаптации) - список функций настроек. Performance function (Функция качества обучения) - список функций оценки качества обучения. Number of layers (Количество слоев) - количество слоев нейронной сети. Properties for (Свойства) - список слоев: Layer 1 (Слой 1), Layer 2 (Слой 2). Number of neurons (Количество нейронов) - количество нейронов в слое. Transfer function (Функция активации) - функция активации слоя. Окно Import or Load to Network/Data Manager. Это окно показано на рис. 1.17 и включает 3 поля. Import о» Load to Netwmk/Data Manage* ' ' **?* Щ Рис. 1.17 Source (Источник) - поле для выбора источника данных. Это либо рабочая область системы MATLAB (кнопка выбора Import fromMATLAB Workspace), либо файл (кнопка выбора Load from disk file). Если выбрана первая кнопка, то в поле Select a Variable вы можете видеть все переменные рабочей области и, выбрав одну из них, например Р1, можете определить ее в поле Destination (Назначение) как последовательность входа Inputs (Входы). Если выбирается кнопка Load from disk file, то активизируется поле MAT-file Name и кнопка Browse, что позволяет начать поиск и загрузку файла из файловой системы. 22 Нейронные сети. MATLAB б
Окно Export or Save from Network/Data Manager. Это окно показано на рис. 1.18 и позволяет передать данные из рабочей области GUI-интерфейса NNTool в рабочую область системы MATLAB или записать их в виде файла на диске. Export or Save from Network/Data Manager . S elect Variables l--~-~ ~...-^~-- -^~-? ;cdt:&JfJ2 netwprtd; P1 T1 ^SeleHphe-ormdre.vajrlabfes. pen (Exp6rti'the.variables ~£Щ~С-,Xv^ :-й„ L; |йЖмДт№^ШрШоглзШ|^ нШШШ / ААл«Л4 -*i4**jeJt~i Cseiect'ttone' 'Safe? т-* i4 tefc ^зкАJ^j^irJ^V *:** *й?*яйv?i«C».^3Jrfi *■. dti Рис. 1Л8 В данном случае нами выбрана переменная network!, которая принадлежит к классу network object и описывает нейронную сеть. После того как эта переменная экспортирована в рабочую область, можно, например, построить модель нейронной сети в системе Simulink с помощью оператора gensim. Диалоговая панель Network показана на рис. 1.19. "/ Netwoik; rctwoik! ПЕЗ шшшшшшёшш^шш ШЩ т ?Ь1Щ Рис. 1.19 Она открывается только в том случае, когда в окне Network/Data Manager выделена созданная сеть и становятся активными кнопки View, Initialize, Simulate, Train, Adapt. /. Система MATLAB 6 23
Панель имеет 6 закладок: View (Просмотреть) - структура сети; Initialize (Инициализация) - задание начальных весов и смещений; Simulate (Моделирование) - моделирование сети; Train (Обучение) - обучение сети; Adapt (Адаптация) - адаптация и настройка параметров сети; Weights (Веса) - просмотр установленных весов и смещений. Особенности работы с соответствующими окнами будут рассмотрены на приведенных ниже примерах создания конкретных нейронных сетей. Пример. Нейронная сеть с прямой передачей сигнала. Создать и обучить нейронную сеть выполнению операции у =■ х? + хг, если заданы последовательности входа Р = [1 0.5 0 1; -2 0 0.5 1] и цели Т = [-1 0.25 0.5 2]. Сформируем последовательности входов и целей в рабочей области GUI-интерфейса NNTool, используя окно Create New Data. Выберем нейронную сеть типа feed-forward backprop с прямой передачей сигнала и с обратным распространением ошибки. Схема этой сети показана на рис. 1.19. Выполним инициализацию сети, для чего выберем закладку Initialize, откроется диалоговая панель, показанная на рис. 1.20. Диапазоны значений исходных данных выберем по входам из ниспадающего меню Get from input. Для ввода установленных диапазонов и инициализации весов надо воспользоваться кнопками Set Ranges (Установить диапазоны) и Initialize Weights (Инициализировать веса). Если требуется вернуться к прежним диапазонам, то следует выбрать кнопки Revert Ranges (Вернуть диапазоны) и Revert Weights (Вернуть веса). -У Netwoik: netwoikl ПЕЗ Рис. 1.20 Затем выполняется обучение сети, для чего выбирается закладка Train и открывается диалоговая панель, показанная на рис. 1.21. 24 Нейронные сети. MATLAB б
■*). Netwaik: nelwoikl View j Initialize ] Simulate Train. j; 'Adapt') 'Weight's | Training Info I Training Parameters I, Optional'Jrtfo I -{ '. 'sf'^Dx T Training Date- .. ; inputs;' . • .. : Targets. - •.. - \'ЩЩЬ\1\йн^Щ:\~г. : ■ Jnirl a ?T; r D sis v St№> s. ' ' -. '..; . -' ' '- '■' - t \- ' ,,.:,_,.. p T ./ ■ , ■:■-■ —'.-: Training Results—- --i '- :: ,'..:.-'....Ll^* .L\- j»J,| Outputs:;;-;=':. -: .= jnetoorkljDufputs ZJ' \ ■ Errors'^; ■ .f ^ =.-.- -; - % ■ '|nebvork1_errors , ::^?!,.Я^|йРг-(('й^8:^лй|ги№(И^№чЙГа!ч5 ' . Manager. : Close ">■■■" Sralri Network- Рис. 1.21 Панель имеет три закладки: Training Info (Информация об обучающих последовательностях) (рис. Training Parametrs (Параметры обучения) (рис. 1.22); Optional Info (Дополнительная информация) (рис. 1.23). 1-21); »,i Netwoik; netwotkl • View \L'inaiajiza-LStmuiate;;rjtrain |;/Adapi.|' Weights JS^'-- ;:. С Training Info- ] "-Training Parameters;- j \6iptJonan'nfou| -;^fjs\c;. Ik у ■ С i,- ".'•, ~' ' ■ {,„■ ~КЛ ,s,f-' v '-••"^•г"ч . •- <'•' j -•'! "'-ГЧУ ■ 'epochs'.-%,„ 1100 ,кщ_йъьг -:: gsj0.1 ;,.^;,;4<--> 'j- - :' goal- .;Л Xjrj " jriu1nc,y;;' max_fall ;, ,"[б ~rnu_max' > ro'errCreduc- • - Ji 'stifow';»/ ,i;;'rn)rt_gracJv апсэ jio llelO 26 is»? /wafts le-010 ,|0.001 :tl'me,i'-'^ •W7Z3f:m^&m Manager Close- •f! Train Network Рис. 1.22 Последняя закладка применяется, когда в процессе обучения используются контрольные и тестовые последовательности. 1. Система MATLAB 6 25
*} Network; netwoikt View\]' .initialize 1 ^ Simula^ :>Tr^n^ \ Training infovj ";^r|[nirig. Parameters. eDE3 t-*43ku*=&-" Manager- Рис. 1.23 Применяя эти закладки, можно установить имена последовательностей входам цели, а также параметров процедуры обучения. Теперь можно приступить к обучению сети (кнопка Train Network). тттттттт щ ^орТиипя' Рис. 1.24 Качество обучения сети с прямой передачей сигнала йа выбранной обучающей последовательности поясняется на рис. 1.24. Практически нулевая точность достигается за 13 циклов обучения. Соответствующие веса и смещения можно увидеть, если выбрать закладку Weights (рис. 1.25). 26 Нейронные сети. MATLAB 6
Select ihe weight or бТй Vo'view: 1 iw{1.1} - Weight to layer 1 frominputi jrj-.^V^^ [-1.939-2.2747] 11 ^v^raws*^ уЩ ;,,. Manager':,: lactose.? Рис. 1.25 Для удобства работы можно экспортировать созданную нейронную сеть в рабочую область системы MATLAB и получить информацию о весах и смещениях непосредственно в рабочем окне системы: networkl.IW{1, 1}, networkl.b{1} ans = -1.9390 -2.2747 ans = 1.1389 network!.LW{2, 1}, networkl.b{2) ans = -1.5040 ans = 0.5024 Результаты обучения можно просмотреть в окне Network/Data Manager, выбрав кнопку Manager (рис. 1.25). Появляется окно (рис. 1.26); теперь, активизируя имена последовательностей выхода или ошибок networkl„outputs и networkl_errors, можно просмотреть результаты, используя кнопку View. Получаем выходные данные, практически равные целям, и ошибки порядка 10"14. -У Netwo>k/Da!a Manager inputs: Г".?»¥* ,V'^t^*4'Networl<s^vrt?P"'-- т Input Delay State's:^- '.\ui- ■.■;:v.ta£-.sraO' nelwoik1_oulputs ■^;тт?тж Layer Delay Statesr^B* l Networks only ..^fJi^Li-'g^ ?.,,> '^i^/^ju^.lJ^.^^.^iJ,^^.^^ Рис. 1.26 /. Система MATLAB 6 27
Пример. Классификация входных векторов. Создать нейронную сеть в виде персептрона, который разделяет векторы входа на два класса. Обозначим эти классы как 0 и 1. Обучающую последовательность сформируем в виде двух массивов ячеек: массива входов Р = {[2; 2] | 1; 2] [-2; 2] [-1; 1 ] [ 1; -2]} и массива целей Т = {0 0 1 1 I}, который задает принадлежность каждого вектора входа к определенному классу. Выполним эту операцию в рабочей области системы MATLAB, а затем импортируем их в рабочую область интерфейса NNTool. Зададим персептрон с одним нейроном, функцией активации HARDLIM и правилом настройки LEARNP. Для этого из списка нейронных сетей выберем тип сети Perccptron (рис. 1.27) и зададим требуемые параметры. «£ Cieate New NetwoiR' -cJE3 . 'NetvrarkjvJameJnetwoiltf Jnpirtranges:" ■&-£[-2 2;-2 21 Getfrom input * ; Ш1# Trgnsfqrfu^on^jHARDUM "Э Uear'nlngTunclioniC JLEARNP 3. ^*^^^"}|^Р*^^ ■ EcreateV Рис. 1.27 Чтобы увидеть структурную схему сети, воспользуемся кнопкой View (рис. 1.28). ^v*wo,HewNetwoIk ■ > tel;« ■ » IW{1,1} ч 1 х&- 1 ^т/ 2 3= - 1 ШИШШШШШ ШШ£^|£^'f £'"- Close.1 V j^^-3S^r^i;i^.Xi^;:.-„J-_ ц*.:.-. ,i_. •t t -.•i Рис. 1.28 • Теперь выполним инициализацию сети, используя закладку Initialize, а затем адаптацию и настройку параметров сети, используя закладку Adapt окна Network. Для этого следует указать имена входа и цели, а также задать количество циклов адаптации (в данном случае достаточно трех циклов) и нажать кнопку Adapt Network. В результате настройки будут установлены следующие значения весов и смещений, которые можно увидеть, выбрав закладку Weights. Для данной сети вектор весов равен 28 Нейронные сети. MATLAB 6
IW{ 1,1} = [-3 -2], а смещение b {1} = I. Таким образом, линия переключения, разделяющая плоскость на 2 области, описывается следующим образом: L: -Зр, - 2р2 + 1 = 0. Перейдя в окно Network/Data Manager, можно просмотреть значения сигналов на выходе и ошибку сети (рис. ] .29, а и 6 соответственно). Нетрудно убедиться, что на обучающей последовательности сеть обучена точно классифицировать входные векторы. f). Data: network!„output* \ , :i pj x -)■ Data: netwotM„erTOts .,. 3:;ЯП£Я а б Рис. 1.29 Пример динамической линейной сети: Спроектировать динамическую линейную нейронную сеть для предсказания синусоидальной функции по четырем предшествующим значениям. Архитектура сети: линейная нейронная сеть с линией задержки по входу на 4 такта, с одним входом, значения которого заключены в диапазоне [-1 1], и одним выходом. Обучающая последовательность: входная последовательность time = 0:0.1:10; Р = sin(time); последовательность целей т = Р; Поскольку предполагается адаптивная настройка параметров сети, то обучающая последовательность должна быть представлена в виде массива ячеек Р = con2seq(P); Т = Р; Целесообразно сформировать эти последовательности в рабочей области системы MATLAB, а затем импортировать их в рабочую область интерфейса NNTooI. Затем выберем сеть типа Linear layer (train) с линией задержки по входу (рис. 1.30), инициализируем ее, установим начальные значения весов, выполним адаптацию сети, предварительно установив имена последовательностей входа и цели, а также указав количество циклов адаптации - 250. 1. Система MATLAB 6 29
•jji Create Hew Network -@G '. Network Narne;|netwo rk1 -ЫейогкТурёГ|Linear layer (train) •шт^т mmm :-i i ; Nurnberof.neUrbhs. 1 j Get from input v|£ 'Tnbui^delayjSe£tor-.f--J[1 2 3 4 5] -й^ШЙЖ;^,^-^ '«й5йЭ^Й8йаЕав Рис. 1.30 По окончании проектирования экспортируем нейронную сеть в рабочую область системы MATLAB. Теперь можно построить модель нейронной сети в системе Simulink и построить ее схему (рис. 1.31): gens im (networkl) □ nellinl/NeuiaiNetwoifc/Layetl »ПП шшшшятшшш^гшал В-Ш Neural Netwoik | в ШЕЕЙ I \-'Ш Onlays 1 | Ь ^} puieltn f р{1} Delays 1 -чмй ^щгщщШШ1ШШШ|ШШ1^ШШ Рис. 1.31 Эта схема в отличие от иллюстративных схем на рис. 1.19 и 1.29 является в полной мере функциональной схемой и может быть применена для моделирования нейронной сети. Используя описание нейронной сети, можно просмотреть веса и смещение в рабочем окне системы MATLAB: iw = networkl.iw{l,l} IW = 0.8135 0.4798 0.1716 -0.1143 -0.3858 b = networkl.Ь{1} b = 0.0024 Извлечем информацию об ошибке сети и построим соответствующий график (рис. 1.32). Обратите внимание на специальную форму применения оператора cat, которая позволяет преобразовать массив числовых ячеек в числовой массив. 30 Нейронные сети. MATLAB 6
E = cat(2,networkl_errors{:}); plot(time(10:101}, E(10:101}} 0 '-1 %■■-*: к to"3 ' Пофешность обучения, Е,£й\^ . • г—-?—h^^si—5—Ь—1—1—t~x ~ 1 /1 1 \ 1 1 * I / :::::!:! -"\ — 1 ш Щ *a':*Vt'^ wsmimmmimmm Рис. 1.32 Из анализа рисунка следует, что погрешность обучения не превышает 0.01. Знакомство с возможностями графического интерфейса NNTool позволяет сделать вывод, что'это средство может быть весьма полезным на начальной стадии изучения и сравнительного анализа нейронных сетей. 1.3. Демонстрационные примеры ППП NNT Перечень всех демонстрационных примеров, включенных в ППП NNT, можно получить по команде help nndemos. Персептроны demopl demop4 demop5 demop6 Классификация с использованием персептрона с двумя входами Формирование входных векторов внешнего слоя Обучение с использованием нормированной функции настройки Пример линейно неразделимых векторов Линейные сети demolinl demolin2 demolin4 demolin5 demolin6 demolin7 demolin8 Радиальные базисные се jlemorbl demorb3 demorb4 Пример функционирования линейной сети Обучение линейного нейрона Задача линейной аппроксимации Задача с неполными данными Задача с линейно зависимыми данными Оценка влияния параметра скорости настройки Адаптируемый линейный слой ти Радиальные базисные сети Пример неперекрывающихся функций активации Пример перекрывающихся функций активации _ /. Система MATLAB б 31
demogrn 1 demopnn 1 Сеть GRNN и аппроксимация функций Сеть PNN и классификация векторов Сети кластеризации и классификации данных Самоорганизующиеся сети democl demosml demosm2 Настройка слоя Кохонена Одномерная карта Кохонена Двумерная карта Кохонена LVQ-сети demolvql Классификация векторов Рекуррентные сети Сети Элмана appelml Сеть Элмана Сети Хопфилда dcmohopl demohop2 demohop3 demohop4 Пример двумерной модифицированной сети Хопфилда Пример неустойчивой точки равновесия Пример трехмерной модифицированной сети Хопфилда Пример устойчивых паразитных точек равновесия Применение нейронных сетей applinl applin2 appelml appcrl Предсказание стационарного сигнала Предсказание нестационарного сигнала Детектирование амплитуды с помощью сети Элмана Распознавание символов Нейронные сети и системы управления (среда Simulink) predcstr narmamaglev mrefrobotarrn Управление каталитическим реактором Управление магнитной подушкой Управление звеном робота Все демонстрационные примеры описаны в тексте книги. 32 Нейронные сети. MATLAB 6
2. МОДЕЛЬ НЕЙРОНА И АРХИТЕКТУРА СЕТИ 2.1. Модель нейрона 2.1.1. Простой нейрон Элементарной ячейкой нейронной сети является нейрон. Структура нейрона с единственным скалярным входом показана на рис. 2Л, а. Виод Нейрон без смещения: ^ Вход ■И t Q=JOj?) Нейрон со смещением 2 ►■ Г Гь ^1 ■—1 t а=Дт*рЩ Рис. 2.1 Скалярный входной сигнал р умножается на скалярный весовой коэффициент w, и результирующий взвешенный вход w*p является аргументом функции активации нейрона/, которая порождает скалярный выход а. Нейрон, показанный на рис. 2.1, б, дополнен скалярным смещением Ъ. Смещение суммируется со взвешенным входом w*p и приводит к сдвигу аргумента функции / на величину Ь. Действие смещения можно свести к схеме взвешивания, если представить, что нейрон имеет второй входной сигнал со значением, равным 1. Вход п функции активации нейрона по-прежнему остается скалярным и равным сумме взвешенного входа и смещения Ь. Эта сумма является аргументом функции активации/; выходом функции активации является сигнал а. Константы w и Ъ являются скалярными параметрами нейрона. Основной принцип работы нейронной сети состоит в настройке параметров нейрона таким образом, чтобы поведение сети соответствовало некоторому желаемому поведению. Регулируя веса или параметры смещения, можно обучить сеть выполнять конкретную работу; возможно также, что сеть сама будет корректировать свои параметры, чтобы достичь требуемого результата. Уравнение нейрона со смещением имеет вид a = f(w.*p+b*l) (2.1) Как уже отмечалось, смещение b — настраиваемый скалярный параметр нейрона, который не является входом, а константа 1, которая управляет смещением, рассматривается, как вход и может быть учтена в виде линейной комбинации векторов входа а - [w b] (2.2) 33
2.1.2. Функция активации Функции активации (передаточные функции) нейрона могут иметь самый различный вид. Функция активации/, как правило, принадлежит к классу сигмоидальных1 функций с аргументом п и выходом а. Рассмотрим три наиболее распространенные формы функции активации. Единичная функция активации с жестким ограничениям hardlim. Эта функция описывается соотношением а - hardlim(«) = l(n) и показана на рис. 2.2. Она равна 0, если п < 0, и 1, если п > 0. Л -г* » Рис. 2.2. В состав ППП Neural Network Toolbox входит М-функция hardlim, реализующая функцию активации с жесткими ограничениями. Теперь можно построить график этой функции, применяя операторы языка MATLAB: п = -5:0.1:5; plot{n,hardlim(п),'с+:'); В результате получим график функции hardlim в диапазоне значений входа от -5 до + 5 (рис. 2.2). Линейная функция активации purelin. Эта функция описывается соотношением а = purelin(n) = п и показана на рис. 2.3. Рис. 2.3. Логистическая функция активации logsig. Эта функция описывается соотношением а = logsig(fi) = 1/(1 + ехр(-л)) и показана на рис. 2.4. Она принадлежит к классу сигмоидальных функций, и ее аргумент может принимать любое значение в диапазоне от -то до -над, а выход изменяется в диапазоне от 0 до 1. В ППП Neural Network Toolbox она представлена М-функцией logsig. Благодаря свойству дифференцируемости эта функция часто используется в сетях с обучением на основе метода обратного распространения ошибки. 1 Сигмоидальной (S-образной) функцией называется непрерывная функция, имеющая две горизонтальные асимптоты и одну точку перегиба. 34 Нейронные сети. MATLAB 6
а д 1-- IZ -5 Рис. 2.4. Символ в квадрате в правом верхнем углу графика характеризует функцию активации. Это изображение используется на структурных схемах нейронных сетей. В ППП Neural Network Toolbox включены и другие функции активации. Используя язык MATLAB, пользователь может создавать и свои собственные уникальные функции. 2.1.3. Нейрон с векторным входом Нейрон с одним вектором входа р с R элементамирир2, ..., pRпоказан на рис. 2.5. Здесь каждый элемент входа умножается на веса W\ |, wUt..., и^1Л соответственно и взвешенные значения передаются на сумматор. Их сумма равна скалярному произведению вектора — строки W на вектор входа р. Вход Ъ р '3 Нейрон: с векгорньт ixo дот Vfll wl2 wl3 wlR Нейрон имеет смещение b, которое суммируется со взвешенной суммой входов. Результирующая сумма п равна n=wnp1+wl2p2 + ••• +wiRpR + b (2.3) и служит аргументом функции активации/. В нотации языка MATLAB это выражение записывается так: п = W*p + Ь. (2.4) Структура нейрона, показанная выше, содержит много лишних деталей. При рассмотрении сетей, состоящих из большого числа нейронов, будет использоваться укрупненная структурная схема нейрона (рис. 2.6). 2. Модель нейрона и архитектура сети 35
Вход Нейрон 1x1 -V-" a=f(W*p+b) Рис. 2.6 Вход нейрона изображается в виде темной вертикальной черты, под которой указывается количество элементов входа R. Размер вектора входа р указывается ниже символа р и равен /?xl. Вектор входа умножается на вектор-строку W длины R. Как и прежде, константа 1 рассматривается как вход, который умножается на скалярное смещение Ь. Входом п функции активации нейрона служит сумма смещения Ъ и произведения W*p. Эта сумма преобразуется функцией активации^ на выходе которой получаем выход нейрона а, который в данном случае является скалярной величиной. Структурная схема, приведенная на рис. 2.6, называется слоем сети. Слой характеризуется матрицей весов W, смещением Ь, операциями умножения W*p, суммирования и функцией активации /. Вектор входов р обычно не включается в характеристики слоя. Каждый раз, когда используется сокращенное обозначение сети, размерность матриц указывается под именами вскторно-матричных переменных. Эта система обозначений поясняет строение сети и связанную с ней матричную математику. На укрупненной структурной схеме для обозначения типа функции активации применяются специальные графические символы; некоторые из них приведены на рис. 2.7, где. а - ступенчатая, б - линейная, в — логистическая функция. л * L hardlim а purelin б Рис. 2.7 logsig б 2.2. Архитектура нейронных сетей Реальная нейронная сеть может содержать один или большее количество слоев и соответственно характеризоваться как однослойная или как многослойная. 2.2.1. Однослойные сети Развернутая схема сети из одного слоя с R входными элементами и S нейронами показана на рис. 2.8. 36 Нейронные сети. MATLAB 6
Егюд Слой нейронов / 1 2 "г ш S "г / а=^*р+Ъ) Рис. 2.8 В этой сети каждый элемент вектора входа соединен со всеми входами нейрона и это соединение задается матрицей весов W; при этом каждый i-й нейрон включает суммирующий элемент, который формирует скалярный выход n(i). Совокупность скалярных функций n(i) объединяется в 5-элементный вектор входа п функции активации слоя. Выходы слоя нейронов формируют вектор-столбец а, и, таким образом, описание слоя нейронов имеет вид: a = f(W*p+b)- (2.5) Количество входов R в слое может не совпадать с количеством нейронов S. В каждом слое, как правило, используется одна и та же функция активации. Однако можно создавать составные слои нейронов с использованием различных функций активации, соединяя сети, подобные изображенной на рис. 2.8, параллельно. Обе сети будут иметь те же самые входы, и каждая сеть будет генерировать определенную часть выходов. Элементы вектора входа передаются в сеть через матрицу весов W, имеющую вид: W = wn wl2 w21 w22 w- lws\ "52 w SR (2.6) Заметим, что индексы строк матрицы W указывают адресатов (пункты назначения) весов нейронов, а индексы столбцов - какой источник является входом для этого веса. Таким образом, элемент матрицы весов wt2 = W(l, 2) определяет коэффициент, на который умножается второй элемент входа при передаче его на первый нейрон. Для однослойной сети с S нейронами укрупненная структурная схема показана на рис. 2.9. 2. Модель нейрона и архитектура сети 37
Вход Нейрон _-* I—Н w |—1^п I -*1 Sat» (+)—►) f [ —t*] I а S*I a=fl^W*p+b) Рис. 2.9 Здесь р - вектор входа размера Rx\, W - весовая матрица размера Sx/?, a, b, n - векторы размера 5x1. 2.2.2. Многослойные сети Рассмотрим сети, имеющие несколько слоев. Будем называть весовые матрицы, соединенные с входами, весами входа слоя, а весовые матрицы для сигналов, исходящие из слоя, назовем весами выхода слоя. Далее, будем использовать верхние индексы, чтобы указать источник и адресат для различных весов и других элементов нейронной сети. Чтобы пояснить это, рассмотрим сначала только один, первый слой многослойной сети (рис. 2.10). Sbcl •Wftw^+b1) Рис. 2.10 Обозначим весовую матрицу, связанную с входами, через IW11, верхние индексы которой указывают, что источником входов является первый слой (второй индекс) и адресатом является также первый слой (первый индекс). Элементы этого слоя, такие, как смещение b\ вход функции активации п1 и выход слоя а1, имеют верхний индекс 1, чтобы обозначить, что они связаны с первым слоем. В дальнейшем для матриц весов входа и выхода слоя будут использованы обозначения IW(Input Weight) и LW(Layer Weight) соответственно. Когда сеть имеет несколько слоев, то каждый слой имеет свою матрицу весов W, вектор смещения Ъ и вектор выхода а. Чтобы различать весовые матрицы, векторы выхода и т. д. для каждого из этих слоев, введем номер слоя как верхний индекс для представляющей интерес переменной. Использование этой системы обозначений для сети из трех слоев можно видеть на показанной ниже структурной схеме и из уравнений, приведенных в нижней части рис. 2.11. 38 Нейронные сети. MATLAB 6
Вход Первый слой Второй слой Третий слой V_^ < / V J V ) а' = f '(IW"p +b') аг = f 2(1ЛУ:'а1 +Ю a? = f'(LW': a" + liJ) Рис. 2.11 Сеть, показанная выше, имеет R входов, S1 нейронов в первом слое, S2 нейронов во втором слое и т. д. Для общности будем считать, что различные слои имеют различное число нейронов. На смещения для каждого нейрона подан постоянный входной сигнал 1. Заметим, что выходы каждого промежуточного слоя служат входами для следующего слоя. Таким образом, слой 2 может быть рассмотрен как один слой сети с 51 входами, S нейронами и 51 х S2 матрицей весов Wa- Вход к слою 2 есть 1, а выход - 2. Теперь, когда обозначены все векторы и матрицы слоя 2, можно трактовать его как самостоятельную однослойную сеть. Такой подход может быть использован к любому слою сети. Слои многослойной сети имеют различные назначения. Слой, который образует выход сети, называется слоем выхода. Все другие слои называются скрытыми слоями. Трехслойная сеть, показанная выше, имеет выходной слой (слой 3) и 2 скрытых слоя (слой 1 и слой 2). Эта же трехслойная сеть может быть представлена в виде укрупненной структурной схемы (рис. 2.12). Вход Первый слой Второй слой Третий слой Рис. 2.12 Заметим, что выход третьего слоя а3 обозначен через у. Эта сделано для того, чтобы подчеркнуть, что выход последнего слоя является выходом сети. Многослойные сети обладают весьма мощными возможностями. Например, двухслойная сеть, в которой первый слой содержит сигмоидальную, а второй слой -линейную функцию активации, может быть обучена аппроксимировать с произвольной точностью любую функцию с конечным числом точек разрыва. 2. Модель нейрона и архитектура сети 39
В заключение можно сформулировать следующие выводы. Вход функции активации нейрона определяется смещением и суммой взвешенных входов. Выход нейрона зависит как от входов нейрона, так и от вида функции активации. Один нейрон не может решать сложные задачи, однако несколько нейронов, объединенных в один или несколько слоев, обладают большими возможностями. Архитектура сети состоит из описания того, сколько слоев имеет сеть, количества нейронов в каждом слое, вида функции активации каждого слоя и информации о соединении слоев. Архитектура сети зависит от той конкретной задачи, которую должна решать сеть. Работа сети состоит в вычислении выходов сети на основе известных входов с целью формирования желаемого отображения вход/выход. Конкретная задача определяет число входов и число выходов сети. Кроме числа нейронов в выходном слое сети, для проектировщика важно число нейронов в каждом слое. Большее количество нейронов в скрытых счоях обеспечивает более мощную сеть. Если должно быть реализовано линейное отображение, то следует использовать нейроны с линейными функциями активации. При этом надо помнить, что линейные нейронные сети не могут формировать нелинейные отображения. Использование нелинейных функций активации позволяет настроить нейронную сеть на реализацию нелинейных связей между входом и выходом. Сети со смещением позволяют формировать более сложные связи между входами и выходами, чем сети без смещения. Например, нейрон без смещения, когда все входы нулевые, будет всегда задавать вход функции активации равным нулю, однако нейрон со смещением может быть обучен так, чтобы при тех же условиях задать вход функции активации произвольной формы. В многослойных сетях часто применяются нелинейные сигмоидальные функции активации типа логистической (см. рис. 2.7, е) или гиперболического тангенса (рис. 2.13). •И А 0 -] а -£ а = tansig(/i) Рис. 2.13 Если последний слой многослойной сети использует такие функции активации, то выходы сети будут ограничены. Когда в выходном слое используются линейные нейроны, то выходы сети могут принимать произвольные значения. В ППП NNT предусмотрены М-функции, позволяющие вычислять производные функций активации. Чтобы получить информацию об имени нужной функции, следует воспользоваться следующим оператором: <имя_функции_активации>('с!епу1) Например, обращение вида tansig(•deriv■) ans = dtansig дает возможность узнать, что имя М-функции, позволяющей вычислить производную гиперболического тангенса, dtansig. 40 Нейронные сети. MATLAB б
2.2.3. Сети с прямой передачей сигнала Однослойная сеть с S нейронами с функциями активации logsig, имеющая R входов, показана на рис. 2.14. Входы Слон нейронов X X > —► а-, Р Вход Слой нейронов *~~*—' * Sx\ Sx] R Sx) a = f(Wp+b) a =/(Wp+b) Рис. 2.14 Эта сеть, не имеющая обратных связей, называется сетью с прямой передачей сигнала. Такие сети часто имеют один или более скрытых слоев нейронов с сигмоидальными функциями активации, в то время как выходной слой содержит нейроны с линейными функциями активации. Сети с такой архитектурой могут воспроизводить весьма сложные нелинейные зависимости между входом и выходом сети. Для пояснения обозначений в многослойных нейронных сетях внимательно изучите двухслойную сеть, показанную на рис. 2.15 Вход Скрытый слой 1 >/ А Выходной слой —Н Ш" К, "' I l_J LW" L »* I 1 *" 4*2 ^/^Ь^З?^ / i—► b' -S 4x1 |—| JJ~^r~LAl><i \_ 4*] 4 3x1 3 3x1 _• ^_ a^iansigClW'p'-bb1) аг= purelinCLW21 a1 ■§- b2) Рис. 2.15 Эта сеть может быть использована для аппроксимации функций. Она может достаточно точно воспроизвести любую функцию с конечным числом точек разрыва, если задать достаточное число нейронов скрытого слоя. 2. Модель нейрона и архитектура сети 41
2.3. Создание, инициализация и моделирование сети Формирование архитектуры сети Первый шаг при работе с нейронными сетями - это создание модели сети. Для создания сетей с прямой передачей сигнала в ППП NNT предназначена функция ncwff. Она имеет 4 входных аргумента и 1 выходной аргумент - объект класса network. Первый входной аргумент-это массив размера Rx2, содержащий допустимые границы значений (минимальное и максимальное) для каждого из R элементов вектора входа; второй - массив для задания количества нейронов каждого слоя; третий - массив ячеек, содержащий имена функций активации для каждого слоя; четвертый - имя функции обучения. Например, следующий оператор создает сеть с прямой передачей сигнала: net = newff([-l 2; 0 5],[3,1],{'tansig','purelin'},'traingd'); Эта-сеть использует 1 вектор входа с двумя элементами, имеющими допустимые границы значений [-1 2] и [0 5]; имеет 2 слоя с тремя нейронами в первом слое и одним нейроном во втором слое; используемые функции активации: tansig-в первом слое, purelin - во втором слое; используемая функция обучения - traingd. М-функция newff не только создает архитектуру сети, но и инициализирует ее веса и смещения, подготавливая нейронную сеть к обучению. Однако существуют ситуации, когда требуется специальная процедура инициализации сети. Инициализация сети После того как сформирована архитектура сети, должны быть заданы начальные значения весов и смещений, или, иными словами, сеть должна быть инициализирована. Такая процедура выполняется с помощью метода init для объектов класса network. Оператор вызова этого метода имеет вид: net = init(net); Способ инициализации зависит от выбора параметров cemnet.initFcn Hnet.layers{i}.initFcn, которые устанавливают ту или иную функцию инициализации. Параметр net.initFcn задает функцию инициализации для всей сети. Для сетей с прямой передачей сигнала по умолчанию используется функция инициализации initlay, которая разрешает для каждого слоя сети использовать собственную функцию инициализации, определяемую свойством netlayers {i} .initFcn. Для сетей с прямой передачей сигнала обычно применяется одна из двух функций инициализации слоя: initwb или initnw. Функция initwb позволяет использовать собственные функции инициализации для каждой матрицы весов входа и вектора смещений, задавая параметры net.inputWeights{i,j}.initFcn и net.biases{ i} .initFcn. Для сетей без обратных связей с линейными функциями активации веса обычно инициализируются случайными значениями из интервала [-1 1]. Функция initnw применяется для слоев, использующих сигмоидальные функции активации. Она генерирует начальные веса и смещения для слоя так, чтобы активные области нейронов были распределены равномерно относительно области значений входа. Это имеет несколько преимуществ по сравнению со случайным распределением весов и смещений: во-первых, избыток нейронов минимален, поскольку активные области всех нейронов соответствуют области значений входа, во-вторых, обучение выполняется быстрее, 42 Нейронные сети. MATLAB б
так как для каждой области значений входа найдутся нейроны с той же областью определения аргумента. В рассмотренном выше примере создания сети с прямой передачей сигнала метод init вызывается автоматически при обращении к М-функции newff. Поэтому инициализация сети выполняется по умолчанию. Если же пользователь хочет применить специальный метод инициализации или принудительно установить значения весов и смещений, то он может непосредственно обратиться к функции init. Например, если мы хотим заново инициализировать веса и смещения в первом слое, используя функцию rands, то надо ввести следующую последовательность операторов: net.layers{1}.initFcn = ■ initwb'; net.inputWeights{l,l}.initFen = 'rands'; net.biases{1,1}.initFcn = 'rands'; net.biases{2,1}.initFcn = 'rands'; net = init(net); Моделирование сети Статические сети. Статическая нейронная сеть характеризуется тем, что в ее составе нет элементов запаздывания и обратных связей. Ее поведение не зависит от типа вектора входа, поскольку последовательно подаваемые векторы можно рассматривать как действующие одновременно или как один объединенный вектор. Поэтому в качестве модели статической сети рассмотрим сеть, показанную на рис. 2.16. Вход Линейный нейрон г^\ г ч V_/ V_! / Рис. 2.16 Это однослойная сеть с двухэлементным вектором входа и линейной функцией активации. Для задания такой сети предназначена М-функция newlin из ГШП Neural Network Toolbox, которая требует указать минимальное и максимальное значение для каждого из элементов входа; в данном случае они равны -1 и 1 соответственно, а также количество слоев, в данном случае 1. % Формирование однослойной линейной сети net с двухэлементным % входным сигналом со значениями от -1 до 1 net = newlin([-l 1;-1 1],1); Определим весовую матрицу и смещение равными W = [1 2], b = 0, и зададим эти значения, используя описание структуры сети net.XW{l,l} = [1 2]; % Присваивание значений весов net.b(l) = 0; % Присваивание значения смещения 2. Модель нейрона и архитектура сети 43
"-Г .0. » "о" .-1. "о" 1 ■ " 1" -1 Предположим, что на сеть подается такая последовательность из четырех векторов входа: {2.1) Поскольку сеть статическая, можно перегруппировать эту последовательность в следующий числовой массив: Р ■ [-1 0 О 1; О -И -1]; Теперь можно моделировать сеть: А = si.m(net:,F) % Моделирование сети net с вектором входа Р и выходом А А = -1 -2 2 -1 Результат нужно интерпретировать следующим образом. На вход сети подается последовательность из четырех входных сигналов, и сеть генерирует вектор выхода из четырех элементов. Результат был тот же самый, если бы имелось 4 одинаковых сети, функционирующих параллельно, и на каждую сеть был подан один из векторов входа и генерировался один из выходов. Динамические сети. Когда сеть содержит линии задержки, вход сети надо рассматривать как последовательность векторов, подаваемых на сеть в определенные моменты времени. Чтобы пояснить этот случай, рассмотрим простую линейную сеть, которая содержит 1 элемент линии задержки (рис. 2.17). Входы Линейный нейрон 7*7^ —, «(0 . Е >-J- т c$=wii p(f)+Witp(tA) Рис. 2.17 Построим такую сеть: % Создание однослойной линейной сети с линией задержки [0 1] net = newlin{[-1 1],1,[О 1] ) ; Зададим следующую матрицу весов W = [1 2] и нулевое смещение: net.Ш{1,1} = [1 2]; % Присваивание значений весов nefc.biasConnect =0; % Присваивание значений смещений Предположим, что входная последовательность имеет вид {-1, -1/2,1/2,1}, и зададим ее в виде массива ячеек Р = {-1 -1/2 1/2 1}; Теперь можно моделировать сеть, используя метод sim: 44 Нейронные сети. MATLAB 6
A = sim(net,P) % Моделирование сети net с входным сигналом Р и выходом А А = [-1] [-5/21 [--1/2] [2] Действительно, [1 г] о = И [• 2] -1/2 -1 = [-5/2] [1 2] 1/2 -1/2 = [-1/2] [1 2] 1 Ч 1/2 = [2]. (2-8) Введя массив ячеек, содержащий последовательность входов, сеть сгенерировала массив ячеек, содержащий последовательность выходов. В данном случае каждый выход формируется согласно соотношению a(t)=p(t)+2p(t-l). (2.9) При изменении порядка следования элементов во входной последовательности будут изменяться значения на выходе. Если тс же самые входы подать на сеть одновременно, то получим совершенно иную реакцию. Для этого сформируем следующий вектор входа: Р = [-1 -1/2 1/2 1]; После моделирования получаем: А = sim(net,P) % Моделирование сети А = -1 -1/2 1/2 1 Результат такой же, как если применить каждый вход к отдельной сети и вычислить ее выход. Поскольку начальные условия для элементов запаздывания не указаны, то по умолчанию они приняты нулевыми. В этом случае выход сети равен [1 2] -1 -1/2 1/2 1 0 0 0 0 = -1 -1/2 1/2 I]. (2.10) Если требуется моделировать реакцию сети для нескольких последовательностей сигналов на входе, то надо сформировать массив ячеек, размер каждой из которых совпадает с числом таких последовательностей. Пусть, например, требуется приложить к сети 2 последовательности: (2.11) ^(1) = Н],^(2)=[-1/2],^(3) = [1/2], Л(4)=[Ц; М0 = Ш. Р2(2) = [1/2], р2(3) = Н/2]. /72(4)=[-1]. Вход Р в этом случае должен быть массивом ячеек, каждая из которых содержит два элемента по числу последовательностей Р = {[-1 1] [-1/2 1/2]'[1/2 -1/2] [1 -1]}; Теперь можно моделировать сеть: А = sim(net,P); % Моделирование сети net с входным сигналом Р и выходом А Результирующий выход сети равен А = {[-1 1] [-5/2 5/2] [-1/2 1/2] [2 -2]} В самом деле, 2. Модель нейрона и архитектура сети 45
[1 2] -1 1 О О 1/2 -1/2 -1/2 1/2 = [-1 1]. & 2] = [-1/2 1/2], [l 2] -1/2 -1 i 1/2 - 1/2" 1 i 1 1/2 = [-5/2 5/2], = [2 -2]} На рис. 2.18 показан формат массива Р, представленного Q выборками (реализациями), при моделировании сети. г-— {lPi(l).P2<D,. 4 ^ _ Q-я выборка ... Pod)], [pi(2>. pi(2) p0(2)1 1и(73). Р;{Г5).. Первая выборка ~1г Рис. 2.18 В данном случае это массив ячеек с одной строкой, каждый элемент которой объединяет Q реализаций вектора р - [pi(TiS), Рг(Т$)> ■ • •» PoX^S)! - Для некоторого момента времени TS. Если на вход сети подается несколько векторов входа, то каждому входу будет соответствовать 1 строка массива ячеек. Представление входов как массива ячеек соответствует последовательному представлению наблюдаемых данных во времени. Представление вектора входа может быть интерпретировано иначе, если сформировать временные последовательности для каждой реализации, как это показано на рис. 2.18. Тогда можно говорить о том, что на вход сети подается Q выборок из интервала времени [1, TS], которые могут быть описаны числовым массивом Р вида P = [[pi(D, Pi(2),....Pi(7S)];[p2(l), Р2(2),...,р2(Г5)]; -;[pflU). ре(2),~.,Ре(Ш]. (2.12) Представление входов как числового массива выборок в формате double соответствует групповому представлению данных, когда реализации вектора входа для всех значений времени на интервале выборки обрабатываются потоком. 46 Нейронные сети. MATLAB б
3. ОБУЧЕНИЕ НЕЙРОННЫХ СЕТЕЙ При решении с помощью нейронных сетей прикладных задач необходимо собрать достаточный и представительный объем данных для того, чтобы обучить нейронную сеть решению таких задач. Обучающий набор данных - это набор наблюдений, содержащих признаки изучаемого объекта. Первый вопрос, какие признаки использовать и сколько и какие наблюдения надо провести. Выбор признаков, по крайней мере первоначальный, осуществляется эвристически на основе имеющегося опыта, который может подсказать, какие признаки являются наиболее важными. Сначала следует включить все признаки, которые, по мнению аналитиков или экспертов, являются существенными, на последующих этапах это множество будет сокращено. Нейронные сети работают с числовыми данными, взятыми, как правило, из некоторого ограниченного диапазона. Это может создать проблемы, если значения наблюдений выходят за пределы этого диапазона или пропущены. Вопрос о том, сколько нужно иметь наблюдений для обучения сети, часто оказывается непростым. Известен ряд эвристических правил, которые устанавливают связь между количеством необходимых наблюдений и размерами сети. Простейшее из них гласит, что количество наблюдений должно быть в 10 раз больше числа связей в сети. На самом деле это число зависит от сложности того отображения, которое должна воспроизводить нейронная сеть. С ростом числа используемых признаков количество наблюдений возрастает по нелинейному закону, так что уже при довольно небольшом числе признаков, скажем 50, может потребоваться огромное число наблюдений. Эта проблема носит название "проклятие размерности". Для большинства реальных задач бывает достаточным нескольких сотен или тысяч наблюдений. Для сложных задач может потребоваться большее количество, однако очень редко встречаются задачи, где требуется менее 100 наблюдений. Если данных мало, то сеть не имеет достаточной информации для обучения, и лучшее, что можно в этом случае сделать, - это попробовать подогнать к данным некоторую линейную модель. 3.1. Процедуры адаптации и обучения После того как определено количество слоев сети и число нейронов в каждом из них, нужно назначить значения весов и смещений, которые минимизируют ошибку решения. Это достигается с помощью процедур обучения. Путем анализа имеющихся в распоряжении аналитика входных и выходных данных веса и смещения сети автоматически настраиваются так, чтобы минимизировать разность между желаемым сигналом и полученным на выходе в результате моделирования. Эта разность носит название ошибки обучения. Таким образом, процесс обучения - это процесс подгонки параметров той модели процесса или явления, которая реализуется нейронной сетью'. Ошибка обучения для конкретной конфигурации нейронной сети определяется путем прогона через сеть всех имеющихся наблюдений и сравнения выходных значений с желаемыми, целевыми значениями. Эти разности позволяют сформировать так называемую функцию ошибок (критерий качества обучения). В качестве такой функции чаще всего берется сумма квадратов 47
ошибок. При моделировании нейронных сетей с линейными функциями активации нейронов можно построить алгоритм, гарантирующий достижение абсолютного минимума ошибки обучения. Для нейронных сетей с нелинейными функциями активации в общем случае нельзя гарантировать достижения глобального минимума функции ошибки. При таком подходе к процедуре обучения может оказаться полезным геометрический анализ поверхности функции ошибок. Определим веса и смещения как свободные параметры модели и их общее число обозначим через N; каждому набору таких параметров поставим в соответствие одно измерение в виде ошибки сети. Тогда для всевозможных сочетаний весов и смещений соответствующую ошибку сети можно изобразить точкой в Л4-1-мерном пространстве, а все такие точки образуют некоторую поверхность, называемую поверхностью функции ошибок. При таком подходе цель обучения нейронной сети состоит в том, чтобы найти на этой многомерной поверхности глобальный минимум. В случае линейной модели сети и функции ошибок в виде суммы квадратов такая поверхность будет представлять собой параболоид, который имеет единственный минимум, и это позволяет отыскать такой минимум достаточно просто. В случае нелинейной модели поверхность ошибок имеет гораздо более сложное строение и обладает рядом неблагоприятных свойств, в частности может иметь локальные минимумы, плоские участки, седловые точки и длинные узкие овраги. Определить глобальный минимум многомерной функции аналитически невозможно, и поэтому обучение нейронной сети, по сути дела, является процедурой изучения поверхности функции ошибок. Отталкиваясь от случайно выбранной точки на поверхности функции ошибок, алгоритм обучения постепенно отыскивает глобальный минимум. Как правило, для этого вычисляется градиент (наклон) функции ошибок в данной точке, а затем эта информация используется для продвижения вниз по склону. В конце концов алгоритм останавливается в некотором минимуме, который может оказаться лишь локальным минимумом, а если повезет, то и глобальным. Таким образом, по существу алгоритмы обучения нейронных сетей аналогичны алгоритмам поиска глобального экстремума функции многих переменных. Среди последних следует выделить алгоритмы сопряженных градиентов [12] и Левенберга - Марквардта (Levenberg - Marquardt) [17]. Однако с учетом специфики нейронных сетей для них разработаны специальные алгоритмы обучения, среди которых следует выделить алгоритм обратного распространения ошибки [39,42]. При использовании алгоритма обратного распространения ошибки сеть рассчитывает возникающую в выходном слое ошибку и вычисляет вектор градиента как функцию весов и смещений. Этот вектор указывает направление кратчайшего спуска по поверхности для данной точки, поэтому если продвинуться в этом направлении, то ошибка уменьшится. Последовательность таких шагов в конце концов приведет к минимуму того или иного типа. Определенную трудность здесь вызывает выбор величины шага. При большой длине шага сходимость будет более быстрой, но имеется опасность перепрыгнуть через решение или уйти в неправильном направлении. Классическим примером такого явления при обучении нейронной сети является ситуация, когда алгоритм очень медленно продвигается по узкому оврагу с крутыми склонами, перепрыгивая с одного склона на другой. Напротив, при малом шаге, вероятно, будет выбрано верное направление, однако при этом потребуется очень много итераций. На практике величина 48 Нейронные сети. MATLAB 6
шага выбирается пропорциональной крутизне склона (градиенту функции ошибок); такой коэффициент пропорциональности называется параметром скорости настройки. Правильный выбор параметра скорости настройки зависит от конкретной задачи и обычно осуществляется опытным путем; этот параметр может также зависеть от времени, уменьшаясь по мере выполнения алгоритма. Алгоритм действует итеративно, и его шаги принято называть эпохами или циклами. На каждом цикле на вход сети последовательно подаются вес обучающие наблюдения, выходные значения сравниваются с целевыми значениями и вычисляется функция ошибки. Значения функции ошибки, а также ее градиента используются для корректировки весов и смещений, после чего все действия повторяются. Начальные значения весов и смещений сети выбираются случайным образом, и процесс обучения прекращается либо когда реализовано определенное количество циклов, либо когда ошибка достигнет некоторого малого значения или перестанет уменьшаться. Явление переобучения Одна из наиболее серьезных трудностей при обучении сети заключается в том, что в ряде случаев мы минимизируем не ту ошибку, которую на самом деле нужно минимизировать; требуется минимизировать ошибку, которая появляется в сети, когда на нее подаются совершенно новые наблюдения. Весьма важно, чтобы нейронная сеть обладала способностью приспосабливаться к этим новым наблюдениям. Что же происходит на самом деле? Сеть обучается минимизировать ошибку на некотором ограниченном обучающем множестве. Это не отвечает требованиям теории о наличии идеального и бесконечно большого обучающего множества. И это не соответствует той реальной ситуации, когда надо минимизировать конкретную функцию ошибок для заранее неизвестной модели. Это порождает проблему, которая известна как явление переобучения. Обратимся к задаче аппроксимации некоторой функции многочленом [1]. Графики многочленов часто имеют весьма замысловатые формы, и чем выше степень многочлена, тем сложнее их форма. Если имеется некоторый набор данных, то можно поставить цель подобрать для него аппроксимирующий многочлен и таким образом получить подходящую математическую модель для этого набора данных. Поскольку исходные данные, как правило, заданы с погрешностями, то нельзя считать, что лучшая модель задается кривой, которая проходит точно через заданные точки. Многочлен низкого порядка может оказаться достаточно грубым для аппроксимации данных, в то время как многочлен высокого порядка может точно следовать данным, принимая при этом весьма замысловатую форму, не имеющую никакого отношения к форме истинной зависимости. Последняя ситуация и демонстрирует то, что называется явлением переобучения. При работе с нейронными сетями пользователь сталкивается с той же проблемой. Сети с большим количеством весов позволяют воспроизводить очень сложные функции, и в этом смысле они склонны к переобучению. Сеть же с небольшим количеством весов может оказаться недостаточно гибкой, чтобы смоделировать имеющуюся зависимость. Например, однослойная линейная сеть способна воспроизводить только линейные функции. Если использовать многослойные линейные сети, то ошибка всегда будет меньше, но это может свидетельствовать не о хорошем качестве модели, а о том, что проявляется явление переобучения. 3. Обучение нейронных сетей 49
Дня того чтобы выявить эффект переобучения, используется механизм контрольной проверки. Часть обучающих наблюдений резервируется как контрольные наблюдения и не используется при обучении сети. Вместо этого по мере работы алгоритма эти наблюдения применяются для независимого контроля результата. Вначале ошибка сети на обучающем и контрольном множествах будет одинаковой; если они существенно отличаются, то, вероятно, это означает, что разбиение наблюдений на 2 множества не обеспечило их однородность. По мере обучения сети ошибка убывает, и, пока обучение уменьшает функцию ошибок, ошибка на контрольном множестве также будет убывать. Если же контрольная ошибка перестала убывать или стала расти, это указывает на то, что сеть начала слишком близко следовать исходным данным и обучение следует остановить. В этом случае следует уменьшить количество нейронов или слоев, ибо сеть является слишком мощной для решения данной задачи. Если же, наоборот, есть имеет недостаточную мощность, чтобы воспроизвести имеющуюся зависимость, то явление переобучения скорее всего наблюдаться не будет и обе ошибки - обучения и проверки - не достигнут достаточно малого уровня. Возникающие при работе с нейронными сетями проблемы отыскания глобального минимума или выбора размера сети приводят к тому, что при практической работе приходится экспериментировать с большим числом сетей различных конфигураций, порой обучая каждую из них несколько раз и сравнивая полученные результаты. Главным критерием выбора в этих случаях является контрольная погрешность. При этом применяется правило, согласно которому из двух нейронных сетей с приблизительно равными контрольными погрешностями следует выбирать ту, которая проще. Необходимость многократных экспериментов ведет к тому, что контрольное множество начинает играть ключевую роль в выборе модели нейронной сети, т. е. становится частью процесса обучения. Тем самым его роль как независимого критерия качества модели ослабляется, поскольку при большом числе экспериментов возникает риск переобучения нейронной сети на контрольном множестве. Для того чтобы гарантировать надежность выбираемой модели сети, резервируют еще одно -тестовоемножество наблюдений. Итоговая модель тестируется на данных из этого множества, чтобы убедиться, что результаты, достигнутые на обучающем и контрольном множествах реальны. Разумеется, для того чтобы хорошо играть свою роль, тестовое множество должно быть использовано только 1 раз: если его использовать повторно для корректировки процесса обучения, то оно фактически превратится в контрольное множество. Итак, процедура построения нейронной сети состоит из следующих шагов: • выбора начальной конфигурации сети; например, в виде одного слоя с числом нейронов, равным 1/2 общего количества входов и выходов; • моделирования и обучения сети с оценкой контрольной ошибки и использованием дополнительных нейронов или промежуточных слоев; • выявления эффекта переобучения и корректировки конфигурации сети. Свойство обобщения При описании процедуры обучения нейронных сетей неявно использовалось предположение, что обучающее, контрольное и тестовое множества являются представительными для решаемой задачи. Обычно в качестве обучающих берутся данные, испытанные на ряде примеров. Если обстоятельства изменились, то закономерности, имевшие место в прошлом, могут больше не действовать. 50 Нейронные сети. MATLAB 6
Кроме того, нейронная сеть может обучаться только на тех данных, которыми она располагает. Предположим, что известно обучающее множество для системы стабилизации самолета при полете в спокойной атмосфере, а требуется спроектировать систему стабилизации на основе нейронной сети для условий полета при сильных возмущениях. Тогда едва ли можно ожидать от сети правильного решения в совершенно новой для нее ситуации. Классическим примером непредставительной модели нейронной сети является следующая ситуация. При проектировании системы машинного зрения, предназначенной для автоматического распознавания целей, сеть обучалась на 100 картинках, содержащих изображения танков, и на 100 других картинках, где танков не было. После обучения сети был достигнут стопроцентно "правильный" результат. Но когда на вход сети были поданы новые данные, она безнадежно провалилась. В чем же была причина? Выяснилось, что фотографии с танками были сделаны в пасмурный, дождливый день, а фотографии без танков - в солнечный день. Сеть научилась улавливать разницу в общей освещенности. Чтобы сеть могла результативно работать, ее следовало обучать на данных, где бы присутствовали все погодные условия и типы освещения, при которых сеть предполагается использовать, и это не говоря еще о рельефе местности, угле и дистанции съемки и т. д. [1]. Коль скоро сеть минимизирует общую погрешность, большое значение приобретают пропорции, в которых представлены данные различных типов. Сеть, обученная на 900 "хороших" и 100 "плохих" наблюдениях, будет искажать результат в пользу хороших наблюдений, поскольку это позволит алгоритму уменьшить общую погрешность. Если в реальной ситуации "хорошие" и "плохие" объекты представлены в другой пропорции, то результаты, выдаваемые сетью, могут оказаться неверными. Примером этого может быть задача выявления заболеваний. Пусть, например, при обычных обследованиях в среднем 90 % людей оказываются здоровыми и сеть, таким образом, обучается на данных, в которых пропорция здоровые/больные равна 90/10. Затем эта же сеть применяется для диагностики пациентов с определенными жалобами, среди которых соотношение здоровые/больные уже 50/50. В этом случае сеть будет ставить диагноз чересчур осторожно и не будет распознавать заболевание у некоторых больных. Если же, наоборот, сеть обучить на данных "с жалобами", а затем протестировать на "обычных" данных, то она будет выдавать повышенное число неправильных диагнозов о наличии заболевания. В таких ситуациях обучающие данные нужно скорректировать так, чтобы были учтены различия в распределении данных (например, можно повторить редкие наблюдения или удалить часто встречающиеся). Как правило, лучше всего постараться сделать так, чтобы наблюдения различных типов были представлены равномерно, и соответственно этому интерпретировать результаты, которые выдает сеть. Способность сети, обученной на некотором множестве данных, выдавать правильные результаты для достаточно широкого класса новых данных, в том числе и не представленных при обучении, называется свойством обобщения нейронной сети. Другой подход к процедуре обучения сети можно сформулировать, если рассматривать ее как процедуру, обратную моделированию. В этом случае требуется подобрать такие значения весов и смещений, которые обеспечивали бы нужное соответствие между входами и желаемыми значениями на выходе. Такая процедура обучения носит название процедуры адаптации и достаточно широко применяется для настройки параметров нейронных сетей. 3. Обучение нейронных сетей 51
3.1.1. Способы адаптации и обучения ■ В ППП Neural Network Toolbox реализовано 2 способа адаптации и обучения: последовательный и групповой, в зависимости оттого, применяется ли последовательное или групповое представление входов. Адаптация нейронных сетей Статические сети. Воспользуемся следующей моделью однослойной линейной сети с двухэлементным вектором входа, значения которого находятся в интервале [-1 1], и нулевым параметром скорости настройки: % Формирование однослойной статической линейной сети с двумя входами % и нулевым параметром скорости настройки net s= newlin([-l 1;-1 l],lf 0, 0); Требуется адаптировать параметры сети так, чтобы она формировала линейную зависимость вида t=2p{+p-2. Последовательный способ. Рассмотрим случай последовательного представления обучающей последовательности. В этом случае входы и целевой вектор формируются в виде массива формата cell: % Массив ячеек векторов входа Р = {[-1; 1J t-1/З; 1/4] [1/2; 0] [1/6; 2/3]); Т = {-1 -5/12 1 1}; % Массив ячеек векторов цели Р1 = [Р{:}]# Т1=[Т{:}] % Переход от массива ячеек к массиву double PI = -1 -0.33333 0.5 0.16667 1 0.25 0 0.66667 Т1 = -1 -0.41667 1 1 Сначала зададим сеть с нулевыми значениями начальных весов и смещений: net.XW{l} - [О О]; % Присваивание начальных весов net.b{l} =0; % Присваивание начального смещения В ППП NNT процедуры адаптации реализуются на основе метода adapt. Для управления процедурой адаптации используется свойство net.adaptFcn, которое задает метод адаптации; для статических сетей по умолчанию применяется метод adaptwb, который позволяет выбирать произвольные функции для настройки весов и смещений. Функции настройки весов и смещений задаются свойствами net.inputWeights{i, jJ.leamFcn, net.IayerWeights{i, j} .learnFcn и net.biasesfi, j} .learnFcn. Выполним 1 цикл адаптации сети с нулевым параметром скорости настройки: % Последовательная адаптация сети с входами Р и целями Т [netl,a,e] = adapt(net,P,T); % netl-новая сеть, а-выход, е-ошибка обучения В этом случае веса не модифицируются, выходы сети остаются нулевыми, поскольку параметр скорости настройки равен нулю и адаптации сети не происходит. Погрешности совпадают со значениями целевой последовательности 52 Нейронные сети. MATLAB 6
netl.IWd, 1}, a, e ans =00 a = [0] [0] [0] [0] e = [-1] [-0.41667] [1] [1] Зададим значения параметров скорости настройки и весов входа и смещения: net.IW{l} = [0 0]; % Присваивание начальных весов net.b{l}=0; % Присваивание начального смещения net.inputWeights{1,1}.learnParam.lr = 0.2; net.biases{1,1}.learnParam.lr = 0; Нулевое значение параметра скорости настройки для смещения обусловлено тем, что выявляемая зависимость не имеет постоянной составляющей. Выполним 1 цикл настройки: [netl,a, e] = adapt(net,Р,Т); netl.IWd, 1}, а, е ans = 0.34539 -0.069422 а = [0] [-0.11667] [0.11] [-0.091833] е = [-1] [-0.3] [0.89] [1.0918] Теперь выполним последовательную адаптацию сети в течение 30 циклов: % Последовательная адаптация сети с входами Р и целями Т за 30 циклов net »= newlin{[-l 1;-1 1],1, 0, 0); net.iwfl} = [0 0]; % Присваивание начальных весов net.b{l> =0; % Присваивание начального смещения Зададим значения параметров скорости настройки для весов входа и смещения: net.inputWeights{1,1}.learnParam.lr = 0.2; net.biases{1,1}.learnParam.lr - 0;. P = {[-1; 11 [-1/3; 1/4] [1/2; 0] [1/6; 2/3] Ь" % Массив векторов входа T - {-1 -5/12 1 1}; % Массив векторов цели for i=l:30, [net,a{i},e{i}] = adapt{net,P,T); W(i,:)=net.IW{l,l}; end mse(cell2mat(e{30})) % Среднеквадратичная ошибка адаптации ans = 0.0017176 W(30,:) % Веса после 30 циклов ans = 1.9199 0.925 ce!12mat(a{30}> ans = -0.9944 -0.40855 0.95663 0.93005 cell2mat(e{30}) ans = -0.0055975 -0.0081125 0.043367 _ 0.069947 Построим графики зависимости значений выходов сети и весовых коэффициентов в зависимости от числа итераций (рис. 3.1): subplot(3,1,1) plot (0:30, [ [О О 0 0] ;cell2mat(cell2ntat(a') ) ] , 'к' ) % Рис 3.1,а xlabel(■'), ylabel('Выходы а(х)'),grid subplot(3,1,2) plot(0:30,[[0 0]; W],'k') 4 Рис 3.1,6 3. Обучение нейронных сетей 53
xlabel(■'), ylabel('Веса входов w(i)■),grid subplot(3,1,3) for i=l:30f E(i) = mse(e{i}); end semilogy(l:30, Ef'+k') % Рис. 3.1,в xlabel(' Циклы•), ylabel('Ошибка'),grid Рис. 3.1 Первый выход тот же, что и при нулевом значении параметра скорости настройки, так как до предъявления сети первого входа никаких модификаций не происходит. Второй выход отличается, так как параметры сети были модифицированы. Веса продолжают изменяться при подаче нового входа. Если сеть соответствует задаче, корректно заданы обучающие последовательности, начальные условия и параметр скорости настройки, то в конечном счете погрешность может быть сведена к нулю. В этом можно убедиться, изучая процесс адаптации, показанный на рис. 3.1. Условие окончания адаптации определяется погрешностью приближения к целевому вектору; в данном случае мерой такой погрешности является среднеквадратичная ошибка mse(e{i}), которая должна быть меньше 0.015. На рис. 3.1, а показаны выходы нейронов в процессе адаптации сети, на рис. 3.1, б- коэффициенты восстанавливаемой зависимости, которые соответствуют элементам вектора весов входа, а на рис. 3.1, в - ошибка обучения. Как следует из анализа графиков, за 12 шагов получена ошибка обучения 1.489е-3. Предлагаем читателю самостоятельно убедиться, что для исследуемой зависимости обучающие последовательности вида Р = {[-1; 1] [-1/2; 1/2] [1/2; -1/2] [1; -1]}; % Массив векторов входа Т = {-1 -1/2 1/2 1}; % Массив векторов цели не являются представительными. 54 Нейронные сети. MATLAB б
Групповой способ. Рассмотрим случай группового представления обучающей последовательности. В этом случае входы и целевой вектор формируются в виде массива формата double. Р - [-1 -1/3 1/2 1/6; 1 1/4 0 2/3]; Т = [-1 -5/12 1 1]; Используется та же модель статической сети с теми же требованиями к погрешности адаптации. При обращении к М-функции adapt по умолчанию вызываются функции adaptwb и learnvvh; последняя выполняет настройку параметров сети на основе алгоритма WH, реализующего правило Уидроу - Хоффа (Widrow - Hoff). Основной цикл адаптации сети с заданной погрешностью выглядит следующим образом: % Групповой способ адаптации сети с входами Р и целями Т net3 = newlin([-l 1;-1 1],1, 0, 0.2); net3.lW{l} = [0 0]; % Присваивание начальных весов net3.b{l} =0; % Присваивание начального смещения ne 13.inputWeights{1,1}.learnParam.lr = 0.2; P - [-1 -1/3 1/2 1/6; 1 1/4 0 2/31; T = [-1 -5/12 11]; ЕЕ = 10; i=l; while ЕЕ > 0.0017176 [net3,a(i},e{i},p£] = adapt(net3,P,T); W(i,:) = net3.IW{l,l}; ЕЕ = mse(e{i}); ee(i)= ЕЕ; i = i+1;' end Результатом адаптации при заданной погрешности являются следующие значения коэффициентов линейной зависимости, значений выходов нейронной сети, приближающихся к значениям желаемого выхода, а также среднеквадратичная погрешность адаптации: W(63,:) ans = 1.9114 0.84766 cell2mat (a (63)) ans = -1.003 -0.36242 1.0172 0.94256 ЕЕ = mse(e{63>) ЕЕ = 0.0016368 mse(e{l}) ans = 0.7934 Процедура адаптации выходов и параметров нейронной сети иллюстрируется рис. 3.2. subplot(3,1,1) plot(0:63,[zeros(1,4); cell2mat(a«)], «k1 ) % Рис.3.2,a xlabelC1), ylabel('Выходы a (i)'), grid subplot(3,1,2) plot(0:63, £[0 0]; W3,'k') % Рис.3.2,б xlabel(''), ylabel('Beca входов w(i)'),grid subplot(3,1,3) semilogy(l:63, ее,'+k') % Рис.3.2,в xlabel('Циклы'), ylabel(■Ошибка'),grid 3. Обучение нейронных сетей 55
Как следует из анализа графиков, для достижения требуемой точности адаптации требуется 12 шагов. Сравнивая рис. 3.2 и 3.1, можно убедиться, что существует различие в динамике процедур адаптации при последовательном и групповом представлении данных. Динамические сети. Эти сети характеризуются наличием линий задержки, и для них последовательное представление входов является наиболее естественным. Последовательный способ. Обратимся к линейной модели нейронной сети с одним входом и одним элементом запаздывания. Установим начальные условия на линии задержки, а также для весов и смещения равными 0, а параметр скорости настройки равным 0.5: net = newlin([-l 1],1,[0 1],0.5); Pi = {0}; % Начальное условие для элемента запаздывания net.iwfl} = [0 0]; % Значения весов net.biasConnect = 0; % Значение смещения Чтобы применить последовательный способ адаптации, представим входы и цели как массивы ячеек: Р = {-1/2 1/3 1/5 1/4}; % Вектор входа Т = { -1 1/6 11/15 7/10}; % Вектор цели Попытаемся приспособить сеть для формирования нужного выхода на основе следующего соотношения: y(0 = 2p(t)+p(t-l). Используем для этой цели М-функциго adapt и основной цикл адаптации сети с заданной погрешностью, как это уже было описано выше: ЕЕ = 10; i = 1; while ЕЕ > 0.0001 [net,a{i},e{i},pf] = adapt(net,P,T); 56 Нейронные сети. MATLAB 6
W(i,:)=net.IW(l,l}; ЕЕ = mse(e{i}); ee(i) = ЕЕ; i = i+1; end Сеть адаптировалась за 22 цикла. Результатом адаптации при заданной погрешности являются следующие значения коэффициентов линейной зависимости, значений выходов нейронной сети, приближающихся к значениям желаемого выхода, а также среднеквадратичная погрешность адаптации: W<22,:) ans = 1.983 0.98219 а{22} ans = [-0.98955] [0.17136] [0.72272] [0.69177] ЕЕ ЕЕ = 7.7874е-005 Построим графики зависимости выходов системы и весовых коэффициентов от числа циклов обучения (рис. 3.3): subplot(3,1,1) plot(О:22,[zeros(1,4); cell2mat(cell2mat(a1))],'k') % Рис.3.3,a xlabel(••), ylabel('Выходы a(i)'),grid subplot(3,1,2) plot(0:22,[[0 0]; W],'k') % Рис.3.3,б xlabel('■), ylabel('Веса входов w(i) '),grid subplot(3,1,3) semilogy(l:22,ee,'+к') %Рис.З.З,в xlabel{'Циклы■), ylabel(■Ошибка■),grid '! i i i i I; • 0 5 10. - '. - - 15 20 /25 -. . Циклы ' - Рис. 3.3 3. Обучение нейронных сетей 57
На рис. 3.3, а показаны выходы нейронов в процессе адаптации сети, а на рис. 3.3, б- коэффициенты восстанавливаемой зависимости, которые соответствуют элементам вектора весов входа. Групповой способ представления обучающего множества для адаптации динамических систем не применяется. Обучение нейронных сетей Статические сети. Воспользуемся рассмотренной выше моделью однослойной линейной сети с двухэлементным вектором входа, значения которого находятся в интервале [-1 1 ], и нулевым параметром скорости настройки, как это было для случая адаптации: % Формирование однослойной статической линейной сети с двумя входами % и нулевым параметром скорости настройки net = newlin<[-l 1;~1 1],1, 0, 0); net.IW{l} = [0 0]; % Значения весов net.b{l} = 0; % Значения смещений Требуется обучить параметры сети так, чтобы она формировала линейную зависимость вида ' = 2/?, + р2. Последовательный способ. Для этого представим обучающую последовательность в виде массивов ячеек Р = {[-1; 1] [-1/3; 1/4] [1/2; 0] [1/6; 2/3]}; % Массив векторов входа Т = {-1 -5/12 1 1}; Ч Массив векторов цепи Теперь все готово к обучению сети. Будем обучать ее с помощью функции train в течение 30 циклов. В этом случае для обучения и настройки параметров сети используются функции trainwb и learnwh соответственно. % Параметр скорости настройки весов net.inputWeights{1,1}.1earnParam. lr = 0.2; net.biases{1}.learriParam.lr = 0; % Параметр скорости настройки смещений net.trainParam.epochs -30; % Число циклов обучения netl = train(net,F,T); Параметры сети после обучения равны следующим значениям: w s neti.xwci} W = 1.9214 0.92599 у = sim(netl, P) у = [-0.99537] [-0.40896] [0.96068] [0.93755] ЕЕ = mse([y{:}]-[T{:}]) ЕЕ = 1.3817е-003 Зависимость величины ошибки обучения от числа циклов обучения приведена на рис. 3.4. 58 Нейронные сети. MATLAB 6
. ТочностъСШЗШ, предельная С " ltrt...-.-;..t.; u..—;-.i ..i tf\ i L__i L—i J :^':'; О _ -5.- 10 ■ Г ;ffi-.t.;;' 20- 25, ," 3Q .j Si - .-' ■- ..:=-1;':£ПЛ? :.'-.'! Г!.* Л? .?■ ".-!-■■£ РИС. 3.4 Это тот же самый результат, который был получен для группового способа адаптации с использованием функции adapt. Групповой способ. Для этого представим обучающую последовательность в виде массивов формата double array: Р = [-1 -1/3 1/2 1/6; 1 1/4 0 2/3]; Т = [-1 -5/12 1 1]; xietl = train (net, Р, T) ; TRAINWB, Epoch 0/10, MSE 0.793403/0. TRAINWB, Epoch 10/10, MSE 0.00243342/0. TRAINWB, Maximum epoch reached. Параметры сети после обучения равны следующим значениям: W = netl.IW{l} W = 1.9214 0.92599 у = sim(netl, P) у = -0.99537 -0.40896 0.96068 0.93755 ЕЕ = mse(y-T) ЕЕ = 1.3817е-003 Этот результат полностью совпадает с результатом последовательного обучения этой же сети. Динамические сети. Обучение динамических сетей выполняется аналогичным образом с использованием метода train. Последовательный способ. Обратимся к линейной модели нейронной сети с одним входом и одним элементом запаздывания. Установим начальные условия для элемента запаздывания, весов и смещения равными 0, а параметр скорости настройки равным 0.5: net = newlin([-l 1],1,[0 l],0.5)j Pi = {0}; % Начальное условие для элемента запаздывания 3. Обучение нейронных сетей 59
net.IW{l} = [0 0]; % Значения весов net.biasConnect = 0; % Значение смещения net.trainParam. epochs = 22; Чтобы применить последовательный способ обучения, представим входы и цели как массивы ячеек: Р = {-1/2 1/3 1/5 1/4); % Вектор входа Обучим сеть формировать нужный выход на основе соотношения y(t) = 2p(t) + p(t-l), тогда Т = { -1 1/6 11/15 7/10}; % Вектор цели Используем для этой цели М-функцию train: netl = trainfnet, Р, T, Pi); Параметры сети после обучения равны следующим значениям: W = netl.IW{l} W = 1.9883 0.93414 у = sim(xietl, P) у = [-0.99414] [0.17069] [0.7257] [0.6939] ЕЕ = mse([y{:>l-[T{:}]) ЕЕ = 3.б514е-005 График зависимости ошибки обучения от числа циклов приведен на рис. 3.5. ■-яГ . ■ -■ . ,itf| |.Ш О" -J ' -Itft -in"5 - _', s- Точность 1851ЭМЮ5,предельная0;:, ":;\- Ш!1!!!!1!|!1!1!1!1!1!Ш!!Ш1!!!!:!!Ш! >Sj ill .:=!ф!Ё^^!!!у:::?=!!5::!:;ЁМ^!!!=|:::: !ШУПШйШшШ|УШ!1Ш!УШШН! til,* >C I < ( m Ш m Ш * * 1 1 * J ' * %^ * НнЬм!Ь!!||!Ун!!к^Н!Ин!НнНШЦ|Г .... t ...в.... j.. ,j ^ .j . ^... - ... ... ... ~ .,* ■:-y- V.'; ■;:." - ■,. '■-r . , - - " - • о '-'2 - '4' ;6 -8 '' Ш Л!'..-It;-. 16"FIB-l"20* "22^v- 22i[rtKsa- Рис. 3.5 Предлагаем читателю самостоятельно выполнить сравнение результатов обучения с результатами адаптации этой же сети. Групповой способ представления обучающей последовательности для обучения динамических систем не применяется. 60 Нейронные сети. MATLAB 6
3.2, Методы обучения Как только начальные веса и смещения нейронов установлены пользователем или с помощью датчика случайных чисел, сеть готова для того, чтобы начать процедуру ее обучения. Сеть может быть обучена решению различных прикладных задач - аппроксимации функций, идентификации и управления объектами, распознавания образов, классификации объектов и т. п. Процесс обучения требует набора примеров се желаемого поведения - входов р и желаемых (целевых) выходов t; во время этого процесса веса и смещения настраиваются так, чтобы минимизировать некоторый функционал ошибки. По умолчанию в качестве такого функционала для сетей с прямой передачей сигналов принимается среднеквадратичная ошибка между векторами выхода ant. Ниже обсуждается несколько методов обучения для сетей с прямой передачей сигналов. При обучении сети рассчитывается некоторый функционал, характеризующий качество обучения: '=4EE(tf-ef )2, (зл) где / - функционал; Q - объем выборки; М - число слоев сети; q - номер выборки; S'u - число нейронов выходного слоя; а4 = [afM ] - вектор сигнала на выходе сети; tq =[tf ] - вектор желаемых (целевых) значений сигнала на выходе сети для выборки с номером д. Затем с помощью того или иного метода обучения определяются значения настраиваемых параметров (весов и смещений) сети, которые обеспечивают минимальное значение функционала ошибки. Большинство методов обучения основано на вычислении градиента функционала ошибки по настраиваемым параметрам. 3.2.1. Обучение однослойной сети Наиболее просто градиент функционала вычисляется для однослойных нейронных сетей. В этом случае М = 1 и выражение для функционала принимает вид: J^ltw-af f^ttw-fW- i=^- (32) R где f(nf) - функция активации; nf = Y,wijPj ~ сигнал на входе функции активации для 1-го нейрона; рч =[pf] - вектор входного сигнала; R - число элементов вектора входа; S~ число нейронов в слое; w..-весовые коэффициенты сети. Включим вектор смещения в состав матрицы весов W = [и^- ], i -1,5, j = 1, R , а вектор входа дополним элементом, равным 1. Применяя правило дифференцирования сложной функции, вычислим градиент функционала ошибки, предполагая при этом, что функция активации дифференцируема: 3. Обучение нейронных сетей 61
#L=-£('?-/«))^^^=-tw-/(«,,))/'(n;')p). с") Введем обозначение A! = itf -finfWXnf) *= tt?-af)f\nf), i = hS, (3.4) и преобразуем выражение (3.3) следующим образом: ^- = -EA?/'(«f)pJ, /=OJ. (3.5) Полученные выражения упрощаются, если сеть линейна. Поскольку для такой сети выполняется соотношение a? =nf, то справедливо условие f'(nf) = l. В этом случае выражение (3.3) принимает вид: J¥- = (tf-af)p], i = TJ, j=0j. (3.6) °wy . Выражение (3.6) положено в основу алгоритма WH, применяемого для обучения линейных нейронных сетей [45]. Линейные сети могут быть обучены и без использования итерационных методов, а путем решения следующей системы линейных уравнений: 5>ffpJ=tf. i = lX q=hQ, . (3.7) или в векторной форме записи: Wp=t, W = [^], p = [pj], t = [/?], /«ITS, j = 0Jt, q = U2. (3.8) Если число неизвестных системы (3.7) равно числу уравнений, то такая система может быть решена, например, методом исключения Гаусса с выбором главного элемента. Если же число уравнений превышает число неизвестных, то решение ищется с использованием метода наименьших квадратов. 3.2.2. Обучение многослойной сети Архитектура многослойной сети существенно зависит от решаемой задачи. Для линейных нейронных сетей может быть установлена связь между суммарным количеством весов и смещений с длиной обучающей последовательности. Для других типов сетей число слоев и нейронов в слое часто определяется опытом, интуицией проектировщика и эвристическими правилами. Обучение сети включает несколько шагов: • выбор начальной конфигурации сети с использованием, например, следующего эвристического правила: количество нейронов промежуточного слоя определяется половиной суммарного количества входов и выходов; 62 Нейронные сети. MATLAB 6
• проведение ряда экспериментов с различными конфигурациями сети и выбор той, которая дает минимальное значение функционала ошибки; • если качество обучения недостаточно, следует увеличить число нейронов слоя или количество слоев; • если наблюдается явление переобучения, следует уменьшить число нейронов в слое или удалить один или несколько слоев. Нейронные сети, предназначенные для решения практических задач, могут содержать до нескольких тысяч настраиваемых параметров, поэтому вычисление градиента может потребовать весьма больших затрат вычислительных ресурсов. С учетом специфики многослойных нейронных сетей для них разработаны специальные методы расчета градиента, среди которых следует выделить метод обратного распространения ошибки [18,37,41 ]. Метод обратного распространения ошибки Термин "обратное распространение" относится к процессу, с помощью которого могут быть вычислены производные функционала ошибки по параметрам сети. Этот процесс может использоваться в сочетании с различными стратегиями оптимизации. Существует много вариантов и самого алгоритма обратного распространения. Обратимся к одному из них. Рассмотрим выражение для градиента критерия качества по весовым коэффициентам для выходного слоя М: dJ dw% dwf/ \ ES« -<? =-XZ« -Ttt (3.9) где SM - число нейронов в слое; а%м -А:-й элемент вектора выхода слоя М для элемента выборки с номером q. Правило функционирования слоя М: (sm-\ \ ак ~ Jm\ luwa ai V'=° J m = l,SM. (3.10) Из уравнения (3.8) следует daf _ f 0, k*i После подстановки (3.11) в (3.9) имеем: 3. Обучение нейронных сетей 63
Если обозначить A?' ={tf-af)f^nf), i = l, ..-, S'u, (3.12) то получим а/ - м = -1дëà • / = 1's • ; = o,s'W4. (3.13) Перейдем к выводу соотношений для настройки весов w,-^-1 слоя М-1 W _ _V V (t'l - пЧМ Л f' (ггЧМ ч Vnk Uak _tf(M-l) „ - 2-t2J*b a* ЛГлД"* )wk,■ 9<lW-i)^w-itn,- Jaj = -V дя(Я-«а*(И-2) где /V *=l \jt=i J Для слоев M-2, М-3,... Д вычисление частных производных критерия J по элементам матриц весовых коэффициентов выполняется аналогично. В итоге получаем следующую . общую формулу: 6/ где г - номер слоя 7 = -£д?М)а*<м\ г = Ш, i = l,S'f У = 0,5М, (3-15) v 9=' дг=[ е агч^1]/;^), г=1,аг -ь На рис. 3.6 представлена схема вычислений, соответствующая выражению (3.15). 64 Нейронные сети. MATLAB 6
Слой 1 Стай М-1 Спой М На этой схеме символом * обозначена операция поэлементного умножения векторов, а символом ** - умножение вектора Д на ат; символ, обозначающий номер элемента выборки, для краткости опущен. Характеристика методов обучения Методы, используемые при обучении нейронных сетей, во многом аналогичны методам определения экстремума функции нескольких переменных. В свою очередь, последние делятся на 3 категории - методы нулевого, первого и второго порядка. В методах нулевого порядка для нахождения экстремума используется только информация о значениях функции в заданных точках. В методах первого порядка используется градиент функционала ошибки по настраиваемым параметрам \M=xA-aftgt, С3-16) где хь - вектор параметров; a k - параметр скорости обучения; gk - градиент функционала, соответствующие итерации с номером к. Вектор в направлении, противоположном градиенту, указывает направление кратчайшего спуска по поверхности функционала ошибки. Если реализуется движение в этом направлении, то ошибка будет уменьшаться. Последовательность таких шагов в конце концов приведет к значениям настраиваемых параметров, обеспечивающим минимум функционала. Определенную трудность здесь вызывает выбор параметра скорости обучения аА. При большом значении параметра а^ сходимость будет быстрой, но существует опасность пропустить решение или уйти в неправильном направлении. Классическим примером является ситуация, когда алгоритм очень медленно продвигается по узкому оврагу с крутыми склонами, перепрыгивая с одного на другой. Напротив, при малом шаге, вероятно, будет выбрано верное направление, однако при этом потребуется очень много итераций. В зависимости от принятого алгоритма параметр скорости обучения может быть постоянным или переменным. Правильный выбор этого параметра зависит от конкретной задачи и обычно осуществляется опытным путем; в случае переменного парамет- ра его значение уменьшается по мере приближения к минимуму функционала. 3. Обучение нейронных сетей 65
В алгоритмах сопряженного градиента [12] поиск минимума выполняется вдоль j сопряженных направлений, что обеспечивает обычно более быструю сходимость, чем при наискорейшем спуске. Все алгоритмы сопряженных градиентов на первой итерации -- начинают движение в направлении антиградиента - Po=~go- (3.17) ; Тогда направление следующего движения определяется так, чтобы оно было сопряжено с предыдущим. Соответствующее выражение для нового направления движения является '^ комбинацией нового направления наискорейшего спуска и предыдущего направления: ; Р*=-€*+Р*Ры- (3.18) ; Здесь рк - направление движения, %к - градиент функционала ошибки, р к - коэффици- > ент соответствуют итерации с номером к. Когда направление спуска определено, ; то новое значение вектора настраиваемых параметров xt+1 вычисляется по формуле х*+1 =х* +<чр*- (3.19) ■: Методы второго порядка требуют знания вторых производных функционала ошибки. К методам второго порядка относится метод Ньютона. Основной шаг метода Ньютона определяется по формуле ***■ = **-«?&» (3.20) где хк ~ вектор значений параметров на к-й итерации; Н - матрица вторых частных производных целевой функции, или матрица Гессе; gk - вектор градиента на fc-й итерации. : Во многих случаях метод Ньютона сходится быстрее, чем методы сопряженного градиента, но требует больших затрат из-за вычисления гессиана. Для того чтобы избежать вы- . ■ числения матрицы Гессе, предлагаются различные способы ее замены приближенными ■■ выражениями, что порождает так называемые квазинъютоновы алгоритмы (алгоритм метода секущих плоскостей OSS [1], алгоритм LM Левенберга - Марквардта [17]). 3.3. Алгоритмы обучения Алгоритмы обучения, как правило, функционируют пошагово; и эти шаги принято называть эпохами или циклами. На каждом цикле на вход сети последовательно подаются " все элементы обучающей последовательности, затем вычисляются выходные значения сети, сравниваются с целевыми и вычисляется функционал ошибки. Значения функциона- ? ла, а также его градиента используются для корректировки весов и смещений, после чего - все действия повторяются. Начальные значения весов и смещений выбираются случай- ; ным образом, а процесс обучения прекращается, когда выполнено определенное количе- , ство циклов либо когда ошибка достигнет некоторого малого значения или перестанет ' уменьшаться. При такой формализации задачи обучения предполагаются известными желаемые .. (целевые) реакции сети на входные сигналы, что ассоциируется с присутствием учителя, а поэтому такой процесс обучения называют обучением с учителем. Для некоторых типов - 66 Нейронные сети. MATLAB б
нейронных сетей задание целевого сигнала не требуется, и в этом случае процесс обучения называют обучением без учителя. Ниже для обозначения алгоритмов используются их англоязычные сокращения, ассоциирующиеся с названиями алгоритмов в ППП Neural Network Toolbox. 3.3.1. Градиентные алгоритмы обучения Алгоритм GD Алгоритм GD, или алгоритм градиентного спуска, используется для такой корректировки весов и смещений, чтобы минимизировать функционал ошибки, т. с. обеспечить движение по поверхности функционала в направлении, противоположном градиенту функционала по настраиваемым параметрам. Рассмотрим двухслойную нейронную сеть прямой передачи сигнала с сигмоидальньш и линейным слоями для обучения се на основе метода обратного распространения ошибки . (рис. 3.7): net = newff([-l 2; 0 5],[3,1],{•tansig','purelin'},•traingd'); р{1} О a{1} Layer 1 Layer 2 aft} yd} (Щ) IkjrDlj ►jwerjhtf- pW Delays 1 IW{1.1} |;bi«;.'j. b{1} >Щ ►{^ a{1} Deliyj tansig л{1} Рис. 3.7 ,biiS-: -HI- puieiift ap} ьр} Последовательная адаптация. Чтобы подготовить модель сети к процедуре последовательной адаптации на основе алгоритма GD, необходимо указать ряд параметров. В первую очередь это имя функции настройки IearnFcn, соответствующее алгоритму градиентного спуска, в данном случае это М-функция Iearngd: net.biases{1,1}.IearnFcn - 'Iearngd1; net.biases{2,1}-IearnFcn = 'Iearngd'; net.layerWeights{2,1}.IearnFcn = 'Iearngd'; net.inputWeights{1,1).IearnFcn = 'Iearngd'; С функцией Iearngd связан лишь один параметр скорости настройки 1г. Текущие приращения весов и смещений сети определяются умножением этого параметра на вектор градиента. Чем больше значение параметра, тем больше приращение на текущей'итерации. Если параметр скорости настройки выбран слишком большим, алгоритм может стать неустойчивым; если параметр слишком мал, то алгоритм может потребовать длительного счета. При выборе функции leamgd по умолчанию устанавливается следующее значение параметра скорости настройки: net.layerWeights{2,1}.learnParam ans = ? lr: 0.01 3. Обучение нейронных сетей 67
Увеличим значение этого параметра до 0.2: net.layerWeights{2/l}.learnParam.lr = 0.2; Мы теперь почти готовы к обучению сети. Осталось задать обучающее множество. Это простое множество входов и целей определим следующим образом: р = [-1 -1 2 2;0 5 0 5]; t * [-1 -1 1 1]; Поскольку используется последовательный способ обучения, необходимо преобразо- ..- вать массивы входов и целей в массивы ячеек: р = num2cell(p, 1); t = num2cell(t,l); Последний параметр, который требуется установить при последовательном обучении, - . это число проходов netadaptParam.passes: net.adaptParam.passes = 50; Теперь можно выполнить настройку параметров, используя процедуру адаптации: [net,a,e] = adapt(net,p,t); Чтобы проверить качество обучения, после окончания обучения смоделируем сеть: а = sim{net,p) а = [-1.02] [-0.99624] [1.0279] [1.0021] тзе(е) ans = 5.5909е-004 Групповое обучение. Для обучения сети на основе алгоритма GD необходимо использовать М-функцию traingd взамен функции настройки learngd. В этом случае нет необходимости задавать индивидуальные функции обучения для весов и смещений, а достаточно - указать одну обучающую функцию для всей сети. Вновь создадим ту же двухслойную нейронную сеть прямой передачи сигнала с сигмой- ; дальным и линейным слоями для обучения по методу обратного распространения ошибки: net = newff([-l 2; 0 5],[3,1],{'tansig','purelin'},'traingd'); Функция traingd характеризуется следующими параметрами, заданными по умолчанию: net.trainParam ans = epochs: 100 goal: 0 lr: 1.0000e-002 max_£ail: 5 min_grad: 1.0000e-010 show: 25 time: Inf Здесь epochs - максимальное количество циклов (эпох) обучения; goal - предельное значение критерия обучения; 1г- параметр скорости настройки; max_fail - максимально допустимый уровень превышения ошибки контрольного подмножества по сравнению с обучающим; min_grad - минимальное значение градиента; show - интервал вывода ин- ■ формации, измеренный в циклах; time - предельное время обучения. 68 Нейронные сети. MATLAB 6
Установим новые значения параметров обучения, зададим обучающую последовательность в виде массива double и выполним процедуру обучения: net.trainParam.show = 50; net.trainParam.lr =0.05; net.trainParam.epochs - 300; net.trainParam.goal = le-5; p = [-1 -1 2 2;0 5 0 5]; t = [-1 -1 1 1]; net - train(net,p,t); % Рис.3.8 На рис. 3.8 приведен график изменения ошибки в зависимости от числа выполненных циклов обучения. Этот график строится автоматически при исполнении функции train. Ю'гтттт^ Томность 975053е-006. предел№эя:1 е-005 -^[|!!!§Н!1Ш!ШШЩИМПН11Ш1!ШНШ|11ШГ -!!!Ш!!!!!!!!!!!!Ш1!Ш!!!!!!!!!!!1!!Ш!Ш!Ш & щШ0ШШ Рис. 3.8 Для проверки качества обучения промоделируем спроектированную сеть: а = sim(net,p) а = -1.0042 -0.9958 0.9987 0.9984 Более тщательно ознакомиться с методом градиентного спуска можно с помощью демонстрационной программы nndl2sdl, которая иллюстрирует работу алгоритма GD. Алгоритм GDM Алгоритм GDM, или алгоритм градиентного спуска с возмущением [18], предназначен для настройки и обучения сетей прямой передачи. Этот алгоритм позволяет преодолевать локальные неровности поверхности ошибки и не останавливаться в локальных минимумах. С учетом возмущения метод обратного распространения ошибки реализует следующее соотношение для приращения вектора настраиваемых параметров: Awk = mcAwk_x + (1 - тс) lrgk, (3.21) где Алу^ - приращение вектора весов; тс - параметр возмущения; /г- параметр скорости обучения; gk - вектор градиента функционала ошибки на к-й итерации. 3. Обучение нейронных сетей 69
Если параметр возмущения равен 0, то изменение вектора настраиваемых параметров ;■ определяется только градиентом, если параметр равен I, то текущее приращение равно - предшествующему как по величине, так и по направлению. Вновь рассмотрим двухслойную нейронную сеть прямой передачи сигнала с сигмой- -: дальным и линейным слоями (см. рис. 2.6) net = newff([-l 2; 0 5],[3,1],{'tansig*,'purelin'},■traingdm'); Последовательная адаптация. Чтобы подготовить модель сети к процедуре последовательной адаптации на основе алгоритма GDM, необходимо указать ряд параметров. *>. В первую очередь это имя функции настройки learnFcn, соответствующее алгоритму гра- * диентного спуска с возмущением, в данном случае это М-функция learngdm: *; net.biases{1,1}-learnFcn = 'learngdm'; net.biases{2,1}.learnFcn = ■learngdm'; net.layerWeights{2,l}.learnFcn = 'learngdm'; net.inputWeights{1,1}.learnFcn = 'learngdm'; С этой функцией связано 2 параметра - параметр скорости настройки 1г и параметр ":. возмущения тс. При выборе функции learngdm по умолчанию устанавливаются следующие значения этих параметров: net.layerWeight s{2,1}.learnParam ans = lr: 0,01 *".; mc: 0.9 Увеличим значение параметра скорости обучения до 0.2: net.layerWeights{2,l}.learnParam.lr =0.2; Мы теперь почти готовы к обучению сети. Осталось задать обучающее множество .; и количество проходов, равное 50: ( р = С-1 -1 2 2;0 5 0 5]; t = Е-1 -1 1 11; р = num2cell(p,l); t = num2cell(t,l); net.adaptParam.passes = 50; tic, [net,a,e] = adapt(net,p,t); toe . ; elapsed_time = 4-78 a, mse(e) ans = [-1.0124] [-0.98648] [1.0127] [0.9911] ans = 1.4410e~004 Эти результаты сравнимы с результатами работы алгоритма GD, рассмотренного ранее. ..-.- Групповое обучение. Альтернативой последовательной адаптации является групповое обучение, которое основано на применении функции train. В этом режиме параметры сети ■ модифицируются только после того, как реализовано все обучающее множество, и градиенты, рассчитанные для каждого элемента множества, суммируются, чтобы определить "': приращения настраиваемых параметров. Для обучения сети на основе алгоритма GDM необходимо использовать М-функцию traingdm взамен функции настройки learngdm. Различие этих двух функций состоит -; 70 Нейронные сети. MATLAB 6 3
в следующем. Алгоритм функции traingdm суммирует градиенты, рассчитанные на каждом цикле обучения, а параметры модифицируются только после того, как все обучающие данные будут представлены. Если проведено N циклов обучения и для функционала ошибки оказалось выполненным условие JN > 1.04 iW4, то параметр возмущения тс следует установить в 0. Вновь обратимся к той же сети net = newff{t-l 2; 0 5],[3,1],{"tansig1,'purelin'},'traingdm'}; Функция traingdm характеризуется следующими параметрами, заданными по умолчанию: net.trainParam ans = epochs: 100 goal: 0 lr: 0.0100 max_fail: 5 гас: 0.9000 min_grad: 1.0000e-010 show: 25 time: Inf По сравнению с функцией traingd здесь добавляется только 1 параметр возмущения тс. Установим следующие значения параметров обучения: net.trainParam.epochs = 300; net.trainParam.goal = le-5; net.trainParam.lr = 0.05; net -trainParam.mc = 0.9; net.trainParam.show = 50; p = [-1 -1 2 2;0 5 0 5]; t = [-1 -1 1 1]; net = train(net,p,t); % Рис. 3.9 На рис. 3.9 приведен график изменения ошибки обучения в зависимости от числа выполненных циклов. <•■'■'■■ ?М11% ... 'J.J-.:.-: ' 1 : г. = i.'. sT. г *'=i..:»»Т. гТ= i7= T:h П гТ.'П ЛТгТ: = i=«К'й = * r:js;iejr»»5EJ!*;5e;s:*=*:";S:,!:"s",!i::5*-5""!',:!i!5 lIlIllllIliriiillllillllilliukilllSillllilllllilHI^ r г ? г г—"i -! г'-Нс. :!!!f!ji!!!!l!!5!!j!!!!!s!!Bi!5!!!!sH!:S«-tss!:H3 т 40 . 8В\ "91 цикл '■''■■ 7o;.^'bqj :f"90 ■ Рис. 3.9 5. Обучение нейронных сетей 71
/1 ■• a = sim(net,p) 1 a = -0.9956 -0.9998 0.9969 1.0009 Поскольку начальные веса и смещения инициализируются случайным образом, гра- -v фики ошибок на рис. 3.8 и 3.9 будут отличаться от одной реализации к другой. J Более тщательно ознакомиться с методом градиентного спуска с возмущением можно •>" с помощью демонстрационной программы nnd 12mo, которая иллюстрирует работу алго-'? ритма GDM. | Практика применения описанных выше алгоритмов градиентного спуска показывает,": что эти алгоритмы слишком медленны для решения реальных задач. Ниже обсуждаются- i алгоритмы группового обучения, которые сходятся в десятки и сотни раз быстрее. Ниже .>% представлены 2 разновидности таких алгоритмов: один основан на стратегии выбора па-л? раметра скорости настройки и реализован в виде алгоритма GDA, другой - на стратегии -\ выбора шага с помощью порогового алгоритма обратного распространения ошибки и pea- $: лизован в виде алгоритма Rprop. "'' Алгоритм GDA Алгоритм GDA, или алгоритм градиентного спуска с выбором параметра скорости на-.; стройки, использует эвристическую стратегию изменения этого параметра в процессе;! обучения. Эта стратегия заключается в следующем. Вычисляются выходи погрешность инициа-.i лизированной нейронной сети. Затем на каждом цикле обучения вычисляются новые . значения настраиваемых параметров и новые значения выходов и погрешностей. Если "' отношение нового значения погрешности к прежнему превышает величину max_perf_jnc (по умолчанию 1.04), то новые значения настраиваемых параметров во внимание не принимаются. При этом параметр скорости настройки уменьшается с коэффициентом lr_dec' (по умолчанию 0.7). Если новая погрешность меньше прежней, то параметр скорости на- • стройки увеличивается с коэффициентом lr_inc (по умолчанию 1.05). Эта стратегия способствует увеличению скорости и сокращению длительности обучения. . Алгоритм GDA в сочетании с алгоритмом GD определяет функцию обучения traingda, а в сочетании с алгоритмом GDM - функцию обучения traingdx. Вновь обратимся к той же нейронной сети (см. рис. 3.8), но будем использовать функцию обучения traingda: net = new£f([-l 2; 0 5],[3,1],{'tansig1,'purelin'},'traingda'); Функция traingda характеризуется следующими параметрами, заданными по умолчанию: net♦trainParam ans = epochs: 100 • '; goal: 0 lr: 0.0100 ..-; lr_inc: 1.0500 'i lr_dec: 0.7000 5 max_.fail: 5 max_perf_inc: 1.0400 min_grad: 1.0000e-006 show: 2 5 72 Нейронные сети. MATLAB 6.'.
Здесь epochs - максимальное количество циклов обучения; goal - предельное значение критерия обучения; 1г- параметр скорости настройки; lr_jnc- коэффициент увеличения скорости настройки; lr_dcc - коэффициент уменьшения скорости настройки; max_fail - максимально допустимый уровень превышения ошибки контрольного подмножества по сравнению с обучающим; max_perf_inc-пороговый коэффициент отношения погрешностей; min_grad - минимальное значение градиента; show - интервал вывода информации, измеренный в циклах; time - предельное время обучения. Установим следующие значения этих параметров: net.trainParam.epochs = 300; net.trainParam.goal = le-5; net.trainParam.lr = 0.05; net. trainParam.mc = 0.9; net.trainParam.show = 50; p = [-1 -1 2 2;0 5 0 5]; t = [-1 -1 1 1]; net = train(net,p,t); % Рис. 3.10 На рис. 3.10 приведен график изменения ошибки обучения в зависимости от числа выполненных циклов. ;Точнос1ьД31ОТе^/^р'ёдеды«я 1еь005 -J а = а = ■■.Via* Г-£Л.' Ш!ШШЖШ|!ШШШ!ШШШН!НШШ!р ."*""?" гУ*с;;с~ zi"" :iiiiiizczr::iri i::^:!"1!!! HiHHiuinS^imHnilHMiHJl "> r N^ J— * ;'"* !НН!1Н1ННН!МННН|ННШЦ|11У1ННН1=!М![ [iiiiiiiniiiiiiiiiiiiiiiiiiiiiiiikiiiTimiiiiiiiiBii i Г 1 "" p >^ !Ш11!1Н|11ПШ1шшиш1!шшпПШИ1!Ш1! Z'2~"Z"ZIZZZZZI~.ZY-Z~Z1~~Z I'ZZ.ZZZZZZZ ;Г 1 Г •. Г" Ш£МШ&?£$Ж sim(net,p) -0.9959 -1.0012 0.9963 0.9978 -*£•*? 1. ''wi'/i'A \-&.-0 -:-.",-^j '-j%^1 2&Ж Рис. 3.10 Нетрудно заметить, что количество циклов обучения по сравнению с предыдущим примером сократилось практически в 3 раза при сохранении той же погрешности обучения. Демонстрационная программа nndl2vl иллюстрирует производительность алгоритма с переменным параметром скорости настройки. Алгоритм Rprop Алгоритм Rprop, или пороговый алгоритм обратного распространения ошибки, реализует следующую эвристическую стратегию изменения шага приращения параметров для многослойных нейронных сетей. 3. Обучение нейронных сетей 73
г Многослойные сети обычно используют сигмоидальные функции активации в скры-4*' тых слоях. Эти функции относятся к классу функций со сжимающим отображением, по- ;1 скольку они отображают бесконечный диапазон значений аргумента в конечный диапазон £ значений функции. Сигмоидальные функции характеризуются тем, что их наклон при- ;-з ■ ближается к нулю, когда значения входа нейрона существенно возрастают. Следствием =; этого является то, что при использовании метода наискорейшего спуска величина гради-;Х ента становится малой и приводит к малым изменениям настраиваемых параметров, даже $ если они далеки от оптимальных значений. i Цель порогового алгоритма обратного распространения ошибки Rprop (Resilient!; propagation) [36] состоит в том, чтобы повысить чувствительность метода при больших | значениях входа функции активации. В этом случае вместо значений самих производных'^ используется только их знак. \ Значение приращения для каждого настраиваемого параметра увеличивается с коэф-•£ фициентом delt_inc (по умолчанию 1.2) всякий раз, когда производная функционала '"* ошибки по данному параметру сохраняет знак для двух последовательных итераций. ? Значение приращения уменьшается с коэффициентом delt_dcc (по умолчанию 0.5) всякий-" - раз, когда производная функционала ошибки по данному параметру изменяет знак ' по сравнению с предыдущей итерацией. Если производная равна 0, то приращение оста-'; ется неизменным. Поскольку по умолчанию коэффициент увеличения приращения co-i ставляет 20 %, а коэффициент уменьшения - 50 %, то в случае попеременного увеличения ; и уменьшения общая тенденция будет направлена на уменьшение шага изменения-"; параметра. Если параметр от итерации к итерации изменяется в одном направлении,"-"■ то шаг изменения будет постоянно возрастать. Алгоритм Rprop определяет функцию обучения trainrp. , {' Вновь обратимся к сети, показанной на рис. 3.8, но будем использовать функцию~1 обучения trainrp: l net = newff([-l 2; О 5],[3,1],{'tansig','purelin'},trainrp*); Функция trainrp характеризуется следующими параметрами, заданными по умолчанию:^ net.trainParam ans = epochs: 100 show: 25 goal: 0 time: Inf min_grad: 1.0000e-006 max„fail: 5 delt_inc: 1.2000 delt__dec: 0.5000 deltaO: 0.0700 deltamax: 50 Здесь epochs — максимальное количество циклов обучения; show - интервал вывода ин-: формации, измеренный в циклах; goal - предельное значение критерия обучения; lime -; предельное время обучения; min_grad -минимальное значение градиента; max_fail - мак-.. симально допустимый уровень превышения ошибки контрольного подмножества по срав- .* нению с обучающим; dclljnc - коэффициент увеличения шага настройки; deli_dec -. 74 Нейронные сети. MATLAB 6
коэффициент уменьшения шага настройки; deltaO - начальное значение шага настройки; deltamax - максимальное значение шага настройки. Установим следующие значения этих параметров: net.trainParam.show =10; net.trainParam.epochs = 300; net.trainParam.goal = le-5; p = [-1 -1 2 2;0 5 0 53; t = [-1 -111]; net = train(net/P#t); Ч Рис.3.11 На рис. 3.11 приведен график изменения ошибки обучения в зависимости от числа выполненных циклов обучения. | " Точность.2713738-006.~;пр'вдм>йа*'1е<05 . i'i ' ~'„ ..-' ',"}} шщшшшшшшшшшшшшшшт ЧН1111111111Ш1111111Ш1111Н1111111Ш111Н111!!; $Ш Рис.3. II а = sim(net#p) а = -0.9974 -1.0010 0.9995 0.9984 Нетрудно заметить, что количество циклов обучения по сравнению с алгоритмом GDA сократилось практически еще в 3 раза и составило по отношению к алгоритму GD значение, близкое к 8.5. 3.3.2. Алгоритмы метода сопряженных градиентов Основной алгоритм обратного распространения ошибки корректирует настраиваемые параметры в направлении наискорейшего уменьшения функционала ошибки. Но такое направление далеко не всегда является самым благоприятным направлением, чтобы за возможно малое число шагов обеспечить сходимость к минимуму функционала. Существуют направления движения, двигаясь по которым можно определить искомый минимум гораздо быстрее. В частности, это могут быть так называемые сопряженные направления, а соответствующий метод оптимизации -это метод сопряженных градиентов [18]. Если в обучающих алгоритмах градиентного спуска, управление сходимостью осуществляется с помощью параметра скорости настройки, то в алгоритмах метода сопряженных градиентов размер шага корректируется на каждой итерации. Для определения размера шага вдоль сопряженного направления выполняются специальные одномерные 3. Обучение нейронных сетей 75
процедуры поиска минимума. В состав ППП Neural Network Toolbox включено 5 спада. .дарованных М-функций для организации одномерного поиска: scrchbac, scrchbre^ srchcha, srchgol, scrchhyb. Любая из этих функций может быть использована в сочетании с любой из обучающих функций метода сопряженных градиентов. Есть наилучшие сочетания таких функций, но это зависит от конкретного приложения. И хотя по умолчанию с каждой функцией обуче- ^ ния связана определенная функция одномерного поиска, пользователь может осуществ- ,J лять их переназначение. Все алгоритмы метода сопряженных градиентов на первой итерации начинают поиск -f в направлении антиградиента г Po=~go- (3.22). Когда выбрано направление, требуется определить оптимальное расстояние (шаг по- - иска), на величину которого следует изменить настраиваемые параметры: Xjfc+i=xt+ctfcPjt. (3.23) ; Затем определяется следующее направление поиска как линейная комбинация нового * направления наискорейшего спуска и вектора движения в сопряженном направлении: Pft=-g*+P*'Pfc-i- (3-24) Различные алгоритмы метода сопряженного градиента различаются способом вычисления константы рк. Ниже описаны 4 алгоритма метода сопряженных градиентов. Алгоритм CGF Алгоритм CGF, реализующий метод Флетчера - Ривса [12,18], использует следующее выражение для вычисления константы метода: Р* = -f^~ ■ (3.25) - gft-iSjt-i В данном случае константа равна отношению квадрата нормы градиента на текущей к квадрату нормы градиента на предыдущей итерации. Вновь обратимся к сети, показанной на рис. 3.8, но будем использовать функцию обучения traincgf: net = newff<[-l 2; О 5],[3,1],{'tansig',■purelin'},'traincgf•); Функция traincgf характеризуется следующими параметрами, заданными по умолчанию: net.trainParam ans = epochs: show: goal: time: min grad: max_fail: searchFcn: scale^tol: 100 25 0 Inf l.OOOOe-006 5 1srchcha' 20 76 Нейронные сети. MATLAB 6
alpha: 0.0010 beta: 0.1000 delta: 0.0100 gama: 0.1000 low_lim: 0.1000 up„lim: 0.5000 maxstep: 100 minstep: 1.0000e-00 6 bmax: 2 6 Здесь epochs - максимальное количество циклов обучения; show - интервал вывода информации, измеренный в циклах; goal - предельное значение критерия обучения; time-предельное время обучения; min_grad - минимальное значение градиента; max_fail -максимально допустимый уровень превышения ошибки контрольного подмножества по сравнению с обучающим; searchFcn - имя функции одномерного поиска; scalejtol - коэффициент для вычисления шага tol процедуры одномерного поиска tol - delta/scalejtol; alpha - коэффициент, определяющий порог уменьшения критерия качества; beta - коэффициент, определяющий выбор шага; delta - начальный шаг разбиения интервала; gama - параметр, регулирующий изменение критерия качества; low Jim - нижняя граница изменения шага; up Jim - верхняя граница изменения шага; maxstep - максимальное значение шага; minstep - минимальное значение шага; bmax - максимальное значение шага для процедуры srehhyb. Установим следующие значения параметров: net.trainParam.epochs = 300; net.trainParam.show =5; net.trainPагат.goal = le-5; p = t-1 -1 2 2;0 5 0 5]; t = [-1 -1 1 1]; net = train(net,p,t); % Рис.3.12 На рис. 3.12 приведен график изменения ошибки обучения в зависимости от числа выполненных циклов обучения. -jiV' - '.'-'• ii ■;^,^^^2^^^^^^~^^^9^Ш^ЗКН^Щ^&й Рис. 3.12 а = sim(net,p) а = -1.0015 -0.9978 0.9999 0.9986 3. Обучение нейронных сетей 77
Алгоритм Флетчера - Ривса CGF работает намного быстрее, чем градиентный алгоритм CGM с выбором параметра скорости настройки, а иногда и быстрее, чем алгоритм Rprop, как в рассматриваемом случае; хотя на практике это зависит от конкретной задачи. Алгоритмы метода сопряженных градиентов требуют не намного больше памяти, чем градиентные алгоритмы, поэтому их можно рекомендовать для обучения нейронных сетей с большим количеством настраиваемых параметров. Демонстрационная программа nndl 2cg иллюстрирует работу алгоритмов минимизации на основе метода сопряженных градиентов. Алгоритм CGP Другой вариант алгоритма сопряженного градиента-это алгоритм CGP Полака-Ри- бейры (Polak - Ribierc) [ 12,18]. Для этого алгоритма константа метода рк выражается следующим образом: (3.26) Таким образом, коэффициент равен скалярному произведению приращения градиента на текущий градиент, деленному на квадрат нормы градиента на предыдущей итерации. Вновь обратимся к сети, показанной на рис. 3.7, но будем использовать функцию обучения traincgp: net и newf£([-l 2; 0 5],[3,1],{'tansig','purelin»},'traincgp'); Функция traincgp характеризуется теми же параметрами, заданными по умолчанию, что и функция trainegf. Изменим установку следующих параметров: net.trainParam.epochs =300; net.trainParam.show = 5; net.trainParam. goal = le-5; p = [-1 -1 2 2;0 5 0 51; t = [-1 -1 1 1]; net = train(net,p,t); % Рис.3.13 На рис. 3.13 приведен график изменения ошибки обучения в зависимости от числа выполненных циклов обучения. ■ ГПТШ?ГП11?ПТ11111ПТПТ1ПТП111ТП?ППТ11ГП III Рис. 3.13 78 Нейронные сети. MATLAB б
a = sim(net,p) a = -1.0014 -1.0015 0.9977 0.9983 Характеристика сходимости алгоритма CGP во многом похожа на характеристику алгоритма CGF. На практике трудно предсказать, какой алгоритм лучше гфимснить для решения конкретной задачи. Однако требования по памяти для алгоритма CGP несколько больше, посколькутрсбуется на каждой итерации 4 вектора, в то время как для алгоритма CGF -только 3. Алгоритм CGB Для всех алгоритмов метода сопряженных градиентов направление поиска периодически переустанавливается на направление антиградиента, или, иными словами, выполняется рестарт. Это происходит в тех случаях, когда возникают проблемы со сходимостью. Например, если количество итераций превысило число настраиваемых параметров сети, либо возникли иные условия, свидетельствующие о плохой сходимости. Одна из таких стратегий рестарта реализована в алгоритме CGB, предложенном Биеле (Beale) и Пауэл- лом (Powell) [2,33]. Согласно этой стратегии рестарт выполняется, если текущее и предшествующее направления градиентов слабоортогональны, и это условие определяется следующим образом: ||gLg*I*o.M ■ <3-27> Рассмотрим работу этого алгоритма на примере нейронной сети (см. рис. 3.8) net = newff{[-l 2; О 5],[3,1],{'tansig','purelin'},'traincgb') ; Функция traincgb характеризуется теми же параметрами, заданными по умолчанию, что и функция trainegf. Изменим установку следующих параметров: net.trainParam.epochs = 300; net.trainParam.show =5; net.trainParam.goal = le-5; p = [-1 -1 2 2;0 5 0 5]; t = [-1 -111]; net = train(net,p,t); % Рис.3.14 На рис. 3.14 приведен график изменения ошибки обучения в зависимости от числа выполненных циклов обучения. Рис. 3.14 3. Обучение нейронных сетей 79
a = sim(net,p) a = -1.0015 -1.0038 1.0045 1.0004 Характеристики алгоритма CGB в данном случае превосходят показатели сходимости алгоритма CGP, хотя для другой задачи или других начальных параметров это может оказаться не так. С точки зрения требований к оперативной памяти для алгоритма CGB требуется 6 векторов, в то время как для алгоритма CGP - 4. Алгоритм SCG Все рассмотренные выше алгоритмы, основанные на методе сопряженных градиентов, реализуют на каждой итерации процедуру одномерного поиска. Эта дорогостоящая в вычислительном отношении процедура требует на каждой итерации несколько раз вычислять реакцию сети. Алгоритм SCG, предложенный Моллером (Moller) [29], позволяет избежать излишних затрат. Этот алгоритм объединяет идеи метода сопряженных градиентов с квазиньютоновыми методами, и в частности использует подход, реализованный в алгоритме LM Левенберга - Марквардта. Вновь обратимся к сети, показанной на рис. 3.7, но будем использовать функцию обучения trainrp: net = newff{[-l 2; 0 5],[3,1],{'tansig','purelin'},-trainscg"); Функция trainrp характеризуется следующими параметрами, заданными по умолчанию: net.trainParam ans = epochs: 100 show: 25 goal: 0 time: Inf min_grad: 1.0000e-006 max_fail: 5 sigma: 5.0000e-005 lambda: 5.0000e-007 Первые 6 параметров рассматривались ранее. Поясним назначение последних двух параметров; параметр sigma управляет весом аппроксимированной матрицы Гессе, параметр lambda позволяет учесть степень неточности аппроксимации. Изменим установки некоторых параметров: net.trainParam-epochs = 300; net.trainParam.show = 10; net.trainParam.goal я ie-5; p = [-1 -1 2 2;0 5 0 5]; t = [-1 -1 11]; net = train(net,p,t); % Рис.3.15 На рис. 3.15 приведен график изменения ошибки обучения в зависимости от числа выполненных циклов обучения. 80 Нейронные сети. MATLAB б
* «г э Точность 1.760S1B-D36. предельная.! в-005 Illliiiiiiftiii ц::::::::::::: E!*U!!!!Es!;H И'^ЧЩИИ" Пиши !!!!!:■!' ; = = HIIh iliiliiiiiililllil :::;::::::::;::::: ;•!!!!!!!;:'■!1!!! »=«:? «?(="? = ^==i±=i=====! „,;„„„ м. :::::эс::;2::::::;;::::::::;::::::::;:::::;::;::::::;: шншпв шшщшп z=-*i*~-e-_:z: щ !Щ!Ш: :;:':::: ШШШНШШ! Ш|шши|нш :lE\:i:--"-:J::::: шшшш 1ЩШ11Ш ;::E:::::;i: ЭДНШ!^ нггпчнш! = zzz"~;czzr zz ;:::::::£::;:: ШИШ :::г::::' ■»Ч§1! =Е-Е:::: НННГЦИНШ! z::iz:z;;:::iri*^ ШИШИИ ннишнг ::zlzzzzzzz; щшщппнп шшннииш шнщпгшш ;;;;:;:гс:::;::— ::::;;::t.:::;;ii ;..::::;i;;;.:>^: : * ' а = s±m(net,p) а = -1.0007 -1.0012 .: • 3 - - Б циклов" 0.9986 Рис. 3.15 1.0018 Алгоритм SCG может потребовать большего числа итераций, чем другие алгоритмы метода сопряженных градиентов, но при этом количество вычислений на каждой итерации существенно сокращено. Требования по памяти для алгоритма SCG примерно такие же, как и для метода CGF. 3.3.3. Квазиньютоновы алгоритмы Алгоритм BFGS Альтернативой методу сопряженных градиентов для ускоренного обучения нейронных сетей служит метод Ньютона. Основной шаг этого метода определяется соотношением хш-х,-Щ'е„ (3.28) где Хк - вектор настраиваемых параметров; Н к - матрица Гессе вторых частных производных функционала ошибки по настраиваемым параметрам; gt - вектор градиента функционала ошибки. Процедуры минимизации на основе метода Ньютона, как правило, сходятся быстрее, чем те же процедуры на основе метода сопряженных градиентов. Однако вычисление матрицы Гессе - это весьма сложная и дорогостоящая в вычислительном отношении процедура. Поэтому разработан класс алгоритмов, которые основаны на методе Ньютона, но не требуют вычисления вторых производных. Это класс квозинь- ютоновых алгоритмов, которые используют на каждой итерации некоторую приближенную оценку матрицы Гессе. Одним из наиболее эффективных алгоритмов такого типа является алгоритм BFGS, предложенный Бройденом, Флетчером, Гольдфарбом и Шанно (Broyden, Fletcher, Goldfarb and Shanno) [9]. Этот алгоритм реализован в виде М-функции trainbfg. Вновь обратимся к сети, показанной на рис. 3.7, но будем использовать функцию обучения trainbfg: net = newff{[-l 2; 0 5],[3,1],{'tansig','purelin'},'trainbfg'); 3. Обучение нейронных сетей 81
Параметры функции irainbfg практически совпадают с параметрами функции traincgf, за исключением используемой программы одномерного поиска, которая в данном случае заменена М-функцисй srchbac. Установим параметры обучающей процедуры по аналогии с предшествующими примерами: net.trainParam. epochs = 300; net.trainParam.show = 5; net.trainParam.goal = le-5; p = [-1 -12 2;0 5 0 5]; t = [~1 -111]; net = train(net,p,t); % Рис.3.16 На рис. 3.16 приведен график изменения ошибки в зависимости от числа выполненных циклов обучения. Тсчкоси 3(M21J*007. ivuiMn*l*O05i-V.''.i''^?! Ж Щ ^ШШШ{ШШ!ПИ}1'|»^П;?ШИШЩ5П}!П;.!Ш' ]"П!"»:";ПП[[П!*5;П»:?5и!|!3;Н|1Ц|1П||!"!:Л Ш \м* 1|".-« teS&.l*.*:*- ^Шяшшмт Рис. 3.16 а = sim(net,p) а = -1.0011 -1.0001 0.9999 1.0003 Алгоритм BFGS требует большего количества вычислений на каждой итерации и большего объема памяти, чем алгоритмы метода сопряженных градиентов, хотя, как правило, он сходится на меньшем числе итераций. Требуется на каждой итерации хранить оценку матрицы Гессе, размер которой определяется числом настраиваемых параметров сети. Поэтому для обучения нейронных сетей больших размеров лучше использовать алгоритм Rprop или какой-либо другой алгоритм метода сопряженных градиентов. Однако для нейронных сетей небольших размеров алгоритм BFGS может оказаться эффективным. Алгоритм OSS Алгоритм OSS (One Step Secant), или одношаговый алгоритм метода секущих плоскостей, описан в работе Баттити (Battiti) [1]. В нем сделана попытка объединить идеи метода сопряженных градиентов и схемы Ньютона. Алгоритм не запоминает матрицу Гессе, полагая ее на каждой итерации равной единичной. Это позволяет определять новое направление поиска не вычисляя обратную матрицу. Вновь обратимся к сети, показанной на рис. 3.7, но будем использовать функцию обучения trainoss: net a newf£([-l 2; 0 5], [3,1],{•tansig','purelin'},'trainoss•); 82 Нейронные сети. MATLAB б
Функция trainoss характеризуется теми же параметрами, заданными по умолчанию, что и функция trainbfg. Установим параметры обучающей процедуры по аналогии с предшествующими примерами: net.trainParam.epochs = 300; net.trainParam.show =5; net.trainParam.goal = le-5; p = [-1 -1 2 2;0 5 0 5]; t = [-1 -1 1 1]; net=train(net #p,t); % Рис.3.17 На рис. 3.17 приведен график изменения ошибки обучения в зависимости от числа выполненных циклов обучения. ^'5J7,' Ц*| г Её s !:!■ t Si U!i!t5::E!i's:i::£! Si Isi: !■!!.::•!(!*. •«г;::=Ё!Ы;;!"«;н:!!!! ■=;='=! ;1ПП1111"!111Н!'1111!1ГЫ1!111111111111"Ш!1"1ё тшиии-ттщ-пуиии ise'llf ielllini v- ^тшттшатт. Рис. 3.17 а = sim(net,p) а = -1.0020 -0.9988 0-9994 1.0002 Этот алгоритм требует меньших объемов памяти и вычислительных ресурсов на цикл по сравнению с алгоритмом BFGS, но больше, чем алгоритм CGF. Таким образом, алгоритм OSS может рассматриваться как некий компромисс между алгоритмами методов сопряженных градиентов и Ньютона. Алгоритм LM Алгоритм LM Левенберга - Марквардта [17] реализует следующую стратегию для оценки матрицы Гессе. В предположении, что функционал определяется как сумма квадратов ошибок, что характерно при обучении нейронных сетей с прямой передачей, гессиан может быть приближенно вычислен как H = JrJ, (3.29) а градиент рассчитан по формуле g = JTe, (3.30) где j = J?£_ - матрица Якоби производных функционала ошибки по настраиваемым пара- aw метрам; е - вектор ошибок сети. Матрица Якоби может быть вычислена на основе стандартного метода обратного распространения ошибки, что существенно проще вычисления матрицы Гессе. 3. Обучение нейронных сетей 83
Алгоритм LM использует аппроксимацию гессиана следующего вида: x14=x,-(jrJ + nl)~'jV (3.31) Когда коэффициент ц равен 0, мы получаем метод Ньютона с приближением гессиана в форме (3.29); когда значение и. велико, получаем метод градиентного спуска с маленьким шагом. Поскольку метод Ньютона имеет большую точность и скорость сходимости вблизи минимума, задача состоит в том, чтобы в процессе минимизации как можно быстрее перейти к методу Ньютона. С этой целью параметр д уменьшают после каждой успешной итерации и увеличивают только тогда, когда пробный шаг показывает, что функционал ошибки возрастает. Такая стратегия обеспечивает уменьшение ошибки после каждой итерации алгоритма. Вновь обратимся к сети, показанной на рис. 3.8, но будем использовать функцию обучения trainlm: net = new£f([-l 2; 0 5],[3,1],{'tansig1,'purelin'},'trainlm'); Функция trainlm характеризуется следующими параметрами, заданными по умолчанию: net.trainParam ans = epochs: 100 goal: 0 rnax_fail: 5 mem_reduc: 1 min_grad: 1.0000e-010 mu: 0.0010 mu_dec: 0.1000 mu_inc: 10 mu_max: 1.0000e+010 show: 25 time: Inf В этом перечне появилось несколько новых параметров. Параметр mu -начальное значение для коэффициента ц. Это значение умножается либо на коэффициент mu_dec, когда функционал ошибки уменьшается, либо на коэффициент mu_inc, когда функционал ошибки возрастает. Если mu превысит значение mu_max, алгоритм останавливается. Параметр mem_reduc позволяет экономить объем используемой памяти, что обсуждается ниже. Установим параметры обучающей процедуры по аналогии с предшествующими примерами: net.trainParam. epochs = 300; net.trainParam.show = 5; net.trainParam.goal = le-5; p = [-1 -1 2 2;0 5 0 5]; t = [-1 -111]; net = train(net ,p,t); % Рис.3-18 На рис. 3.18 приведен график изменения ошибки обучения в зависимости от числа выполненных циклов обучения. 84 Нейронные сети. MATLAB 6
«f 10' 10-' ю" !«• r «Г toJ in* |::-l! s m mm та»ин IB тшш пшэнн TOMiaciWOTSJi-ttB. ДОАМыт 1*-ОК !1!ШЙМ!!!!ШМ!1!М£[!!!1!!^1Г1Ш! l?|il^li!!!iiig!!!!i(tii!!a!U[Hi ;:::':;:;:;: ШШШШ ШШШШ '!";"'"!' i"i*H'::;"S Ж :шг ir Ш!Г ||||Г r- ■ ■; : : x ^ ж w IZlll' !"!!! Е'"'1*М'' НШ§Ш! тшшшшй тттшшштшт iiiSniiiiiiiiiliiiniiiiSiliiii Sjiji! ffiiiil "="!:""; 1 щ !Ё а - sim(net,p) а = -1.0000 -0.9998 is Зцикм 1.0000 Рис. 3.18 0.9999 Как видим, здесь потребовалось всего 3 цикла обучения. Этот алгоритм, видимо, является самым быстродействующим и пригоден для обучения больших нейронных сетей с несколькими сотнями настраиваемых параметров. Этот алгоритм имеет очень эффективную реализацию в системе MATLAB, являющейся интерпретатором векторной машины, где операция скалярного произведения реализуется с высокой точностью и быстродействием на математическом сопроцессоре компьютера. Поэтому достоинства алгоритма Левснберга - Марквардта становятся еще более ощутимыми при работе в среде системы MATLAB. Демонстрационный пример nndl2m иллюстрирует применение алгоритма LM. Экономия памяти. Главный недостаток алгоритма LM состоит в том, что он требует памяти для хранения матриц больших размеров. Например, размер матрицы Якоби составляет Qxn, где Q - число обучающих наборов и п -число параметров сети. Это означает, что при оценке гессиана согласно соотношению (3.28) потребуются значительные ресурсы для ее хранения и вычисления. Как это часто делается при работе с матрицами, выполним ее декомпозицию, т. е. представим ее в виде разбиения на несколько подматриц. Допустим, что выделены 2 подматрицы; тогда соотношение (3.28) может быть записано в виде: H = JrJ = Л [J. J2]= J[J, JJJ. J, J2 2. (3.32) В этом случае уже не требуется хранить полную матрицу Якоби, а оценка гессиана может быть вычислена с использованием подматриц меньших размеров. Причем в процессе формирования матрицы Гессе использованные подматрицы могут быть удалены из оперативной памяти. При применении М-функции trainlm с помощью параметра mem„reduc можно указывать, на какое число подматриц разбивается исходная матрица. Если параметр mem_rcduc равен 1, то используется полная матрица Якоби; если mcm_reduc = 2, то матрица Якоби разбивается 3. Обучение нейронных сетей 85
по строкам на 2 части и сначала обрабатывается одна половина, а затем вторая. Это экономит половину объема памяти, требуемой для вычисления полного якобиана Что же касается быстродействия, то оно будет частично потеряно. И если вам доступна достаточная оперативная память, то лучше устанавливать параметр mem_reduc равным 1. Это особо касается системы MATLAB, которая позволяет извлечь все преимущества при использовании математического сопроцессора. Если же все-таки имеющаяся память оказалась исчерпанной, то следует назначить параметр mem_reduc равным 2 и выполнить расчеты заново. Если и при этом памяти не будет достаточно, следует еще увеличить значение этого параметра. 3.3.4. Алгоритмы одномерного поиска Рассмотренные выше алгоритмы оптимизации являются стратегиями, которые обеспечивают минимизацию функционала обучения. В процессе работы этих алгоритмов, как правило, возникает задача одномерного поиска минимума вдоль заданного направления. Это могут быть направления антиградиента или сопряженные направления. В рамках ППП Neural Network Toolbox используется 5 функций одномерного поиска. При работе того или иного алгоритма они задаются параметром srchFcn, который определяет имя функции поиска. Для многих процедур эта функция задается по умолчанию, но она может быть изменена по желанию пользователя при определении процедуры обучения нейронной сети. Алгоритм GOL Алгоритм GOL, или алгоритм золотого сечения [18], реализуемый с помощью функции srehgol, выполняет одномерный поиск минимума функции с помощью последова- ; тельного перебора, и это не требует вычисления производной. В первую очередь алгоритм определяет интервал, в котором находится минимум целевой функции. Это достигается путем вычисления последовательности точек с интервалом delta и последующим удвоением этого интервала на каждом шаге вдоль направления поиска. Если целевая функция между двумя последовательными шагами начинает возрастать, то интервал, в котором находится минимум, найден. Следующий шаг состоит в уменьшении размера интервала, содержащего минимум. Для этого используется принцип половинного деления. Соответствующая процедура продолжается до тех пор, пока интервал неопределенности не уменьшится до величины tol, равной delta/sca!e_tol. Демонстрационная программа nndl2sd 1 иллюстрирует одномерный поиск минимума функции методом золотого сечения в сочетании с алгоритмом градиентного спуска GD. Алгоритм BRE Алгоритм BRE, или алгоритм Брента (Brent) [3], - это алгоритм одномерного поиска, который является комбинацией метода золотого сечения и квадратичной интерполяции. Методы последовательного перебора, подобные методу золотого сечения, имеют скорость сходимости первого порядка, в то время как полиномиальные методы интерполяции имеют асимптотическую скорость сходимости более высокую, чем линейная. С другой стороны, сходимость метода золотого сечения носит глобальный характер, т. е. обеспечивается на любом шаге работы алгоритма, в то время как сходимость метода полиномиальной интерполяции является лишь локальной (асимптотической) и может потребовать выполнения большого числа итераций. Метод Брента направлен на то, чтобы объединить лучшие свойства обоих методов. 86 Нейронные сети. MATLAB 6
Одномерный поиск по методу Брента начинается с использования алгоритма золотого сечения, но при этом вычисляются некоторые дополнительные точки. По этим точкам рассчитывается аппроксимирующая квадратичная функция и вычисляется ее минимум. Если этот минимум находится в пределах исследуемого интервала, то он используется для уточнения квадратичной аппроксимации в пределах этого же интервала. Если минимум находится за пределами интервала, то продолжается поиск методом золотого сечения. Алгоритм имеет то преимущество, что не требует вычисления производной, поскольку это требует больших вычислительных ресурсов. Однако общее число точек, в которых требуется вычисление целевой функции, может оказаться большим, чем в алгоритмах, которые используют информацию о производной этой функции. В рамках ППП Neural Network Toolbox этот алгоритм реализован в виде М-функции sctchbre. Алгоритм HYB Алгоритм HYB - это гибридный алгоритм, подобный алгоритму BRE, но использует другую комбинацию методов, а именно метод половинного деления и кубическую интерполяцию [41]. Алгоритм метода половинного деления предполагает вычисление целевой функции и ее производной в срединной точке исследуемого интервала, и это позволяет отбросить одну из половин. Таким образом организуется процедура последовательного перебора, которая обеспечивает глобальную сходимость, но характеризуется лишь линейной скоростью. Кубическая интерполяция строится с использованием значений целевой функции и ее производной в конечных точках интервала. Если минимум аппроксимирующей функции попадает в исследуемый интервал, то он используется для уточнения кубической аппроксимации в пределах этого же интервала. Если минимум находится за пределами интервала, то продолжается поиск методом золотого сечения. В противном случае используется алгоритм половинного деления. Следует заметить, что алгоритм HYB требует вычисления производных, и это приводит к большему объему вычислений на каждом шаге по сравнению с алгоритмами GOL или BRE. Врамках1ди1№игаШе^огкТоо1Ьохэтотащт>рита Алгоритм СНА Алгоритм СНА, или алгоритм Чараламбуса (Charalambous) [8], - это специальный алгоритм одномерного поиска, разработанный для обучения нейронных сетей на основе алгоритма градиентного спуска GD. Подобно двум предшествующим алгоритмам он реализует гибридный метод поиска и использует кубическую интерполяцию в сочетании с методом деления интервала на части. Этот алгоритм используется по умолчанию для большинства алгоритмов метода сопряженного градиента, так как опыт показал, что он обеспечивает прекрасные результаты при решении практических задач. Алгоритм требует вычисления производной в дополнение к вычислению самого функционала ошибки, однако он организован таким образом, что локализует минимум за меньшее количество шагов. Это справедливо не для всех задач, встречающихся на практике, и тогда пользователь может обратиться к другим алгоритмам одномерного поиска. В рамках ППП Neural Network Toolbox этот алгоритм реализован в виде М-функции srehcha. 3 Обучение нейронных сетей 87
Алгоритм ВАС Алгоритм ВАС. или алгоритм перебора с возвратами [9], -это наилучший алгоритм одномерного поиска для квазиньютоновых алгоритмов минимизации. Он начинает работать с вектором приращений настраиваемых параметров, найденным в алгоритме минимизации, т. е. реализует одномерный поиск в направлении настройки параметров сети. Выбор шага поиска в этом направлении регулируется параметром lambda, который первоначально устанавливается равным 1. На первой итерации алгоритм использует значение целевой функции и се производной, чтобы построить квадратичную аппроксимацию целевой функции вдоль направления поиска. Минимум этой аппроксимирующей функции выбирается в качестве приближения к оптимальной точке и затем оценивается функционал ошибки в этой точке. Если значение функционала недостаточно мало, то строится кубическая интерполяция и ее минимум выбирается в качестве новой оптимальной точки. Этот процесс продолжается до тех пор, пока не будет достигнуто существенное уменьшение функционала ошибки. В рамках ППП Neural Network Toolbox этот алгоритм реализован в виде М-функции srehbac. Эта функция используется по умолчанию при работе с квазиньютоновыми алгоритмами минимизации, хотя она и не всегда может оказаться наилучшей при решении конкретной практической задачи. 3.3.5. Расширение возможностей процедур обучения Очень трудно определить, какой обучающий алгоритм будет самым быстрым при решении той или иной практической задачи. Это зависит от многих факторов, включая сложность задачи, число элементов обучающего множества, число настраиваемых параметров сети и конечную ошибку. Вообще говоря, для сетей, которые содержат до нескольких сотен параметров, алгоритм LM имеет самую быструю сходимость. Это преимущество особенно значимо, если требуется высокая точность обучения. Алгоритмы методов Ньютона и секущих плоскостей занимают следующее место для нейронных сетей умеренных размеров. Алгоритм BFGS требует значительного объема памяти для хранения матрицы Гессе, но при этом значительно превосходит по быстродействию алгоритмы метода сопряженных градиентов. Среди алгоритмов метода сопряженных градиентов алгоритм CGB Пауэлла - Биеле требует наибольших объемов памяти, но обычно имеет самую быструю сходимость. Алгоритмы Rprop и SCG не требуют использования процедур одномерного поиска и предъявляют незначительные требования к памяти. Они работают достаточно быстро и могут быть рекомендованы для решения задач большой размерности. Алгоритм CGS с переменным параметром скорости настройки обычно работает намного медленнее других алгоритмов и требует приблизительно столько же памяти, как алгоритм Rprop, но при решении некоторых практических задач он может оказаться весьма полезным, поскольку возникают ситуации, когда оказываются предпочтительными алгоритмы с медленной сходимостью, например при использовании стратегии прерывания. При решении практических задач рекомендуется начинать с алгоритма LM. Если при этом требуется слишком много памяти, то следует перейти к алгоритму BFG или одному из алгоритмов метода сопряженных градиентов. Алгоритм Rprop также характеризуется высоким быстродействием и предъявляет относительно малые требования к объему используемой памяти. 88 Нейронные сети. MATLAB 6
Табл. 3.1 иллюстрирует характеристики различных алгоритмов при решении с помощью нейронных сетей одной частной задачи регрессионного анализа. Таблица 3.1 М-фуикция ППП traingds train rp train scg traincgf traincgp traincgb trainoss train bfg trainlm Алгоритм GDS Rprop SCG CGF CGP CGB OSS BFGS LM Время, с 57.71 12.95 _ 16.06 16.40 16.16 15.03 18.46 10.86 1.87 Циклы ■ обучения 980 185_ 106 81 89 74 101 44 6 Число операций, Mjlops 2.50 0.56 0.70 0.99 0.75 0.59 0.75 1.02 0.46 Сеть типа 1-10-1, имеющая 1 вход, 10 скрытых нейронов и 1 выход, обучалась с использованием последовательности из 41 элемента, представляющих пары вход-целевой выход, пока не была достигнута среднеквадратичная погрешность обучения, равная 0.01. Для каждого алгоритма обучения было выполнено 20 прогонов, чтобы получить усредненные показатели, приведенные в таблице. Рассматривать эти показатели надо весьма осторожно, поскольку приведенные данные относятся к конкретной задаче и могут существенно измениться при решении какой-либо другой задачи. Обратите внимание, что нет прямой связи между количеством операций с плавающей точкой и временем выполнения алгоритма. Это связано с тем, что некоторые алгоритмы используют особые приемы при реализации встроенных функций системой MATLAB. Это в первую очередь касается реализации алгоритма LM. Переобучение Одно из явлений, которое наблюдается в процессе обучения нейронных сетей, -это явление переобучения. Оно заключается в том, что ошибки обучения на элементах обучающего множества оказываются очень малыми, но когда сети представляются новые данные, то погрешность существенно возрастает. Это означает, что сеть заучила примеры, но не научилась решать задачу, т. е. приспосабливаться к новым данным. Рассмотрим нейронную сеть типа 1-30-1 с одним входом, 30 скрытыми нейронами и одним выходом, которую необходимо обучить аппроксимировать функцию синуса, если заданы ее приближенные значения, которые получены как сумма значений синуса и случайных величин, распределенных по нормальному закону: net = newff([-l 1],[30,!],{'tansig','purelin'b'trainbfg1); net.trainParam.epochs = 300; ' net.trainParam.show = 50; net.trainParam.goal = le-5; p = [-1:0.05:1]; t = sin(2*pi*p)+0.1*randn(size(p)); % Возмущенные значения функции tl = sin{2*pi*p); % Обучающая последовательность [net,tr] = train(net,p,t); % Рис.3.19 3. Обучение нейронных сетей 89
На рис. 3.19 приведен график изменения ошибки обучения в зависимости от числа циклов обучения. Точность 7.24б95е-О06, предельная 1е-С05 I 10'" | to о ^:::р:::р:::^:::::4":"р::::|:::::р:"^::"|:::: Щ;Ш1НШ1|||ПНН1ЩН1ШН|ШН i : ; 1 i i i ; i 20'.■:-«* 60:^;;ieq.;;'- 100 V 120 \ 140^1.160^,180', ;.A'k' 1Й Циклов ' "-"•"{-;--''"* ■ :."•'V." Рис. 3.19 Для того чтобы убедиться, что в данном случае мы сталкиваемся с явлением переобучения, построим графики аппроксимируемой функции, ее приближенных значений и результата аппроксимации (рис. 3.20): an = sim(net,p); % Значения аппроксимирующей функции plot(p,t, * + ',&,ала., ■-■jPjtl, •: ■) Ss Рис.3.20 / m ' ! I + вход ; i — выход !*., I — singpi'p w-X' -1— ' i i .1 • \ • i i f. \i i : ; s/i к i ■ 1 :/-: РП > i ■/ i 14 i i , Vii""} Г Vi V"f. Анализ сигналов на рис. 3.20 показывает, что построенная нейронная сеть действительно точно отслеживает входной сигнал, но не восстанавливает функцию синуса. Один из способов исправить ситуацию заключается в том, чтобы использовать сеть с меньшим числом нейронов, т. е. меньшей мощности, которая не могла бы точно воспроизводить на выходе входной сигнал. Демонстрационный пример nndl lgn иллюстрирует, 90 Нейронные сети. MATLAB 6
как количество скрытых нейронов влияет на точность обучения сети при аппроксимации сигналов разной сложности; там же вы сможете наблюдать явление переобучения, которое при аппроксимации сигналов небольшой сложности можно предотвратить за счет сокращения числа скрытых нейронов. К сожалению, заранее трудно предсказать, насколько мощной должна быть сеть для конкретного приложения. Поэтому рассмотрим 2 регулярных подхода, которые позволяют преодолеть явление переобучения. Метод регуляризации Первый подход связан с использованием метода регуляризации, предложенного в 1963 г. российским математиком А. Н. Тихоновым [50]. Суть этого метода заключается в том, чтобы видоизменить функционал качества таким образом, чтобы он всегда имел минимум и положение этого минимума непрерывно зависело от параметра регуляризации. Модификация функционала качества. Типичный функционал качества, который используется при обучении нейронных сетей с прямой передачей, -это функционал средней суммы квадратов ошибки обучения Если модифицировать функционал добавлением слагаемого вида msw^-Yw1:, (3.34) то это будет означать, что большие значения настраиваемых параметров при обучении сети будут существенно штрафоваться, а это вынудит реакцию сети быть более гладкой и снизит вероятность возникновения явления переобучения.- Введем параметр регуляризации у и построим следующий регуляргаирующий функционал: rnsereg = у mse+(1 - у)msw. (3.35) Рассмотрим нейронную сеть типа 1-5-1 с одним входом, пятью скрытыми нейронами и одним выходом. Эта сеть использует те же типы нейронов, что и предыдущая сеть, но количество скрытых нейронов в 6 раз меньше, предельное количество циклов обучения сокращено до 100, а параметр регуляризации равен 0.9998. net = newf£([-l l], [S/ll^'tansig1, 'purelin'}, 'trainbfg') ; net.trainParam.epochs ~ 100; net.trainParam.show =50; net.trainParam.goal = le-5; net.performFcn = 'msereg*; net.performParam.ratio - 0.9998; p =: [-1:0.05:1]; t = sin(2*pi*p)+0.1*randn(size(p)) ; % Возмущенные значения функции tl = sin(2*pi*p); % Обучающая последовательность [net,tr] = train(net,p,t); % Рис.3.21,a an = sim(net,p); % Значения аппроксимирующей функции plot(p,t,•+,,P/an,'-',p,tl,':'} % Рис.3.21,6 3. Обучение нейронных сетей 91
;." На рис. -3.21, а показан график изменения ошибки обучения, из которого следует, что=-.!Ц \^ ошибка обучекия составляет величину порядка 0.01; на рис. 3.21, б показаны результаты.'% I аппроксимации, из которых следует, что при использовании.пяти'нейронов в скрытом .. слое переобучение не" наблюдается, кривая выхода аппроксимирует функцию синуса,? "" неточность аппроксимации недостаточна. '.■.■-'.-....; V '.'л^-.-.-.- Ж ^Ж —-.}.... j....<-v- -|,—{.-—j.--. ь-.-;- ш «•^шяшаш ifsa Ж •да .."Uj+i*.;. tuntu }- .^Hr;t:i: Щ :-i"---2--^-^*i----"-a--'^/-i-r----«-"- - - J- Л|—Ч".^ : i - : / : • i : \_ : ii JSB *л*Й Л- Ш^ - *ч ЗЙЖ. 1?йМ^ШЬ^зШ^Ш1Ш Ё23&3^ -, . ■ ----- - --- л* - " Рис. 3.21 V* 7; : -*''-.■'■ '"■■'■'-." Л Сложность применения.метода регуляризации состоит в том, что очень трудно.опре^^ делить оптимальное значение параметра регуляризации и количество требуемых нейро-'Щ нов. Ниже представлен алгоритм, который позволяет автоматически установить параметр-^ регуляризации. ,- - , . Л- ; .__*-'-- -;•;. . \ "-|§ . Автоматическая регуляризация. Автоматический выбор параметра регуляризации мо-: 'S жег быть реализован на.основе правила БайесК Этот, подход был предложен Д. Мак^ | Кейем (D. МасКау) [27] и состоит в том- что веса и смещения сети,рассматриваются как:| случайные величины с известным законом распределения^ Параметр регуляризации;свя^ зан с дисперсией этого распределения и. может быть оценен с использованием статистиче-:^ ских методов; Детальное описание процедуры регуляризации с использованием правила^ Байеса и алгоритма Л евенберга^Марквардта можно найти вработе [11]. Соответствую-^ щая процедура реализована в видеМ-функции trainbr. .. Вновь обратимся к нейронной сети типа 1-20г? 1,. предназначенной для решения задачЁШ аппроксимации функции синуса:; . ; \ г--■.--:; ;. - . ' ,■ -'г; v v-'1'' ~- '•"'■." -- net = newf f.([ -1- 1].', [2 0 ,1], {•' tansig.'', • purelin• }> «trainbr,') ; Функция trainbr характеризуется следующими параметрами, заданными'по уцолчанию^ щ Л1 :''Г5? Ь: Л net.trainParam ans = - epochs: show г ..■>-■/- •■ ■".. -goal:- time': 'min_grad:- -.-•' max^fail: mem„reduc:J mu: 100- - 25- 0. •*-.-; ■■: Inf-;- -.Г le-010 5-. '1'. ■- '■-' ■. 0.005 " ■m 92 Нейронные сети. МАТ1АВ 6Щ.
IP 11 *r U it :^ S- *» , mu_dec: - 0.1 ■ .' \ - ■"- v-"..'■ . ; /'- .-.-"- mu_iric:; 10. / mu_raax:..le+-Q10 .-....,.. Этот список соответствует списку параметров М-функции trainlm. Установим следующие значения этих параметров: ! net = newff([-1.1],[20,1],{'tarisig!,.'purelin'},'trainbr*); net.trainParam.epochs = 50; , . -Д. . ;■ net.trainParam.shoW; = 10'; . \ . randnCseed',1?2736547); ' " \' p = [-li.05il]; t = sin{2*pi*p)+0.1*randn(size(p)) ; ' ' л . net = init(net); ■ -;. -■ \~. :.r'.-. . net = . train{net,p,t); % Рис. 3.22 I __"._:= '_. ___ . -_- тжштщщтттт. rviii V /'".lli':';!; h^'v 7i ■ pMhv#&—г = ■> =—. , „,„ : Ъу.М»г —~~—'— — r-. ~." stiPQj ! : vr Рис. 3.22 На рис. 3.22 показаны изменения суммы квадаатрв;ршибЪк"и вес6в,а также оптимальное количество настраиваемых параметров, нейронной сета. В данном случае после обучения используется'приблизитёльно 18' - из общего числа 61 - параметров сети типа 1420-i.';;.:/' '_-_ -; ■; -•;/ .-■;_;; :''\ ■■..л'-S..wL.;\^Ji:'»;.7-.^.:'\ ■ '■I'-.,"' .'?''' Построим графики.исследуемых функции:i'.'-'. v- -.-_■:.£;■ _;-'.; '•-.-; v' _■."■". - <:■ К- '" 1 -. .""..'.*■. *, _;'.!■ ■' -•--■■..'- й • •' - -<:.\,',-i.--'" >.':,•■■ ' -':--ч-* !~*"Ч'..Л"!."':»": _'.г _;:.:'"„■", ' . an и sim(net,p) ; % Значения аппроксимирующей функции!-...,.<.. ., ■ 11 = ' sin{2*pi*р)';..,%. Значения.,аппроксимируемой:- функции. л., , plot (p,tr'+',p,an, '-'~,p/tl, ':"');!..% Рис. ^З.гЗ: ~'~ / ~.-\\ - ., Рис. 3^.23 иллюстрирует реакцию построенной нейронной сети при решении задачи аппроксимации,, В. отличие от рис.13.19, на котором видно, что в сети существует переобучение, здесь мы видим, что реакция сети близка к.основной. функции синуса. Следовательно, сеть хорошо приспособлена к. новым входам. Можнр,попробовать реализовать более мощную исходную сеть, но при этом в реакции сети никогда не будет проявляться эффект переобучения. Таким образом, процедура обучения, trainbr представляет собой некоторую регулярную процедуру для определения оптимального.числа настраиваемых параметров и, как следствие, оптимального размера сети. - ■*. .\ ..« . .■., -\- , 3. Обучение нейронных сетей 93
!+ i i ! ....,£ :.„:_.._.: ./LM....L.J / .— ..„_L.V.!.—i--j : + : r ■ L. j«;_—i-X: ■ v. i / i : : :ч\+^ : ■+- вход sin(2pi*t) ■ -;■+■ ■ • L...i....J../. i К i/ L„..:.^JA„ -0.8 -0.6 -0.4 -0.2 О 0.2 >' 0.4- 0.6 0.8 1 ' Рис. 3.23 Формирование представительной выборки Другой способ преодоления эффекта переобучения связан с организацией целенаправленной процедуры прерывания обучения. Для этого из исходных данных выделяется 3 подмножества. Первое—обучающее подмножество {training set), второе -контрольное подмножество {validation set) и третье -тестовое подмножество (test set). Обучающее подмножество используется для настройки параметров сети; контрольное подмножество используется в течение всего процесса обучения для того, чтобы контролировать представительность используемой выборки. Как правило, ошибка для контрольного подмножества на начальной фазе обучения уменьшается, так же как и ошибка для обучающего подмножества. Однако когда ошибка для контрольного подмножества начинает увеличиваться, это означает, что в сети начал проявляться эффект переобучения. В этом случае фиксируется итерация, на которой ошибка для контрольного подмножества была минимальной, и восстанавливаются соответствующие значения настраиваемых параметров сети. Соответствующая длина выборки признается представительной. Ошибка для тестового подмножества обычно не используется в процессе обучения, а применяется для сравнения различных моделей. Однако полезно рассчитывать погрешность для тестового подмножества в течение всего процесса обучения. Если соответствующая ошибка достигает минимума при ином числе итераций, чем для контрольного подмножества, то это может указывать на неудачное выделение подмножеств из набора исходных данных. Процедура прерывания обучения может быть реализована с любой из обучающих функций, описанных ранее. Для этого просто следует передать информацию о признании выборки представительной самой обучающей функции. Следующая последовательность операторов показывает, как организовать процедуру прерывания обучения. Вновь обратимся к задаче аппроксимации функции синуса. Сформируем обучающее подмножество на интервале входных значений от -1 до 1 с шагом 0.05 в виде суммы функции синуса и погрешности, описываемой случайной величиной, распределенной по нормальному закону с дисперсией 0.01: р = [-1:0.05:1]; t = sin(2*pi*p)+ 0.1*randn(size{p)); 94 Нейронные сети. MATLAB 6
Затем сформируем контрольное подмножество. Определим входы в диапазоне от -0.975 до 0.975 и, чтобы сделать задачу более реалистичной, добавим некоторую помеху, распределенную по нормальному закону: v.P = [-0.975:.05:0.975J? v.T = sin(2*pi*v.P)+0.1*randn(size(v.P)); Тестовое подмножество в данном примере не используется. Вновь сформируем нейронную сеть типа 1-20-1 и обучим се. Обратите внимание, что контрольное подмножество в виде массива структуры передается функции обучения в качестве шестого входного параметра. В данном случае используется обучающая функция traingdx, хотя может быть применена и любая другая функция обучения. net = newff([-l 1], [20,1] , { 'tansig', 'purelixi' }, 'traingdx*) ; net.trainParanw epochs = 300; net.trainParam. show = 25; net = init(net); tnet,tr] = train(net,p,t, [] , H#v) ; % Рис. 3.24 Анализ рис. 3.24 показывает, что ошибка контрольного подмножества превысила ошибку обучающего подмножества вблизи 70-й итерации и далее эта ошибка постоянно превышала ошибку обучающего подмножества, пока на 141-й итерации их отношение не превысило величину maxfail, по умолчанию равную 5, и произошло прерывание процедуры обучения. ^"<-:\~,;: ;-*■'$'.:&# -ifi-.. . Циклов. 1 ill -гл -;г* if-.'.; 'if':: Рис. 3.24 Построим графики исследуемых функций (рис. 3.25): an = sim(net,p); % Значения аппроксимирующей функции tl = sin(2*pi*p); % Значения аппроксимируемой функции plot(p,t,•+•,р,ап,'-■,p,tl,': ' )% Рис.3.25 3. Обучение нейронных сетей 95
* Рис. 3.25 Из анализа рис. 3.25 следует, что в сети отсутствует эффект переобучения, хотя реакция на выходе сети не такая гладкая, как при использовании метода регуляризации (рис. 3.23). Предварительная обработка и восстановление данных Вычислительная процедура обучения нейронной сети связана с проведением больших объемов вычислений с данными, диапазоны изменения которых могут существенно различаться и которые имеют случайные разбросы, обусловленные погрешностью их измерения или задания. Поскольку обработка таких данных выполняется на компьютерах, имеющих ограниченный диапазон представления чисел и ограниченную точность выполнения операций умножения и алгебраического сложения в арифметике с плавающей точкой, то необходимо предпринять определенные меры, чтобы такая обработка не привела к потере точности. Для этого осуществляется предварительная обработка данных с целью привести значения элементов обучающего множества к определенному диапазону (масштабирование данных), ограничить разброс случайных величин (нормировка данньк), избавиться от несущественньк данных (факторный анализ). Поскольку эти операции являются вспомогательными и связаны только с особенностями вычислений, то необходимо предусмотреть восстановление масштабов данных на выходе нейронной сети. Все это направлено на то, чтобы обеспечить достоверность вычислений, повысить точность обучения и в конечном счете обеспечить эффектив-. ность функционирования проектируемой нейронной сети. Для этой цели в составе ППП Neural Network Toolbox предусмотрены следующие М-функ- ции для предварительной подготовки и восстановления данных при обучении нейронных сетей: Операция Масштабирование Нормировка Факторный анализ Регрессионный анализ Обработка обучающего множества premnmx prestd prepca Обработка выходных данных postmnmx poststd - postreg Обработка входных данных tramnmx trastd trapca Масштабирование. Перед тем как начинать процедуру обучения, бывает полезно провести масштабирование векторов входа и целей так, чтобы их элементы оказались в определенном интервале значений. В частности, М-функция premnmx предназначена для приведения данных к интервалу [~1 1 ]. 96 Нейронные сети. MATLAB б--
% Масштабирование входов и целей [pn,minp,maxp#tn,mint,maxt] = premnmx(p, t); net = train(net,pn,tn); % Обучение сети Входными параметрами этой функции являются массивы р и t, соответствующие входам и целевым выходам. Элементы выходных массивов рп и in имеют значения в интервале [-1 1 ]. Векторы minp и maxp включают минимальные и максимальные значения исходных векторов входа, а векторы mint и maxt—минимальные и максимальные значения исходных векторов целей. После завершения процедуры обучения эти векторы используются для масштабирования векторов входов и целей, подаваемых на вход сети. Эти параметры становятся неотъемлемой частью параметров, определяющих сеть, как, например, се веса и смещения. Если выполнено масштабирование входов и целей с использованием М-функции premnmx, то выходы сети будут иметь значения в интервале [-] 1]. Для приведения вектора выхода к исходным единицам измерения используется М-функция postmnmx. Ее следует применять после того, как выполнено моделирование сети: an = sim{net,pn) ; % Моделирование сети с масштабированным входом а = postmnmx (an, mint, maxt} ; % Восстановление исходного масштаба Если функция масштабирования premnmx использовалась для обучения сети, то при последующей работе с такой сетью необходимо масштабировать новые входные последовательности, используя М-функцию tramnmx: pnewn = tramnmx (pnew,minp,maxp) ; % Масштабирование поступающих входов anewn = sim(net, pnewn) ; % Моделирование сети anew = postmnmx (anewn, mint,maxt) ; % Восстановление исходного масштаба Нормировка. В тех случаях, когда обучающее множество включает случайные величины, распределенные по нормальному закону, приведение элементов к единому масштабу связано с процедурой нормировки данных с использованием величин среднего значения и стандартного отклонения. Эта процедура выполняется с помощью М-функции prestd, которая нормирует входы и цели так, чтобы они имели среднее значение, равное О, и стандартное отклонение, равное 1. [pn,meanp, stdp, tn,meant, stdt] ~ prestd(p, t) ; Входными параметрами этой функции являются массивы р и t, соответствующие входам и целевым выходам. Элементы выходных массивов рп и tn будут иметь среднее значение, равное 0, и стандартное отклонение, равное I. Векторы теапр и stdp включают средние значения и стандартные отклонения исходных векторов входа, а векторы meant и stdt - средние значения и стандартные отклонения исходных векторов целей. После завершение процедуры обучения эти векторы используются для масштабирования векторов входов и целей, подаваемых на вход сети. Эти величины становятся неотъемлемой частью параметров, определяющих сеть, как, например, ее веса и смещения. Если выполнено масштабирование входов и целей с использованием М-функции prestd, то выходы сети будут нормированы так, что их среднее значение равно 0, а стандартное отклонение-1. Для приведения вектора выхода к исходным единицам измерения используется М-функция poststd. Ее следует применять после того, как выполнено моделирование сети: an = sim(net,pn); % Моделирование сети с нормированным входом а = poststd (an,meant, stdt) ; % Восстановление исходных единиц измерения 3. Обучение нейронных сетей 97
Если функция нормировки presld использовалась для обучения сети, то при после- --: . дующей работе с такой сетью необходимо нормировать новые входные последовательности, используя М-функцию trastd: pnewn - trastd (pnew,meanp, stdp) ; % Нормировка векторов входа axiewn = sim(net,pnewn) ; % Моделирование сети % Восстановление исходных единиц измерения anew = poststd(anewn,meant,stdt); Факторный анализ. Во многих случаях, когда векторы входа содержат большое число . элементов, они оказываются коррелированными, т. е. взаимосвязанными между собой, - и, следовательно, избыточными для процедур обучения. В этом случае полезно сократить . размеры векторов входа. Для этого применяется процедура статистической обработки, называемая факторным анализом. При применении этой процедуры решаются 3 задачи: • выполняется ортогонализация векторов входа, что исключает их взаимную корреляцию; ;'■ • выполняется упорядочение векторов обучающего множества так, чтобы векторы, охватывающие большой диапазон значений, были первыми (главные компоненты); • удаляются векторы, диапазон значений которых незначителен. -• Для реализации процедуры факторного анализа предназначена М-функция ргерса: [pn,meanp,stdp] = prestd(p);% Нормализация вектора входа [ptrans,transMat] = ргерса(рп, 0.02); % Устранение векторов входа, вклад которых не превышает 2 проц. В последовательности этих операторов сначала выполняется нормировка векторов входа, затем проводится факторный анализ. Второй аргумент функции ргерса равен 0.02, что означает устранение тех главных компонентов, вклад которых составляет менее 2 %. ;' Массив ptrans содержит преобразованные векторы входа; матрица transMat является матрицей преобразования в главные компоненты. После обучения сети эта матрица должна - ■ быть использована для предварительного преобразования векторов входа. Она становится ' ■; такой же неотъемлемой частью параметров сети, как ее веса и смещения. Если умножить ': нормированные векторы входа рп на матрицу преобразования transMat, то получим вектор ' ptrans с упорядоченными главными компонентами. * г Если функция ргерса использовалась для предварительной обработки множества Л [ обучающих данных, то всякий раз, когда обученная сеть используется с новыми входами,' _ '■■ они должны быть соответствующим образом преобразованы. Это реализуется с помощью " ;. М-функции trapca: pnewn = trastd(pnew/meanp/stdp); % Нормировка векторов входа pnewtrans = trapca(pnewn,transMat); a = sim(net,pnewtrans); % Моделирование сети Регрессионный анализ. В определенной степени качество обучения нейронной сети может ■. • • быть оценено ошибками обучения, контроля и тестирования, но этого может оказаться.,- [ недостаточно и требуется более детальный анализ. Один из возможных подходов - это' .' * регрессионный анализ выходов сети и соответствующих целей. В составе ШШ Neural '.■• [■ Network Toolbox для этих целей предназначена М-функция postreg. . _-""- ;. Следующая последовательность операторов поясняет, как можно выполнить регрес- г ', сионный анализ для сети, построенной на основе процедуры с прерыванием обучения: - 98 Нейронные сети. MATLAB 6:"..у -.. :: -L г.
* р в [-1:0.05:1]; t = sin(2*pi*p)+ 0.1*randn(size(p)); v.P = [-0.975:.05:0.975); v.T = sin(2*pi*v.P)+0.1*randn(size(v.P)}; net =* newff([-l 1], [20,1] , { 'tansig', 'purelin'}, 'traingdx' ); net.trainParam. show =25; net.trainParam.epochs = 300; net = init(net); [net,tr]=train<net,p,t,[],[],v); a = sim(net,p); % Моделирование сети figure(2) [m,b,r] « postreg(a,t) m = 0.99278 b = 0.0064888 r = 0.99579 Выход сети и вектор целей передаются в качестве входных аргументов функции postreg, а она возвращает параметры регрессии: первые два - m и b - определяют наклон и смещение линии регрессии в координатах цель-выход, третий - г- коэффициент корреляции. Если выходы точно равняются целям, то наклон должен быть равен 1, а смещение 0. В рассматриваемом примере можно видеть, что эти параметры действительно весьма точно отражают линейную регрессию. Коэффициент корреляции близок к 1, что указывает на существенную корреляцию между выходами и целями, т. е. малые изменения цели будут адекватно отражаться в выходах нейронной сети, что является характеристикой ее высокого качества. а б Рис. 3.26 На рис. 3.26, а и б показаны соответственно результаты обучения и результаты регрессионного анализа нейронной сети, предназначенной для аппроксимации функций. Выходы сети обозначены кружками; наилучшая подгонка - пунктирной, а точная - сплошной линией. В данном случае трудно отличить наилучшую подгонку от точной, поскольку аппроксимация функции выполнена очень точно. Пример процедуры обучения В этой главе было рассмотрено большое число методов, алгоритмов, стратегий и подходов к обучению нейронных сетей. Поэтому представляется целесообразным показать, как они используются для решения реальных практических задач. 3. Обучение нейронных сетей 99
Рассмотрим одно из типичных приложений нейронных сетей в медицинских исследованиях. Для этого примера используем данные из медицинского приложения [35].-Требу- ется разработать вычислительный инструмент, который может определять уровни липид- ных составляющих холестерина на основе измерений спектра крови. Имеется статистика i измерения 21 волны спектра крови для 264 пациентов. Кроме того, известны уровни hdl, Idl и vldl липидных составляющих холестерина, основанных на сепарации сыворотки. Необходимо определить состоятельность нового способа анализа крови, основанного -ч на измерении ее спектра. Данные измерений спектра должны быть загружены из МАТ-файла choles_all и под- '~ вергнуты факторному анализу: load choles__all % Нормировка обучающего множества • [pn,meanp,stdp,tn,meant,stdt] = prestd{p,t); [ptrans,transMat] = prepca(pn, 0.001);% Выделение главных компонентов.. В этом случае сохраняются только те компоненты, которые объясняют 99.9 % изменений в наборе данных. Проверим, сколько же компонентов из первоначальных 21 являются ; состоятельными: /- [R/QJ = size.{ptrans) R = 4 Q = 264 Оказывается, что всего 4. Теперь сформируем из исходной выборки обучающее, контрольное и тестовое мно- - жества. Для этого выделим половину выборки для обучающего множества ptr и по четверти для контрольного v и тестового t: iitst = 2:4:Q; iival e 4:4:Q; iitr => [1:4:Q 3:4:Q]; v.P = ptrans(:,iival); v.T = tn(:, iival); t.P = ptransf:,iitst); t.V = tn(:,iitst); ptr = ptrans(:,iitr); ttr = tn(:,iitr); Теперь необходимо сформировать и обучить нейронную сеть. Будем использовать сеть с двумя слоями, с функциями активации: в скрытом слое - гиперболический тангенс, . в выходном слое - линейная функция. Такая структура эффективна для решения задач " аппроксимации и регрессии. В качестве начального приближения установим 5 нейронов :' в скрытом слое. Сеть должна иметь 3 выходных нейрона, поскольку определено 3 цели. ' Для обучения применим алгоритм LM: net » newf£(minmax(ptr),[S 3],{•tansig• ■purelin'},■trainlm*) tnet/tr]=train{net,ptr,ttr,[],[3,v,t); Обучение, остановлено после 15 итераций, потому что контрольная ошибка в 5 раз/: превысила ошибку обучения. Построим графики всех ошибок: plot(tr.epoch,tr.perf, '~*,tr.epoch,tr.vperf, '—»,tr.epoch,tr.tperf, 'i').. На рис. 3.27 показаны результаты обучения. Погрешности проверки на тестовом и кон-; трольном множествах ведут себя одинаково, и нет заметных тенденций к переобучению. -•? -: 100 Нейронные сети. MA TLAB б.
■;гшЛЁ: глг: Рис. 3.27 На следующем шаге следует выполнить анализ реакции сети. Используем весь набор данных (обучение, признание выборки представительной и тестовый) и выполним линейную регрессию между выходами сети и соответствующими целями. Сначала нужно перейти к ненормализованным выходам сети: an = sim(net,p trans); % Моделирование сети а = poststd(an,meant,stdt); % Восстановление выходов t = poststd(tn,meant,stdt); % Восстановление целей for i=l:3 figure(i) [m<i),b(i),r<i)] = postreg(a(i,:), t(i,:)); % Расчет регрессии end % Рис. 3.28,а-в Первые 2 выхода сети (hdl- и ldl-составляющие) хорошо отслеживают целевое множе- Г. ство, значение близко к 0.9, и это означает, что эти липидные характеристики могут быть г определены по измерениям спектра крови. Третий выход (vldl-составляющая) восстанавливается плохо (коэффициент корреляции около 0.6), и это означает, что решение задачи должно быть продолжено. Можно использовать другую архитектуру сети; увеличить количество нейронов ; в скрытом слое (больше скрытых слоев нейронов) или воспользоваться методом регуляризации. Хотя может оказаться, что восстановление составляющей vldl на основе измерения спектра крови вообще несостоятельно. 3. Обучение нейронных сетей 101
4. ПЕРСЕПТРОНЫ С этой главы начинается систематический анализ конкретных нейронных сетей, и первой из них является нейронная сеть, называемая персептроном. Большое количество моделей персеп- трона представлено в основополагающей работе Розенблатта [37]. Простейшая из таких моделей - однослойный псрссптрон, веса и смещение которого могут бьпъ настроены таким образом, чтобы решить задачу классификации входных векторов, что позволит в дальнейшем решать слож- -- ные проблемы анализа коммутационных соединений, распознавания образов и других задач классификации с высоким быстродействием и гарантией правильного результата. По команде help percept можно получить следующую информацию об М-функциях, входящих в состав ГШП Neural Network Toolbox и относящихся к построению нейронных сетей на основе персептронов: Perceptrons New networks newp Using networks sim init adapt train Weight functions dotprod Net input functions netsum Transfer functions hardlim hardlims Initialization functions initlay initwb initzero Performance functions mae Learning functions learnp learnpn Adapt functions adaptwb Training functions trainwb Demonstrations demopl Персептроны Формирование нейронной сети Создание персептрона Работа с нейронной сетью Моделирование сети Инициализация сети Адаптация сети Обучение сети Функции взвешивания Скалярное произведение Функции накопления Сумма взвешенных входов Функции активации Ступенчатая функция с жесткими ограничениями Симметричная ступенчатая функция с жесткими ограничениями Функции инициализации Инициализация слоев Инициализация весов и смещений Инициализация нулевых весов и смещений Функции оценки качества сети Средняя абсолютная погрешность Функции настройки параметров персептрона Абсолютная функция настройки Нормированная функция настройки Функции адаптации Адаптация весов и смещений Функции обучения Правило обучения весов и смещений Демонстрационные примеры Классификация с использованием персептрона с двумя входами _ 102
demop2 demopS demop4 demopS demop6 demop7 Классификация с использованием персептрона с тремя входами Классификация с использованием персептрона с двумя нейронами Формирование входных векторов внешнего слоя Обучение с использованием нормированной функции настройки Пример линейно неразделимых векторов Классификация с использованием двухслойного персептрона Следует обратить внимание, что в версии 1U11 INcural Network Toolbox Version 3.0.1 (Rl 1) представлены только демонстрационные примеры demopl, demop4, dcmop5, demop6. 4.1. Архитектура персептрона Нейрон персептрона. Нейрон, используемый в модели персептрона, имеет ступенчатую функцию активации hardlim с жесткими ограничениями (рис. 4.1). Каждый элемент вектора входа персептрона взвешен с соответствующим весом Yvn, и их сумма является входом функции активации. Нейрон персептрона возвращает 1, если вход функции активации л > 0, и 0, если п < 0. Входы Нейрон персептрона -*■ 1 а = hardlim( Wp + b) Рис. 4.1 Функция активации с жесткими ограничениями придает персептрону способность классифицировать векторы входа, разделяя пространство входов на 2 области, как это показано на рис. 4.2 для персептрона с двумя входами и смещением. Wp+fc>0 Wp+/><0 « = о iv, | = -]; U'ii2= l',b=\ Рис. 4.2 4. Персептропы 103
Пространство входов делится на 2 области разделяющей линией L, которая для двумерного случая задается уравнением wTp + fc = 0. (4.1) Эта линия перпендикулярна к вектору весов w и смещена на величину Ь. Векторы входа выше линии L соответствуют положительному потенциалу нейрона, и, следовательно, выход псрсептрона для этих векторов будет равен 1; векторы входа ниже линии L соответствуют выходу псрсептрона, равному 0. При изменении значений смещения и весов граница линии L изменяет свое положение. Псрссптрон без смещения всегда формирует разделяющую линию, проходящую через начало координат; добавление смещения формирует линию, которая не проходит через начало координат, как это показано на рис. 4.2. В случае, когда размерность вектора входа превышает 2, разделяющей границей будет служить гиперплоскость. Демонстрационная программа nnd4db наглядно иллюстрирует перемещение разделяющей линии при решении задачи классификации векторов входа. Архитектура сети. Персептрон состоит из единственного слоя, включающего S нейронов, как это показано на рис. 4.3, о и б в виде соответственно развернутой и укрупненной структурных схем; веса w,j - это коэффициенты передачи otj-го входа к /'-му нейрону. Уравнение однослойного псрсептрона имеет вид: a=f(Wp+b). (4.2) Бхопы Спой нейронов Вход Щ к уiг 1 + kL/ ч. го11 SlxR ь1 jixi Спой 1 j)©i^ Sl > i-tr J «> = I'^hardlimdW^+b1) -v a=hardlini(IW11p + b1) Рис. 4.3 4.2. Модель персептрона Для формирования модели однослойного персептрона предназначена функция newp net = newp(PR, S) со следующими входными аргументами: PR- массив минимальных и максимальных значений для R элементов входа размера Rx2; 5 ~ число нейронов в слое. В качестве функции активации персептрона по умолчанию используется функция hardlim. 104 Нейронные сети. MATLAB 6
Пример: функция net = newp{[0 2],1); создаст псрссптрон с одноэлементным входом и одним нейроном; диапазон значений входа - [0 2]. Определим некоторые параметры персептрона, инициализируемые по умолчанию. Веса входов: inputweight s = net.inputweight s{1,1} inputweights = delays: 0 initFcn: 'initzero' learn: 1 learnPcn: 'learnp' learnParam: [] size: [1 1] userdata: [lxl struct] weightFcn: 'dotprod' Заметим, что функция настройки персептрона по умолчанию learnp; вход функции активации вычисляется с помощью функции скалярного произведения dotprod; функция инициализации initzero используется для установки нулевых начальных весов. Смещения: biases = net.biases{1} biases = initFcn: 'initzero' learn: 1 t,j.earnFcn: 'learnp' .■ learnParam: [] ^ size: 1 userdata: [lxl struct] Нетрудно увидеть, что начальное смещение также установлено в 0. Моделирование персептрона Рассмотрим однослойный персептрон с одним двухэлементным вектором входа, значения элементов которого изменяются в диапазоне от -2 до 2: net = newp([-2 2;-2 2]r1); % Создание персептрона net По умолчанию веса и смещение равны 0, и для того, чтобы установить желаемые значения, необходимо применить следующие операторы: net.IW(l,l}= [-1 1]; net.b{l} = [1]; В этом случае разделяющая линия имеет вид: L:-pi +P2+I =0. Это соответствует1 рис. 4.1. Структурная схема модели персептрона показана на рис. 4.4 4. Персептроны 105
fir\ ^(roi 1 w *H p{1} Dtlz/s 1 Ь W weight MEM} bias. #-*© Kaidlim э{1; W Рис. 4.4 Теперь определим, как откликается сеть на входные векторы р1и р2, расположенные по разные стороны от разделяющей, линии: pi = [1; 1]; al = s±m(net,pl) % Моделирование сети net с входным вектором pi al = 1 р2 = [1; -1]; а2 - sim(net,p2) % Моделирование сети net с входным вектором р2 а2 = О Персептрон правильно классифицировал эти 2 вектора. Заметим, что можно было бы ввести последовательность двух векторов в виде массива ячеек и получить результат также в виде массива ячеек: % Последовательность двух векторов в виде массива ячеек рЗ = {[1; 1] [1; -1]>; аЗ = sim(net,p3) % Моделирование сети net при входном сигнале рЗ аЗ = [1] СО]' Инициализация параметров Для однослойного псрсептрона в качестве параметров нейронной сети в общем случае выступают веса входов и смещения. Допустим, что создается перссптрон с двухэлементным вектором входа и одним нейроном: net = newp([-2 2;-2 2],1); Запросим характеристики весов входа: net.inputweights{1, 1> ans = delays: 0 initFcn: 'initzero' learn: 1 learnFcn: 'learnp' leamParam: [ ] size: [1 2) userdata: [lxl struct] weightFcn: 'dotprod' Из этого перечня следует, что в качестве функции инициализации по умолчанию используется функция initzero, которая присваивает весам входа нулевые значения. В этом можно убедиться, если извлечь значения элементов матрицы весов и смещения: wts = net.IW{l,l} wts =00 bias = net.b{l} bias = 0 106 Нейронные сети. MATLAB 6
Теперь переустановим значения элементов матрицы весов и смещения: net.iW{l,l) = [3# 4] net.b{l} = 5 wts =34 bias = 5 Для того, чтобы вернуться к первоначальным установкам параметров персептрона, и предназначена функция init: net = init(net); wts wts =00 bias bias = 0 Можно изменить способ, каким инициализируется персептрон с помощью функции init. Для этого достаточно изменитьтип функций инициализации, которые применяются для установки первоначальных значений весов входов и смещений. Например, воспользуемся функцией инициализации rands, которая устанавливает случайные значения параметров персептрона. % Задать функции инициализации весов и смещений net.inputweights{1,1}.initFcn = 'rands■; net.biasesI1}.initFcn = •rands■; % Выполнить инициализацию ранее созданной сети с новыми функциями net = init(net); wts = net.IW{l,l}* wts = -0.96299 0.64281 bias = net.b{l} bias = -0.087065 Видно, что веса и смещения выбраны случайным образом. 4.3. Процедуры настройки параметров Определим процесс обучения персептрона как процедуру настройки весов и смещений с целью уменьшить разность между желаемым (целевым) и истинным сигналами на его выходе, используя некоторое правило настройки (обучения). Процедуры обучения делятся на 2 класса: обучение с учителем и обучение без учителя. При обучении с учителем задается множество примеров требуемого поведения сети, которое называется обучающим множеством (Р^.МРг.ЧЬ-ЛРоА}. (43) Здесь р 1, р2, ..., pQ - входы персептрона, a tj, t2,..., tQ - требуемые (целевые) выходы. При подаче входов выходы персептрона сравниваются с целями. Правило обучения используется для настройки весов и смещений персептрона так, чтобы приблизить значение выхода к целевому значению. Алгоритмы, использующие такие правила обучения, называются алгоритмами обучения с учителем. Для их успешной реализации необходимы эксперты, которые должны предварительно сформировать обучающие множества. Разработка таких алгоритмов рассматривается как первый шаг в создании систем искусственного интеллекта. 4. Персептроны 107
В этой связи ученые не прекращают спора на тему, можно ли считать алгоритмы обучения с учителем естественными и свойственными природе, или они созданы искусственны. Например, обучение человеческого мозга на первый взгляд происходит без учителя: на зрительные, слуховые, тактильные и прочие рецепторы поступает информация извне и внутри мозга происходит некая самоорганизация. Однако нельзя отрицать и того, что в жизни человека немало учителей— и в буквальном, и в переносном смысле, - которые координируют реакции на внешние воздействия. Вместе с тем, как бы ни развивался спор приверженцев этих двух концепций обучения, представляется, что обе они имеют право на существование. И рассматриваемое нами правило обучения персептрона относится к правилу обучения с учителем. При обучении без учителя веса и смещения изменяются только в связи с изменениями входов сети. В этом случае целевые выходы в явном виде не задаются. Главная черта, делающая обучение без учителя привлекательным, - это его самоорганизация, обусловленная, как правило, использованием обратных связей. Что касается процесса настройки параметров сети, то он организуется с использованием одних и тех же процедур. Большинство алгоритмов обучения без учителя применяется при решении задач кластеризации данных, когда необходимо разделить входы на конечное число классов. Что касается персептронов, рассматриваемых в этой главе, то хотелось бы надеяться, что в результате обучения может быть построена такая сеть, которая обеспечит правильное решение, когда на вход будет подан сигнал, который отличается от тех, которые использовались в процессе обучения. Правит настройки Настройка параметров (обучение) персептрона осуществляется с использованием обучающего множества. Обозначим через р вектор входов персептрона, а через t - вектор соответствующих желаемых выходов. Цель обучения - уменьшить погрешность е=а -1, которая равна разности между реакцией нейрона а и вектором цели t Правило настройки (обучения) персептрона должно зависеть от величины погрешности е. Вектор цели t может включать только значения 0 и 1, поскольку персептрон с функцией активации hardlim может генерировать только такие значения. При настройке параметров персептрона без смещения и с единственным нейроном возможны только 3 ситуации: 1. Для данного вектора входа выход персептрона правильный (a = tne = t~a = 0) и тогда вектор весов w не претерпевает изменений. 2. Выход персептрона равен 0, а должен быть равен 1(а = 0, r=lHe = t-0=l).B этом случае вход функции активации wTp отрицательный и его необходимо скорректировать. Добавим к вектору весов w вектор входа р, и тогда произведение (wT + рт) р = = wTp+ртр изменится на положительную величину, а после нескольких таких шагов вход функции активации станет положительным и вектор входа будет классифицирован правильно. При этом изменятся настройки весов. 3. Выход нейрона равен 1, а должен быть равен 0 (а = 0, t ~ 1 и е = / - а= -1). В этом случае вход функции активации wTp положительный и его необходимо скорректировать. Вычтем из вектора весов w вектор входа р, и тогда произведение (w - рт) р = = wTp - ртр изменится на отрицательную величину, а после нескольких шагов вход функции активации станет отрицательным и вектор входа будет классифицирован правильно. При этом изменятся настройки весов. 108 Нейронные сети. MATLAB 6
Теперь правило настройки (обучения) персептрона можно записать, связав изменение вектора весов Aw с погрешностью с = т~а: Aw = О, если е~0; р, если е = 1; (4.4а) -р, еслие--\\ Все 3 случая можно описать одним соотношением: Aw = (f-fl)p^ep. (4.46) Можно получить аналогичное выражение для изменения смещения, учитывая, что смещение можно рассматривать как вес для единичного входа: Ab = (t-a)\=e. (4.5) В случае нескольких нейронов эти соотношения обобщаются следующим образом: |AW = (t-a)pT=epT; (4 6) [Ab = (t-a) = e. Тогда правило настройки (обучения) персептрона можно записать в следующей форме: = Ъш+е. (4.7) Описанные соотношения положены в основу алгоритма настройки параметров персептрона, который реализован в 111111 Neural Network Toolbox в виде М-функции learnp. Каждый раз при выполнении функции leamp будет происходить перенастройка параметров персептрона. Доказано, что если решение существует, то процесс обучения персептрона сходится за конечное число итераций. Если смещение не используется, функция leamp ищет решение, изменяя только вектор весов w. Это приводит к нахождению разделяющей линии, перпендикулярной вектору w и которая должным образом разделяет векторы входа. Рассмотрим простой пример персептрона с единственным нейроном и двухэлементным вектором входа: net = newp{[-2 2;-2 2],1); Определим смещение b равным 0, а вектор весов w равным [1 -0.8]: net-ЬШ = 0; w = [1 -0.8]; net.IW{l,l> = w; Обучающее множество зададим следующим образом: Р = И; 2]; t = [1]; Моделируя персептрон, рассчитаем выход и ошибку на первом шаге настройки (обучения): а = sim{net,p) а = О 4. Персептроны 109
в = t-a е - 1 Наконец, используя М-функцию настройки параметров lcarnp, найдем требуемое изменение весов: dw = learnp<w,p, [ ], [ ] Л ] Л Ь ©Л ] Л 1 Л 1) dw = 1 2 Тогда новый вектор весов примет вид: w = w + dw w = 2.0000 1.2000 Заметим, что описанные выше правило и алгоритм настройки (обучения) персептрона гарантируют сходимость за конечное число шагов для всех задач, которые могут быть решены с использованием персептрона. Это в первую очередь задачи классификации векторов, которые относятся к классу линейно отделимых, когда все пространство входов можно разделить на 2 области некоторой прямой линией, в многомерном случае -гиперплоскостью. Демонстрационный пример nnd4pr позволяет выполнить многочисленные эксперименты по настройке (обучению) персептрона для решения задачи классификации входных векторов. Процедура адаптации Многократно используя М-функции sim и learnp для изменения весов и смещения персептрона, можно в конечном счете построить разделяющую линию, которая решит задачу классификации, при условии, что персептрон может решать ее. Каждая реализация процесса настройки с использованием всего обучающего множества называется проходом или циклом. Такой цикл может быть выполнен с помощью специальной функции адаптации adapt. При каждом проходе функция adapt использует обучающее множество, вычисляет выход, погрешность и выполняет подстройку параметров персептрона. Заметим, что процедура адаптации не гарантирует, что синтезированная сеть выполнит классификацию нового вектора входа. Возможно, потребуется новая настройка матрицы весов W и вектора смещений b с использованием функции adapt. Чтобы пояснять процедуру адаптации, рассмотрим простой пример. Выберем персептрон с одним нейроном и двухэлементным вектором входа (рис. 4.5). Зхода А.- Л л Не —\ S— Wu ирон персептрона £ 1 > J Гг ►|_1_Г а = hardlim (Wp Ч- b) _ . _ v / Рис. 4.5 Эта сеть и задача, которую мы собираемся рассматривать, достаточно просты, так что можно все расчеты выполнить вручную. 110 Нейронные сети. МАТ1ЛВ 6
Предположим, что требуется с помощью персептрона решить задачу классификации векторов, если задано следующее обучающее множество: Pi = .'1=0 Р2 = I -2] ,1г=\\ ^р3 = -2 2 .'з = 0 Р< = Л = (4.8) Используем нулевые начальные веса и смещение. Для обозначения переменных на каждом шаге используем индекс в круглых скобках. Таким образом, начальные значения вектора весов wT(0) и смещения Ь(0) равны соответственно wT(0) = [0 0] и Ь(0) = 0. Вычислим выход персептрона для первого вектора входа pi, используя начальные веса и смещение: Г а = hardlim(wT(0)p! +b(0)) = hardlim 'jj [0 0] + 0 = hardlim (0)«1. (4.9) Выход не совпадает с целевым значением tj, и необходимо применить правило настройки (обучения) персептрона, чтобы вычислить требуемые изменения весов и смещений: ■ Длут = epj = (-1)[2 2]=[-2-2]; (4Л0> ДЬ = е = (-1)=-1. Вычислим новые веса и смещение, используя введенные ранее правила обучения персептрона. fwT~eWT"+AwT=[0 0]+г_2 _2]=[„2 _2] = wr(1). (4П) \b"cw = Ьш + АЬ = 0 + (-1) = -1 = Ь(1). Обратимся к новому вектору входа р2» тогда " I а = hardlim (wl (l)p2 +b(l)) = hardlim ( [-2 -23 -2 + (-1)) = hardlim (1) = 1. (4.12) В этом случае выход персептрона совпадает с целевым выходом, так что погрешность равна 0 и не требуется изменений в весах или смещении. Таким образом, [wT(2) = wT(I) = [-2 -2]; (413) [Ь(2) = fc(l) = -\. Продолжим этот процесс и убедимся, что после третьего шага настройки не изменились: [wT(3) = wT(2) = [-2 -2]; \Ь(3)=Ь(2) = -1, (4.14) а после четвертого приняли значение fwr(4) = [-3 -1]; |Ш) = 0. (4.15) 4. Персептроны 111
Чтобы определить, получено ли удовлетворительное решение, требуется сделать один проход через все векторы входа, чтобы проверить, соответствуют ли решения обучающему множеству. Вновь используем первый член обучающей последовательности и получаем: fwT(5) = wT(4) = [-3 -l]; С4.16) [b(5) = i(4) = 0. Переходя ко второму члену, получим следующий результат: [wT(6) = [-2 -3], (4П) Этим заканчиваются ручные вычисления. Теперь выполним аналогичные расчеты, используя М-функцию adapt Вновь сформируем модель персептрона, изображенного на рис. 4.5: net = newp([-2 2;-2 2],1); Введем первый элемент обучающего множества Р = {[2; 2]}; t = {0},- Установим параметр passes (число проходов) равным 1 и выполним 1 шаг настройки: net.adaptParam.passes = 1; [net,a,e] = adapt(net,p,t); a a = [1] e e = [-1] Скорректированные вектор весов и смещение равны twts = net.IW{l,l} twts = -2 -2 tbiase = net.b{l} tbiase = -1 Это совпадает с результатами, полученными при ручном расчете. Теперь можно ввести второй элемент обучающего множества и т. д., т. е. повторить всю процедуру ручного счета и получить те же результаты. Но можно эту работу выполнить автоматически, задав сразу все обучающее множество и выполнив 1 проход:' net = newp([-2 2;-2 2],1); net.trainParam.passes = 1; P = U2;2] [l;-2] [-2,-2] [-1;Ш; t = {0 1 0 i}; Теперь обучим сеть: [net,a,e] - adapt(net,p,t); Возвращаются выход и ошибка: а а = [1] [11 [0] [0] е е = L-1] [0] [0] [1] 112 Нейронные сети. MATLAB 6
Скорректированные вектор весов и смещение равны twts = net.iw{l,l} twts = -3 -1 tbiase = net.b{l} tbiase = 0 Моделируя полученную сеть по каждому входу, получим: al = sim(net,p) al = [0] [0] [1] [1] Можно убедиться, что не все выходы равны целевым значениям обучающего множе- елва. Это означает, что следует продолжить настройку персептрона. Выполним еще 1 цикл настройки: [net,a,e] = adapt(net,p,t); а а = [0] [0] [0] [1] е е = [0] [1] [0] [0] twts = net.IW{l,l} twts =2 -3 tbiase = net.b{l> tbiase = 1 al = sim(net,p) al = [0] [1] [0] [1] Теперь решение совпадает с целевыми выходами обучающего множества и все входы классифицированы правильно. Если бы рассчитанные выходы персептрона не совпали с целевыми значениями, то необходимо было бы выполнить еще несколько циклов настройки, применяя М-функцию adapt и проверяя правильность получаемых результатов. Для усвоения изложенного материала можно обратиться к демонстрационным программам, в частности к программе demopl, которая решает задачу классификации с помощью простого персептрона. Как следует из сказанного выше, для настройки (обучения) персептрона применяется процедура адаптации, которая корректирует параметры персептрона по результатам обработки каждого входного вектора. Применение М-функции adapt гарантирует, что любая задача классификации с линейно отделимыми векторами будет решена за конечное число циклов настройки. Для настройки (обучения) персептрона можно было бы воспользоваться также М-функцией train. В этом случае используется все обучающее множество и настройка параметров сети выполняется не после каждого прохода, а в результате всех проходов обучающего множества. К сожалению, не существует доказательства того, что такой алгоритм обучения персептрона является сходящимся. Поэтому использование М-функции train для обучения персептрона не рекомендуется. Нейронные сети на основе персептрона имеют ряд ограничений. Во-первых, выход персептрона может принимать только одно из двух значений (0 или 1); во-вторых, пер- септроны могут решать задачи классификации только для линейно отделимых наборов векторов. Если с помощью прямой линии или гиперплоскости в многомерном случае 4. Персептроны 113
можно разделить пространство входов на 2 области, в которых будут расположены векто- :■ ры входа, относящиеся к различным классам, то векторы входа считаются линейно отделимыми. Если векторы входа линейно отделимы, то доказано, что при использовании процедуры адаптации задача классификации будет решена за конечное время. Если век- - • торы входа линейно неотделимы, то процедура адаптации не в состоянии классифицировать вес векторы должным образом. Демонстрационная программа demop6 иллюстрирует ■• тщетность попытки классифицировать векторы входа, которые линейно неотделимы. Для решения более сложных задач можно использовать сети с несколькими персеп- тронами. Например, для классификации четырех векторов на 4 группы можно построить . сеть с двумя перссптронами, чтобы сформировать 2 разделяющие линии и таким образом приписать каждому вектору свою область. Отметим еще одну особенность процесса обучения персептрона. Если длина некоторого вектора входа намного больше или меньше длины других векторов, то для обучения ■ может потребоваться значительное время. Это обусловлено тем, что алгоритм настройки связан с добавлением или вычитанием входного вектора из текущего вектора весов. ' Таким образом, присутствие вектора входа с очень большими или малыми элементами может привести к тому, что потребуется длительное время для настройки параметров. Демонстрационная программа demop4 поясняет, как влияет выброс длины вектора на продолжительность обучения. Можно сделать время обучения нечувствительным к большим или малым выбросам векторов входа, если несколько видоизменить исходное правило обучения персептрона: AwT=(/-a)pT=ep\ (4.18) : Действительно, из этого соотношения следует, что чем больше компоненты векторавходар, .-. тем большее воздействие он оказывает на изменение элементов вектора w. Можно уравновесить влияние больших или малых компонент, если ввести масштабирование вектора входа. Решение состоит в том, чтобы нормировать входные данные так, чтобы воздействие . • любого вектора входа имело примерно равный вклад: и И Нормированное правило обучения персептрона реализуется М-функцией learnpn. Этот алгоритм требует несколько большего времени, но значительно сокращает количество циклов обучения, когда встречаются выбросы векторов входа. Демонстрационная программа demopS иллюстрирует это правило обучения. В заключение следует отметить, что основное назначение персептронов - решать задачи классификации. Они великолепно справляются с задачей классификации линейно отделимых векторов; сходимость гарантируется за конечное число шагов. Длительность обучения чувствительна к выбросам длины отдельных векторов, но и в этом случае решение может быть построено. Однослойный персептрон может классифициррвать только линейно отделимые векторы: Возможные способы преодолеть эту трудность предполагают либо предварительную обработку ■ с целью сформировать линейно отделимое множество входных векторов, либо использование многослойных персептронов. Можно также применить другие типы нейронных сетей, например линейные сети или сети с обратным распространением, которые могут выполнять классифика- '. цию линейно неотделимых векторов входа. 114 Нейронные сети. MATLAB 6
5. ЛИНЕЙНЫЕ СЕТИ Обсуждаемые в этой главе линейные нейронные сети по своей структуре аналогичны персептроиу и отличаются лишь функцией активации, которая является линейной. Выход линейной сети может принимать любое значение, в то время как выход персептрона ограничен значениями 0 или 1. Линейные сети, как и персептроны, способны решать только линейно отделимые задачи классификации, однако в них используется другое правило обучения, основанное на методе наименьших квадратов, которое является более мощным, чем правило обучения персептрона. Настройка параметров выполняется таким образом, чтобы обеспечить минимум ошибки. Поверхность ошибки как функция входов имеет единственный минимум, и определение этого минимума не вызывает трудностей. В отличие от персептрона настройка линейной сети может быть выполнена с помощью как процедуры адаптации, так и процедуры обучения; в последнем случае используется правило обучения WH (Widrow - Hoff). Кроме того, в главе рассматриваются адаптируемые линейные нейронные сети ADALINE (ADAptive Linear Neuron networks), которые позволяют корректировать веса и смещения при поступлении на вход каждого нового элемента обучающего множества. Такие сети широко применяются при решении задач обработки сигналов и в системах управления. Основополагающей работой в этой области является книга У идроу и Хоффа [45], в которой они и ввели сокращение ADALINE для адаптируемых линейных нейронов. По команде help linnet можно получить следующую информацию об М-функциях, входящих в состав 1I111I Neural Network Toolbox и относящихся к построению линейных нейронных сетей: Linear networks New networks newlind newlin Using networks stm init adapt train Weight functions dotprod Net input functions netsum Transfer functions purelin Initialization functions initlay initwb initzero Performance mse Линейные сети Формирование нейронной сети Формирование линейного слоя Формирование адаптируемого линейного слоя Работа с нейронной сетью Моделирование сети Инициализация сети Процедура адаптации Процедура обучения Функции взвешивания Скалярное произведение Функции накопления Сумма взвешенных входов Функции активации Линейная Функции инициализации Послойная инициализация Инициализация весов и смещений Инициализация нулевых весов и смещений Функции оценки качества сети Среднеквадратичная погрешность 115 '
Learning learnwh Adaption adaptwb Training trainwb Analysis functions maxiinlr Demonstrations and applications demolinl demolin2 demoiin3 demoiin4 demolinS demolin6 demolin7 demolin8 applim applin2 applin3 applin4 Функции настройки параметров персешрона Правило настройки WH Функции адаптации Функция адаптации весов и смещений Функции обучения Функция обучения весов и смещений Функции анализа Оценка максимального значения параметра настройки Демонстрационные примеры Пример функционирования линейной сети Обучение линейного нейрона Обучение линейного слоя Задача линейной аппроксимации Задача с неполными данными Задача с линейно зависимыми данными Оценка влияния параметра скорости настройки Адаптируемый линейный слой Задача предсказания Задача адаптивного предсказания Идентификация линейной системы Адаптивная идентификация линейной системы Следует обратить внимание, что в версии П1Ш Neural Network Version 3.0.1 (Rll не представлен демонстрационный пример demolin3. 5.1. Архитектура линейной сети Модель нейрона. На рис. 5.1 показан линейный нейрон с двумя входами. Он имее структуру, сходную со структурой персептрона; единственное отличие состоит в том, чт< используется линейная функция активации purelin. Линейный нейрон *- J^5 v n 7 \jA *4 J a =purelin(Wp+i) Весовая матрица W в этом случае имеет только одну строку и выход сети определяе] ся выражением а = purelin(n) = purclin(Wp л-b) = Wp + b = wup} + wl2p2 + b. 116 Нейронные сети. MATLAB *
Подобно перссптрону, линейная есть задаст в пространстве входов разделяющую линию, на которой функция активации п равна 0 (рис. 5.2). Рис. 5.2 Векторы входа, расположенные выше этой линии, соответствуют положительным значениям выхода, а расположенные ниже-отрицательным. Это означает, что линейная сеть может быть применена для решения задач классификации. Однако такая классификация может быть выполнена только для класса линейно отделимых объектов. Таким образом, линейные сети имеют то же самое ограничение, что и персептрон. Архитектура сети. Линейная сеть, показанная на рис. 5.3, я, включает S нейронов, размещенных в одном слое и связанных с R входами через матрицу весов W. Входы Спойлинейных нейронов a=puieEn/IWlp -Я)') л „ „ ^> _ Входы Спойлинейных нейронов г _ .. . а=р шеЕпОГге11 р -Я)') б Рис. 5.3 На рис. 5.3, б показана укрупненная структурная схема этой сети, вектор выхода а которой имеет размер 5x1. 5.2. Создание модели линейной сети Линейную есть с одним нейроном, показанную на рис. 5.1, можно создать следующим образом: net = newlin([-1 1; -1 1],1); Первый входной аргумент задает диапазон изменения элементов вектора входа; второй аргумент указывает, что сеть имеет единственный выход. Начальные веса и смещение по умолчанию равны 0. 5. Линейные сети 117
Присвоим весам и смещению следующие значения: net.IW{l,l} = [2 33; net.b{l} =[-4]; Теперь можно промоделировать линейную сеть для следующего предъявленного вектора входа: Р = [5;6]; а = sim(net,p) а = 24 5.3. Обучение линейной сети Для заданной линейной сети и соответствующего множества векторов входа и целей можно вычислить вектор выхода сети и сформировать разность между вектором выхода и целевым вектором, которая определит некоторую погрешность. В процессе обучения сети требуется найти такие значения весов и смещений, чтобы сумма квадратов соответствующих погрешностей была минимальной. Эта задача разрешима, потому что для линейных систем функция квадратичной ошибки является унимодальной. Как и для персептрона, применяется процедура обучения с учителем, которая использует обучающее множество вида: {рЛ},{р2е2},„.,{Ре1е}, (5.1) где р,,р2,..,рс - входы сети; tt, t2,...,tG - соответствующие целевые выходы. Требуется минимизировать следующую функцию средней квадратичной ошибки: ™е = тг Z*(*)2 =^г !(*<*)-я(*))2 . (5.2) Q *=i Q к=а Процедура настройки В отличие от многих других сетей настройка линейной сети для заданного обучающего множества может быть выполнена посредством прямого расчета с использованием М-функции newlind. Предположим, что заданы следующие векторы, принадлежащие обучающему множеству: Р = [1 -1.231 Т = [0.5 13; Построим линейную сеть и промоделируем ее: net a newlind (Р,Т); Y = s£m(net, P); Y = 0.5 1 net.IW{l,l} ans = -0.22727 net.b ns - [0.72727] Выход сети соответствует целевому вектору. Зададим следующий диапазон весов и смещений, рассчитаем критерий качества обучения и построим его линии уровня (рис. 5.4): 118 Нейронные сети. MATLAB 6 ..
w_range=-1:0.1: 0; b_range=0.5:0.1:1; ES = errsurf(P,T, w_range, b_range, 'purelin'); contour(w„range, b_range,ES,2 0) hold on plot(-2.2727e-001,7.2727e-001, 'x') % Рис.5.4. hold of* 0.9 - .... - / /■ -■HIM. "V i. 1 0.5 t- U\\\ -1 -се -се -o.4 -o.z о рис< 5.4 На графике знаком х отмечены оптимальные значения веса и смещения для данной сети. Демонстрационный пример demolinl поясняет структуру линейной сети, построение поверхности ошибок и выбор оптимальных настроек. Обучающее правило наименьших квадратов. Для линейной нейронной сети используется рекуррентное обучающее правило наименьших квадратов (LMS), которое является намного более мощным, чем обучающее правило персептрона. Правило наименьших квадратов, или правило обучения WH (Уидроу-Хоффа), минимизирует среднее значение суммы квадратов ошибок обучения [18]. Процесс обучения нейронной сети состоит в следующем. Авторы алгоритма предположили, что можно оценивать полную среднюю квадратичную погрешность, используя среднюю квадратичную погрешность на каждой итерации. Сформируем частную производную по весам и смещению от квадрата погрешности на к-й итерации: деЧк) =2е(к)?е(к) dw, дь вь у=1,...,Л; (53) Подставляя выражение для ошибки в форме «(*)=f(*)-| 1ч,-р,-(*)+ь получим де(к) dwui де{к) . db = ~Pj(ky, (5.4) (5.5) = -1. 5. Линейные сети 119
Здесь Pj(k) -j-й элемент вектора входа на /с-й итерации. Эти соотношения лежат в основе обучающего алгоритма WH Mk + \) = Yt(k)+c(k)pr(k); (56) b{k + \) = b(k)+c(k). Результат может быть обобщен на случай многих нейронов и представлен в следующей матричной форме: | Щк +1) = Щк)+2а е(А)рГ (к); (5.7) Щк + 1) = Ъ(к) + 2ае(к). Здесь ошибка е и смещение b - векторы и а - параметр скорости обучения. При больших значениях а обучение происходит быстро, однако при очень больших значениях может приводить к неустойчивости. Чтобы гарантировать устойчивость процесса обучения, параметр скорости обучения не должен превышать величины 1Лпах(1Х|), где Я. -собственное значение матрицы корреляций р*рт векторов входа. Используя правило обучения WH и метод наискорейшего спуска, всегда можно обучить сеть так, чтобы ее погрешность была минимальной. М-функция learnwh предназначена для настройки параметров линейной сети и реализует следующее обучающее правило: fdw=/r*e*p'; db=/r*e, где lr— параметр скорости обучения. Максимальное значение параметра скорости обучения, которое гарантирует устойчивость процедуры настройки, вычисляется с помощью М-функции maxlinlr. С помощью демонстрационной программы demolin7 можно исследовать устойчивость процедуры настройки в зависимости от параметра скорости обучения. Процедура обучения Для обучения линейной нейронной сети может быть применена типовая процедура обучения с помощью М-функции train. Эта функция для каждого вектора входа выполняет настройку весов и смещений, используя М-функцию learnp. В результате сеть будет настраиваться по сумме всех коррекций. Будем называть каждый пересчет для набора входных векторов эпохой. Это и отличает процедуру обучения от процедуры адаптации adapt, когда настройка параметров реализуется при представлении каждого отдельного вектора входа. Затем процедура train моделирует настроенную сеть для имеющегося набора векторов, сравнивает результаты с набором целевых векторов и вычисляет среднеквадратичную ошибку. Как только значение ошибки становится меньше заданного или исчерпано предельное число эпох, обучение прекращается. Обратимся к тому же примеру, который использовался при рассмотрении процедуры адаптации, и выполним процедуру обучения. Р - [1 -1.2];% Вектор входов Т= [0.5, 1] ; % Вектор целей % Максимальное значение параметра обучения maxlr = 0.40*maxlinlr(P,'bias') ; 120 Нейронные сети. MATLAB б
% Создание линейной сети net = newlin([-2,2], 1,[О],maxlr); % Расчет функции критерия качества w_jrange=-l:0.2:1; b_range=-l:0.2:1; % Диапазоны значений веса и смещения ES = errsurf(P,T, w_range, b_range, 'purelin'); % Построение поверхности функции критерия качества surfc(w_range, b_range, ES) % Рис.5.5,а На рис. 5.5, о построена поверхность функции критерия качества в пространстве параметров сети. В процессе обучения траектория обучения будет перемещаться из начальной точки в точку минимума критерия качества. Выполним расчет и построим траекторию обучения линейной сети для заданных начальных значений веса и смещения. % Расчет траектории обучении х = zeros(1,50); у = zeros(1,50); net.IW{l}=l; net.b{l}= -1; % Начальные значения весов и смещения х(1) = net.IW{l}; у(1) = net.b{l}; net.trainParam.goal - 0.001; % Пороговое значение критерия качества net.trainParam. epochs = 1; % Число эпох % Цикл вычисления весов и смещения для одной эпохи for i = 2:50, [net, tr] = train(net,P,T); x(i) = net-IW{l}; y(i) = net.b{l}; end % Построение линий уровня и траектории обучении elf, contour(w_range, b_range, ES, 20), bold on plot(x, y,■-*•), hold off, % Рис.5.5,б На рис. 5.5, б символом * отмечены значения веса и смещения на каждом шаге обучения; видно, что примерно за 10 шагов при заданной точности (пороговое значение критерия качества) 0.001 получим w =-0.22893, b - 0.70519. Это согласуется с решением, полученным с использованием процедуры адаптации. а б Рис. 5.5 Если не строить траектории процесса обучения, то можно выполнить обучение, обратившись к М-функции train только 1 раз: 5. Линейные сети 121
net.IW{1}=1; net.b{l}= -1; % Начальные значения веса и смещения net.trainParam.epochs =50; % Число эпох обучения net.trainParam.goal = 0.001; % Пороговое значение критерия качества [net, tr] = train(netrP/T); TRAINWB, Epoch 0/50, MSE 5.245/0.001. TRAINWB, Epoch 11/50, MSE 0.000483544/0.001. TRAINWB, Performance goal met. net.IW, net.b ans = [-0.22893] ans = [0.70519] На рис. 5.6 показано, как изменяется критерий качества на каждом цикле обучения. Поиматеяк доктда обучения • 0 СЯМ835М, гсрсг • DXJ01 Vf ю1 Ж !Я ... :1» ::: ... ... .__ ... -ч г* г ; •:-■ -■■« .4"" *:" —.. ••v- sbj: :::?> • ...;. . —f- -..—- —г-- *1Л= = S?" -ч ...» —г— : ^т ...... ...... ■V ; — •**- = 211 '•V- \ = !>S «-*- -т ««*: ~~-V- S-r ...>. _..■. ...j. • - ■■ - — 4 -- -—. -»=5 *V* -■:-- • --:-- ■x. -i- • :!:::=-ls..:-.:::! — гьр»г —— лодеэзте/ь H'JCCTB» :•:::::-.:::■:::: г;::::;::::;:::: ~\"Л"Т" J. ■ '•'- ■ ч-i ... н .-_>.* £ '^%.-^:jf -A:..'I- 5->..Б "-„.7..»■■. ■ Цщйыобучения *:_V S „. 10 «'И i:: .v*- -J--'^rt&'SJ Рис.5.6 Если повысить точность обучения до значения 0.00001, то получим следующие результаты: net.trainParam.goal - 0.00001; [net, tr] = train(net#P,T); net.IW, net.b TRAINWB, Epoch 0/50, MSE 0.000483544/le-005. TRAINWB, Epoch 6/50, MSE 5.55043e-006/le-005. TRAINWB, Performance goal met. ans = [-0.22785] ans = I 0.72495] Повышение точности на 2 порядка приводит к уточнению значений параметров во втором знаке. 5.4. Применение линейных сетей Задача классификации векторов Покажем, как линейные сети могут быть применены для решения задач классификации. Если используется процедура обучения train, то параметры сети настраиваются с учетом суммарного значения функции ошибки. Это отличается от процедуры адаптации adapt, для работы которой характерна настройка параметров с учетом ошибки при представлении каждого вектора входа. Затем обучение применяется к скорректированной 122 Нейронные сети. MATLAB 6
сети, вычисляются выходы, сравниваются с соответствующими целями и вновь вычисляется ошибка обучения. Если достигнута допустимая погрешность или превышено максимальное число циклов (эпох) обучения, то процедура настройки прекращается. Алгоритм обучения и настройки сходится, если задача классификации разрешима. Проиллюстрируем решение задачи классификации, ранее решенной с помощью пер- септрона. Используем для этого простейшую линейную сеть, представленную на рис. 5 Л. Обучающее множество представлено следующими четырьмя парами векторов входов и целей: Р,= <!=0 <Р2 = 12\>гг=Ц \Р* = .'-*! ■ С5.9> Определим линейную сеть с начальными значениями веса и смещения, используемыми по умолчанию, т. е. нулевыми; зададим допустимую погрешность обучения, равную 0.1: р = [2 1-2 -1;2 -2 2 1]; t = [0101]; net = newlin( [-2 2; -2 2],1); % Инициализация линейной сети с двумя входами и одним выходом net. trainParairw goal= 0.1; [net, tr] = train.(netrp, t); TRAINWB, Epoch 0/100, MSE 0.5/0.1. TRAINWB, Epoch 25/100, MSE 0.181122/0.1. TRAINWB, Epoch 50/100, MSE 0.111233/0.1. TRAINWB, Epoch 64/100, MSE 0.0999066/0.1. TRAINWB, Performance goal met. Пороговое значение функции качества достигается за 64 цикла обучения, а соответствующие параметры сети принимают значения weights = net.iw{l,l} bias = net.b(l) weights = -0.061482 -0.21938 bias = [0.5899] Выполним моделирование созданной сети с векторами входа из обучающего множества и вычислим ошибки сети: А - sim(net, p) err = t - sim{net,P) А = 0.028173 err = -0.028173 0.96718 0.03282 0.2741 -0.2741 0.432 0.568 Заметим, что погрешности сети весьма значительны. Попытка задать большую точность в данном случае не приводит к цели, поскольку возможности линейной сети ограничены. Демонстрационный пример derriolin4 иллюстрирует проблему линейной зависимости векторов, которая свойственна и этому случаю. Обучение линейной нейронной сети иллюстрируется демонстрационной программой demolin2, которая возвращает значения весов и погрешность в процессе обучения. В связи с рассматриваемой проблемой классификации можно также обратиться к демонстрационной программе nndlOIc, в которой рассмотрена классическая задача классификации объектов при действии шумов. 5. Линейные сети 123
Фильтрация сигнала На рис. 5.7 представлена структурная схема цифрового фильтра, отличительной особенностью которого является то, что он включает динамический компонент-линию задержки (ЛЗ) и 1 слой линейной нейронной сети. P(k-N-]) a=purclin(Y\^H£) Рис. 5.7 Последовательность значений входного сигнала {р(к)} поступает на ЛЗ, состоящую из yV-1 блока запаздывания; выход ЛЗ -//-мерный вектор pd, составленный из значений входа в моменты вр емени к,к-1,..., k-N-1. Выход линейного нейронного слоя и фильтра в целом описывается следующим динамическим соотношением: н a(A') = purelin(Wp + £) = Y,wtia(k-i+l) + b. (5.10) М Рассмотрим конкретный пример цифрового фильтра, представленный на рис. 5.8. Вход Линейный цифровой фильтр a(t) Рг(0=р(г Pj(t)=p(.t-2) а = purelin(Wp+ft) Рис. 5.8 Предположим, что входной сигнал принимает значения в диапазоне от 0 до 10, и сформируем линейную сеть с одним входом и одним выходом, используя М-функцию newlin: net = newlin([0,10],1); 124 Нейронные сети. MATLAB в
Введем ЛЗ с двумя тактами запаздывания: net.inputWeights{1,1}.delays =[0 1 2]; определим следующие начальные значения весов и смещения: net.IW{l,l} = [7 8 9]; net.b{l} = [0]; зададим начальные условия для динамических блоков линии задержки: pi ={1 2} Последовательность их задания слева направо соответствует блокам запаздывания, расположенным на рисунке сверху вниз. Этим завершается формирование сети. Теперь определим входной сигнал в виде следующей последовательности значений: р = {3 4 5 6} и промоделируем эту сеть: [arpf] = sim(net,p,pi); а = [46] [70] [94] [118] pf = [5] [6]. Для того чтобы получить желаемую последовательность сигналов на выходе, необходимо выполнить настройку сформированной сети. Предположим, что задана следующая желаемая последовательность для выхода фильтра: Т = {10 20 30 40}; Выполним настройку параметров, используя процедуру адаптации adapt и 10 циклов обучения: net.adaptParam.passes =10; [net,y,E pf,af] = adapt(net,p,T,pi); % Процедура адаптации Выведем полученные значения весов, смещения и выходного сигнала: wts = net.IW{l,l}, bias = net.b{l}, у wts = 0.5059 3.1053 5.7046 bias = 1.5993 у = [11.856] [20.774] [29.668] [39.004] Если продолжить процедуру настройки, то можно еще точнее приблизить выходной сигнал к желаемому: net. adaptzFar am. passes = 500; [net,y,E,pf,a£] = adapt(net,p,T,pi); У у = [10.004] [20.002] [29.999] [39.998] Таким образом, линейные динамические нейронные сети могут быть адаптированы для решения задач фильтрации временных сигналов. Для сетей такого класса часто используется название AD ALINE (ADaptive Linear NEtwork) - адаптируемые линейные сети. Рассмотрим другие применения этих сетей. Предсказание сигнала Попробуем применить есть AD ALINE для предсказания значений детерминированного процессаp(t). Обратимся к рис. 5.9. 5. Линейные сети 125
Вход Цифровой фильтр "Л / si D „ 2 т 1 Настройка весов ^ Р V .-/ tf = /лнг7ш(\Ур +/;] Рис. 5.9 Некоторый сигнал поступает на линию задержки так, что на ее выходе формируются 2 сигнала: p(t-\), pit-2). Настройка сети реализуется с помощью М-функции adapt, которая изменяет параметры сети на каждом шаге с целью минимизировать погрешность e(t) = a(t) -pit). Если эта погрешность нулевая, то выход сети a(t) точно равен p(t) и сеть выполняет предсказание должным образом. Ниже приведен сценарий, который предназначен для решения задачи предсказания сигнала на 1 шаг вперед. Входной детерминированный процесс получен в результате прохождения ступенчатого сигнала через колебательное звено. Поскольку для формирования входа применено динамическое звено второго порядка, то в сети AD ALINE будет использована JI3 с двумя блоками. Запишем следующий сценарий для решения задачи предсказания сигнала: clear sys = ss(t£(l,[l 1 1])); % Формирование колебательного звена % Получение реакции на ступенчатое входное воздействие time = 0:0.2:10; [у,time] = step(sys,0:0.2:10); % Формирование обучающего множества р = y(l:length(time)-2)*; t = y(3:length(time))'; time = time(1:length(time)-2); % Формирование нейронной сети net = newlin([-l 1],1,[1 2]); P = num2cell(p); T = rmm2cell(t); % Настройка нейронной сети pi = {0 0}; net.adaptParam.passes =5; [net,Y,E,PfrAf] = adapt{net,P,T,pi); Yl = cat{l,Y{:}); % Преобразование массива ячеек в массив double 126 Нейронные сети. MATLAB 6
% Построение графиков plot (time, Yl, 'b:' ,time,p, 'r-1), xlabel(' Время, с'), ylabel( 'Процессы') title('Обучение нейронной сети') % Моделирование нейронной сети х = sim(net,P); xl = cat(l,x{:}); plot(time,xl,*b') Найденные значения весов и смещения равны net.lW{l,l}, net.b ans = 0.33427 0.31816 ans = [0.35853] Результаты обучения и моделирования результирующей нейронной сети, решающей задачу предсказания сигнала, представлены соответственно на рис. 5.10, а и б. - Обучение нейронной сети V v .... W \ :■ ■'■■ V'l 1.2 ,-v-- 1 '■-•:■ 02 I--' '.. .'-'" MwrnponimxtfjiDmrt : t l-..-™V-- r — -/ ■Jj-A / .; . j™ • !•- ti» •.' ;. .-■ — над — ЕЫМЛ + turn ■ •j ыа$ j j— i ! z.ib»v^r«:-F-: \t •«K^J»: -• Рис. 5.10 Как видно из этих рисунков, приемлемое для данной постановки задачи количество циклов обучения равно пяти; результаты моделирования показывают, что при длительности процесса 10 с диапазон успешного предсказания находится в пределах 1.8-10 с. Подавление шумов Задача подавления шумов возникает в следующей ситуации. Когда пилот говорит в микрофон, шум двигателя в кабине добавляется к голосовому сигналу и пассажиры слышат речь с искажениями. Требуется восстановить речь пилота, удалив из нее звуки, шумов двигателя. Для решения этой задачи построим адаптивный фильтр, полагая, что в нашем распоряжении имеются записи шумов двигателя (рис. 5.И). 5. Линейные сети 127
Голос пилота Голос пилота, смешанный с шумом Еогмущающий шум п Фильтр шума А Шум двигателя + f Отфильтрсва ни ый Ь. W" шум длл удаления помехи Адаптивный фильтр N^ а Восстановленный сигнал J w Рис. 5.11 Используя адаптируемую нейронную сеть AD ALINE, построим такой фильтр, который позволит удалить шум п из зашумлснного сигнала т. Рассмотрим подробнее структурную схему, представленную на рис. 5.11. Голос пилота v смешан с помехой от шумов двигателя, которая формируется фильтром шума по известным записям сигнала п. Зашумленный сигнал т моделирует искаженную речь пилота. Задача состоит в том, чтобы с помощью адаптивного фильтра сформировать такую модель шума а, которая при вычитании из зашумленного сигнала позволила бы выделить речь пилота. Адаптивный фильтр, построенный на базе линейной нейронной сети AD ALINE, должен быть настроен так, чтобы убирать шум двигателя. Заметим, что такая адаптивная фильтрация предпочтительнее классического фильтра, в котором шум не вычитается, а отфильтровывается от сигнала т. Многомерные цифровые фильтры Для проектирования многомерных фильтров следует применять сети AD ALINE, в которых используется более одного нейрона. Это приведет к тому, что вместо вектора весов входа будет использоваться матрица весов W, а вместо единственного смещения - вектор смещений Ь. Структурная схема такого многомерного фильтра показана на рис. 5.12. Линейные нейЪоны />(*) р[к-\) ■(*-ЛМ) а2(к) *д(*) а = purclin(Wp+b) Рис. 5.12 128 Нейронные септ. MATLAB б
Эта схема достаточно сложна для восприятия, и се можно представить в укрупненном виде (рис. 5.13, я). Если в линии задержки (ЛЗ) требуется показать больше деталей, то можно использовать следующий вариант структурной схемы (рис. 5.13,6). Лишйный спой из 5 шТраюв № —► (И ЛЗ N ( рЗД) к w W Q<N)>a 1 -> ь 5х] * У3 —Г - р№ Линейный слой изЗ нейронов pd(fc) т / aff) 5x1 ЛЗ ■*ПП-> -« а{£) 3^1 3x2 -»ГП-^ з^ / 3x1 б Рис. 5.13 Здесь ЛЗ представлена в развернутом виде, указывая, что на вход весовой матрицы подастся текущее значение и значения с запаздыванием на 1 и 2 периода дискретности. Можно использовать и большее число блоков задержки, но указывать их надо в порядке возрастания сверху вниз. В заключение отметим основные преимущества и ограничения линейных сетей: • Однослойные линейные сети могут решать задачи линейной аппроксимации функций и распознавания образов. • Однослойные линейные сети могут быть либо рассчитаны непосредственно, либо обучены с использованием правила обучения WH. Кроме того, для их настройки могут применяться процедуры адаптации. • Архитектура однослойной линейной сети полностью определяется задачей, которая должна будет решена, причем число входов сети и число нейронов в слое определяется числом входов и выходов задачи. • Адаптируемые линейные сети AD ALINE находят большое практическое применение при построении цифровых фильтров для обработки сигналов. • Линейные нейронные сети могут быть успешно обучены только в том случае, когда входы и выходы связаны линейно. Тем не менее даже в том случае, когда линейная есть не может найти точного решения, она в состоянии построить наиболее близкое решение в смысле минимума среднеквадратичной ошибки при условии, что параметр обучения достаточно мал. Такая сеть найдет наиболее точное решение в рамках линейной структуры сети. Это обусловлено тем, что поверхность ошибки обучения является многомерным параболоидом, имеющим единственный минимум, и алгоритм градиентного спуска должен привести решение к этому минимуму. • При работе с моделями линейных сетей могут возникать ситуации, когда число настраиваемых параметров недостаточно, чтобы выполнить все условия; в этом случае говорят, что сеть переопределена. Однако может иметь место и обратная ситуация, когда число настраиваемых параметров слишком велико, и в этом случае говорят, что сеть недоопределена. Тем не менее в обоих случаях метод наименьших квадратов 5. Линейные сети 129
'-HF осуществляет настройку, стремясь минимизировать ошибку сети. Эти ситуации поясняются демонстрационными примерами demoIiti4 и demolinS. Разрешимость линейной задачи с помощью линейной нейронной сети может быть установлена следующим образом. Если суммарное количество весов и смещений линейной сети S*R + S, где R - количество входов, S - количество слоев, равно количеству пар векторов входа и цели Q, то такая задача разрешима с помощью линейной нейронной сети. Это справедливо за исключением того случая, когда векторы входа являются линейно зависимыми и используется сеть без смещений. Демонстрационный пример demolin6 поясняет эту ситуацию. 130 Нейронные сети. MATLAB 6. f.
6. РАДИАЛЬНЫЕ БАЗИСНЫЕ СЕТИ Радиальные базисные нейронные сети состоят из большего количества нейронов, чем стандартные сети с прямой передачей сигналов и обучением методом обратного распространения ошибки, но на их создание требуется значительно меньше времени. Эти сети особенно эффективны, когда доступно большое количество обучающих векторов [7]. Ниже, кроме сетей общего вида, обсуждаются 2 специальных типа радиальных базисных сетей: сети GRNN (Generalized Regression Neural Networks) для решения задач обобщенной регрессии и сети PNN (Probabilistic Neural Networks) для решения вероятностных задач [43]. Для создания радиальных сетей общего вида предназначены М-функции newrbe и newrb, а обобщенных регрессионных и вероятностных -М-функции newgrnn и newpnn соответственно. По команде help radbasis можно получить следующую информацию об М-функциях, входящих в состав ШШ Neural Network Toolbox и относящихся к построению радиальных базисных сетей: Radial basis networks New networks newrb newrbe newgrnn newpnn Using networks sim Weight functions dist dotprod normprod Net input functions netprod netsum Transfer functions compet purelin radbas Performance mse Signals rnd2vec vec2ind Радиальные базисные сети Формирование сети Создание радиальной базисной сети Создание радиальной базисной сети с нулевой ошибкой Создание обобщенной регрессионной сети Создание вероятностной сети Работа с сетью Моделирование сети Функции взвешивания Евклидово расстояние Скалярное произведение Нормированное скалярное произведение Функции накопления Произведение взвешенных входов Сумма взвешенных входов Функции активации Конкурирующая функция активации Функция активации с жесткими ограничениями Радиальная базисная функция активации Функции оценки качества сети Среднеквадратичная погрешность - Преобразование данных '__" ''"''' Преобразование индексного вектора в матрицу связности Преобразование матрицы связности в индексный вектор 131
Demonstrations demorbl demorb3 demorb4 demogrni demopnni Демонстрационные примеры Радиальные базисные сети Пример неперекрывающихся функций активации Пример перекрывающихся функций активации Сеть GRNN и аппроксимация функций Сеть PNN и классификация векторов Модель нейрона и архитектура сети На рис. 6.1 показана радиальная базисная есть с R входами. Функция активации для радиального базисного нейрона имеет вид: radbas(/i) = е~'г'. (6.1) Вход функции активации определяется как модуль разности вектора весов w и вектора входа р, умноженный на смещение Ь. Вход Радиальный базисный нейрон N /. II dist II +®-* Л Ъ —> а = radbas (lip - wll Ь) График функции активации представлен на рис. 6.2. А -0.833 +0.833" а - mdbasi») Рис. 6.1 Рис. 6.2 Эта функция имеет максимум, равный I, когда вход равен 0. Когда расстояние между векторами w и р уменьшается, выход радиальной базисной функции увеличивается. Таким образом, радиальный базисный нейрон действует как индикатор, который формирует значение 1, когда вход р идентичен вектору весов \v. Смещение b позволяет корректировать чувствительность нейрона radbas. Например, если нейрон имел смещение 0.1, то его выходом будет 0.5 для любого вектора входа р и вектора веса w при расстоянии между векторами, равном 8.333, или 0.833/Ъ. 132 Нейронные сети. MATLAB 6
w Радиальная базисная есть состоит из двух слоев: скрытого радиального базисного слоя, имеющего 51 нейронов, и выходного линейного слоя, имеющего S2 нейронов (рис. 6.3). Вход Радиальный базисный слой Линейный слой г~л г •j'xH Щ^ ш 11_> 1\\"-! ч Г II Hisl II Ь: Л Г Л S xf 111 Vе xl LW-'l S-x.V _Ь-сеу ш^ 7^ <Jlv v. a1 = ii7rffc<«(II.IWu-pll/)') >» v_ А"-х1 S2 а: = /ж/;н([ЛУ:1а' + Ь:) > Рис. 6.3 Входами блока |jdist[| на этом рисунке являются вектор входа р и матрица весов IW1,1, а выходом - вектор, состоящий из 51 элементов, которые определяются расстояниями между /-м вектором входа р и i-й вектор-строкой ,IWU матрицы весов. Такую вектор-строку будем называть вектором весов i'-го нейрона. Выход блока ljdist|| умножается поэлементно на вектор смещения Ь1 и формирует вход функции активации. Тогда выход первого слоя может быть записан в следующей форме: aCl}=radbas{net-prod(dist{net.IW{l,l},p),net.b{l}))) Использовать столь сложную запись при применении ППП Neural Network Toolbox не потребуется, поскольку все операции, связанные с созданием радиальной базисной сети, оформлены в виде специальных М-функций newrbe и newrb. Для того чтобы понять поведение сети, необходимо проследить прохождение вектора входа р. При задании вектора входа каждый нейрон радиального базисного слоя выдаст значение в соответствии с тем, как близок вектор входа к вектору весов каждого нейрона. Таким образом, радиальные базисные нейроны с векторами весов, значительно отличающимися от вектора входа р, будут иметь выходы, близкие к 0, и их влияние на выходы линейных нейронов будет незначительно. Напротив, радиальный базисный нейрон с вектором весов, близким к вектору входа р, выдаст значение, близкое к 1, и это значение будет передано на линейный нейрон с весом, соответствующим выходному слою. Таким образом, если только I радиальный базисный нейрон имеет выход 1, а все другие имеют выходы, равные или очень близкие к 0, то выход линейного слоя будет равен весу активного выходного нейрона. Однако это исключительный случай, обычно выход формируют несколько нейронов с разными значениями весов. Создание сети Для построения радиальных базисных сетей предназначены М-функции newrbe и newrb. Первая позволяет построить радиальную базисную сеть с нулевой ошибкой, вторая позволяет управлять количеством нейронов скрытого слоя. 6. Радиальные базисные сети 133
Радиальная базисная сеть с нулевой ошибкой Для построения радиальных базисных сетей с нулевой ошибкой предназначена функция newrbe, которая вызывается следующим образом: net = newrbe(P,T, SPREAD) Входными аргументами функции newrbe являются массивы входных векторов Р и целей Т, а также параметр влияния SPREAD. Она возвращает радиальную базисную сеть с такими весами и смещениями, что ее выходы точно равны целям Т. Функция ncwrbc создает столько нейронов радиального базисного слоя, сколько имеется входных векторов в массиве Р и устанавливает веса первого слоя равными Р\ При этом смещения устанавливаются равными 0.8326/SPREAD. Это означает, что уровень перекрытия радиальных базисных функций равен 0.5 и все входы в диапазоне ±SPREAD считаются значимыми. Ясно, что чем больший диапазон входных значений должен быть принят во внимание, тем большее значение параметра влияния SPREAD должно быть установлено. Это наиболее наглядно проявляется при решении задач аппроксимации функций, в чем можно убедиться, обратившись к демонстрационной программе demorbl. Веса второго слоя IW21 (IW{2,1} - в обозначениях системы MATLAB) и смещений Ь2 (Ь{2}) могут быть найдены путем моделирования выходов первого слоя а1 (А{ 1}) и последующего решения системы линейных алгебраических уравнений (СЛАУ): [W{2,1> Ь{2>] * [А{1); ones] = Т Поскольку известны входы второго слоя А {1} и цели Т, а слой линеен, то для вычисления весов и смещений второго слоя достаточно воспользоваться решателем СЛАУ Wb = Т / [Р; ones(l, size(P,2))] Здесь матрица Wb содержит веса и смещения (смещения - в последнем столбце). Сумма квадратов погрешностей сети будет всегда равна 0, так как имеем задачу с Q уравнениями (пары вход/цель) и каждый нейрон имеет Q+1 переменных (Q весов по числу радиальных базисных нейронов и одно смещение). СЛАУ с Q уравнениями и более чем Q переменными имеет свободные переменные и характеризуется бесконечным числом решений с нулевой погрешностью. Рассмотрим пример обучения и моделирования следующей радиальной базисной сети: Р в -18.1:1? Т в [-.9602 -.5770 -.0729 .3771 .6405 .6600 .4609 .1336 ... -.2013 -.4344 -.5000 -.3930 -.1647 .0988 .3072 .3960 ... .3449 .1816 -.0312 -.2189 -.3201]; plot(P,Tf'*r','MarkerSize1,*/'LineWidth',2) hold on % Создание сети net = newrbe(P,T); % Создание радиальной базисной сети Warning: Rank deficient, rank = 13 tol = 2.2386e-014. net.layers{1}.size % Число нейронов в скрытом слое ans = 21 % Моделирование сети V = sim(net,P); % Векторы входа из обучающего множества plot(P,V,'ob','MarkerSize',5, •LineWidth',2) p = [-0.75 -0.25 0.25 0.75]; 134 Нейронные сети. MATLAB 6
v = sim(net,p); % Новый вектор входа plot(p,v,»+k','MarkerSize',10, »LineWidth•,2) Результаты моделирования представлены на рис. 6.4. .©.©.!. О т -tsrr- —*••«■ -:-•©-■ "| :-j™"Wi^V -1 -Об -06 4)4 42 D 02 0.4 06 СИ 1 р. р Рис. 6.4 Здесь отмечены значения входов Р, целевых выходов Т, а также результаты обработки нового вектора р. Количество используемых нейронов в скрытом сдое в данном случае равно 21, что соответствует длине обучающего множества. Таким образом, в результате обучения функция newrbe создает радиальную базисную сеть с нулевой погрешностью на обучающем множестве. Единственное условие, которое требуется выполнить, состоит в том, чтобы значение параметра SPREAD было достаточно большим, чтобы активные области базисных функций перекрывались, чтобы покрыть весь диапазон входных значений. Это позволяет обеспечить необходимую гладкость аппроксимирующих кривых и препятствует возникновению явления переобучения. Однако значение SPREAD не должно быть настолько большим, чтобы радиальная базисная функция объявляла одинаково значимыми все значения входа. Недостаток функции newrbe заключается в том, что она формирует сеть с числом нейронов в скрытом слое, равным числу элементов обучающего множества. Поэтому с помощью этой функции нельзя получить приемлемого решения в случае больших размеров обучающего множества, что характерно для реальных приложений. Итерационная процедура формирования сети Функция ncwrb создает радиальную базисную сеть, используя итеративную процедуру, которая добавляет по одному нейрону на каждом шаге. Нейроны добавляются к скрытому слою до тех пор, пока сумма квадратов ошибок не станет меньше заданного значения или не будет использовано максимальное количество нейронов. Эта функция вызывается с помощью команды net = newrb(P,T,GOAL,SPREAD) Входами функции ncwrb являются массивы входных й целевых векторов Р и Т, а также параметры GOAL (допустимая среднеквадратичная ошибка сети), SPREAD (параметр J влияния), а выходом - описание радиальной базисной сети. Значение параметра SPREAD : должно быть достаточно большим, чтобы покрыть весь диапазон значений входов, но не настолько, чтобы эти значения были одинаково значимыми. 6. Радиальные базисные сети 135
Применим функцию newrb для создания радиальной базисной сети из предыдущго примера. Р = -1:.1:1; Т = [-.9602 -.5770 -.0729 .3771 .6405 .6600 .4609 .1336 ... -.2013 -.4344 -.5000 -.3930 -.1647 .0988 .3072 .3960 ... .3449 .1816 -.0312 -.2189 -.3201]; plot(P,T,'*r', 'MarkerSize',4,»LineWidth■,2) hold on % Создание сети GOAL =0.01; % Допустимое значение функционала ошибки net = newrb(P,T,GOAL); % Создание радиальной базисной сети net.layers{1}.size % Число нейронов в скрытом слое ans = 6 % Моделирование сети V = sim(net,P); % Векторы входа из обучающего множества plot(Р,V,'оЬ1, •MarkerSize•,5, ■LineWidth1,2) р = [-0.75 -0.25 0.25 0.75]; v = sim(net,p); % Новый вектор входа plot(p,v,•+к',•MarkerSize',10, •LineWidth',2) Соответствующий график представлен на рис. 6.5, а. ■• '• 06 ",, "i 06 * •r.^?i 'h « l' . 0 ,,,.K,jM '•.у -о* jl l «S i Jl r "°e 1 ij ' -^ '- ..!.; PttyJUTItW Ш/ЛЯ^АМЫМ :::::::■ :ttt::t:j:t±i -''- : •T- ■•-i™-•*-—;-*-/•—•!•—■Jj;—f—.—-y—- I r--;--t--:--f--r--j--t-y: -••! *—j--f •«--♦-j j-.-j--|-- -*■' :-—;—.-,;.—.;-..-; i— -,;—*--«■ —i :-.--{—.■{..—1....<—j.—.j.....j.— W . fc Ч£*-Я*№Л' S№* ^ ^ Ш '••v *]■■* ■(•■■'» 1! -« . ■« •1 1; - — .... — — 1 .. *fr ;■ .p Р*Д**%УМ бмиСМЯ Cfttbf , ....i i i i—J '""Г : : :" 1 ! r-i ! i!?J-';..'.; ;'°\.-.:'■."■№*,Vv,0< ■'■ *\\^ ?*Ffe- . Тачнб^ъ ■■ а б Рис. 6.5 Здесь отмечены значения входов Р, целевых выходов Т, а также результаты обработки нового вектора р. Количество используемых нейронов в скрытом слое в данном случае равно шести, что соответствует значению функционала ошибки 0.01. На рис. 6.5, б показана зависимость количества требуемых нейронов скрытого слоя от точности обучения. Из этого графика следует, что для значений функционала ошибки менее 1е-9 требуется максимальное количество нейронов, совпадающее с числом нейронов радиальной базисной сети с нулевой погрешностью. Если сравнивать сети с прямой передачей сигнала и радиальные базисные сети, то следует заметить, что при решении одних и тех же задач они имеют определенные преимущества друг перед другом. Так, радиальные базисные сети с нулевой погрешностью' имеют значительно больше нейронов, чем сравнимая сеть с прямой передачей сигнала и' сигмоидальными функциями активации в скрытом слое. Это обусловлено тем, что сиг: моидальные функции активации перекрывают большие диапазоны значений входа, чем 136 Нейронные сети. MATLAB 6
радиальные базисные функции. С другой стороны, проектирование радиальной базисной сети требует значительно меньшего времени, а при ограниченной точности обучения может потребовать и меньшего количества используемых нейронов. Примеры радиальных базисных сетей Демонстрационный пример demorb 1 иллюстрирует применение радиальной базисной сети для решения задачи аппроксимации функции от одной переменной. Представим функцию Дл:) следующим разложением: /(*)=Z«iPi(*). f=i (6.2) где <pt(x) - радиальная базисная функция. Тогда идея аппроксимации может быть представлена графически следующим образом. Рассмотрим взвешенную сумму трех "радиальных базисных функций, заданных на интервале [-3 3]. р = -3:.1:3; al = radbas(p); а2 = xadbas(p-1.5); аЗ = radbas(p+2); а = al + а2*1 + аЗ*0.5; plot(p,al,p,a2,p,a3*0.5,p,a) % Рис. 6.6 Рис. 6.6 Как следует из анализа рис. 6.6 разложение по радиальным базисным функциям обеспечивает необходимую гладкость. Поэтому их применение для аппроксимации произвольных нелинейных зависимостей вполне оправдано. Разложение вида (6.2) может быть реализовано на двухслойной нейронной сети, первый слой которой состоит из радиальных базисных нейронов, а второй - из единственного нейрона с линейной характеристикой, на котором реализуется суммирование выходов нейронов первого слоя. Приступим к формированию радиальной базисной сети. Сформируем обучающее множество и зададим допустимое значение функционала ошибки, равное 0.01, параметр б. Радиальные базисные сети 137
влияния определим равным 1 и будем использовать итерационную процедуру формирования радиальной базисной сети: Р = -1:.1:1; Т = [-.9602 -.5770 -.0729 .3771 .6405 .6600 .4609 .1336 ... -.2013 -.4344 -.5000 -.3930 -.1647 .0988 .3072 .3960 ... .3449 .1816 -.0312 -.2189 -.3201]; GOAL = 0.01; % Допустимое значение функционала ошибки SPREAD = 1; % Параметр влияния net = newrb(P,T,GOAL,SPREAD); % Создание сети net.layers{1}.size % Число нейронов в скрытом слое ans = 6 Для заданных параметров нейронная сеть состоит из шести нейронов и обеспечивает следующие возможности аппроксимации нелинейных зависимостей после обучения. Моделируя сформированную нейронную сеть, построим аппроксимационную кривую на интервале [-1 1] с шагом 0.01 для нелинейной зависимости. plot{P,T,■+k") % Точки обучающего множества hold on; X = -1:.01:1; Y = sim(net,X); % Моделирование сети plot(X,У); % Рис. 6.7 Из анализа рис. 6.7 следует, что при небольшом количестве нейронов скрытого слоя радиальная базисная сеть достаточно хорошо аппроксимирует нелинейную зависимость, заданную обучающим множеством из 21 точки. Рис. 6.7 В демонстрационных примерах demorb3 и demorb4 исследуется влияние параметра SPREAD на структуру радиальной базисной сети и качество аппроксимации. В демонстрационном примере demorb3 параметр влияния SPREAD установлен равным 0.01. Это означает, что диапазон перекрытия входных значений составляет лишь ±0.01, а поскольку . обучающие входы заданы с интервалом 0.1, то входные значения функциями активации не перекрываются. GOAL =0.01; % Допустимое значение функционала ошибки SPREAD = 0.01; % Параметр влияния 138 Нейронные сети. MATLAB 6 .
net = newrb(F,T,GOAL,SPREAD); % Создание сети net.layers{1}.size % Число нейронов в скрытом слое ans = 19 Это приводит к тому, что, во-первых, увеличивается количество нейронов скрытого слоя с 6 до 19, а во-вторых, не обеспечивается необходимой гладкости аппроксимируемой функции: plot(P,T,'+k') % Точки обучающего множества hold on; X = -1:.01:1; Y = sim(net,X); % Моделирование сети plot(X,У); % Рис. 6.8 /-■>:-->-/- .- \1 Аппрокси«1Цкя нелинейной зависимости „-.--' ^ - - - *^. .-*=. . *■'■-■*,;' ^***|— ' ' "" [""" [ 1 I 1 г^ г~'■ "л.-..' ix - Пример demorb4 иллюстрирует противоположный случай, когда параметр влияния SPREAD выбирается достаточно большим (в данном примере - 12 или больше), то все функции активации перекрываются и каждый базисный нейрон выдает значение, близкое к 1, для всех значений входов. Это приводит к тому, что сеть не реагирует на входные значения. Функция newrb будет пытаться строить сеть, но не сможет обеспечить необходимой точности из-за вычислительных проблем. GOAL =0.01; % Допустимое значение функционала ошибки SPREAD =12; % Параметр влияния net = newrb<P,T,GOAL,SPREAD); % Создание сети net.layers (!).size % Число нейронов в скрытом слое ans = 21 В процессе вычислений возникают трудности с обращением матриц, и об этом выдаются предупреждения; количество нейронов скрытого слоя устанавливается равным 21, а точность аппроксимации оказывается недопустимо низкой: plot{P,T,•+k') % Точки обучающего множества hold on; X = -ls.Olsl; Y = sim(net,X); % Моделирование сети plot{X,Y) ; % Рис. 6.9 .6. Радиальные базисные сети 139
08 0J Q -0.2 ■06 ■08 -1" It f-\~ Ащкммшуп i + 4n ....... •i- : : .+ . 4 -i" : : .... i" : T" нвлниййнАй зависну остн : .:..- -i— 4=- i : 1" '• i Г : + *jF< f-l j-- .i -. -oe .-0-6 ..--од -0.2, ,02,- 0.4 0.6 03 :.,I Рис. 6.9 Вывод из выполненного исследования состоит в том, что параметр влияния SPREAD следует выбирать большим, чем шаг разбиения интервала задания обучающей последовательности, но меньшим размера самого интервала. Для данной задачи это означает, что параметр влияния SPREAD должен быть больше 0.1 и меньше 2. 6.1. Сети GRNN Нейронные сети GRNN (Generalized Regression Neural Network) описаны в работе [43] и предназначены для решения задач обобщенной регрессии, анализа временных рядов и аппроксимации функций. Характерной особенностью этих сетей является очень высокая скорость их обучения. Архитектура сети Архитектура сети GRNN показана на рис. 6.10. Она аналогична архитектуре радиальной базисной сети, но отличается структурой второго слоя, в котором используется блок normprod для вычисления нормированного скалярного произведения строки массива весов LW21 и вектора входа а1 в соответствии со следующим соотношением: LW2V п2 = Вход sum(al) Радиальный базисный слон (6.3) Линейный слой Л Г Л t'Xtf 1 ь Q х!*" LW!] 1 Г normprod 1Г <м * s / ► Q к) W \U V. J V. J а1 = nulbm(\l IW'-'-pli/i1 ) а: = pureliniB') Рис. 6.10 140 Нейронные сети. MATLAB 6
Первый слой - это радиальный базисный слой с числом нейронов, равным числу элементов Q обучающего множества; в качестве начального приближения для матрицы весов выбирается массив Р1; смещение b устанавливается равным вектор-столбцу с элементами 0.8326/SPREAD. Функция dist вычисляет расстояние между вектором входа и вектором веса нейрона; вход функции активации п1 равен поэлементному произведению взвешенного входа сети на вектор смещения; выход каждого нейрона первого слоя а1 является результатом преобразования вектора п1 радиальной базисной функцией radbas. Если вектор веса нейрона равен транспонированному вектору входа, то взвешенный вход равен О, а выход функции активации - I. Если расстояние между вектором входа и вектором веса нейрона равно spread, то выход функции активации будет равен 0.5. Второй слой - это линейный слой с числом нейронов, также равным числу элементов Q обучающего множества, причем в качестве начального приближения для матрицы весов LW{2,1} выбирается массив Т. Предположим, что имеем вектор входа ps, близкий к одному из векторов входа р из обучающего множества. Этот вход ps генерирует значение выхода слоя аЛ близкое к 1. Это приводит к тому, что выход слоя 2 будет близок к tj. Если параметр влияния SPREAD мал, то радиальная базисная функция характеризуется резким спадом и диапазон входных значений, на который реагируют нейроны скрытого слоя, оказывается весьма малым. С увеличением параметра SPREAD наклон радиальной базисной функции становится более гладким, и в этом случае уже несколько нейронов реагируют на значения вектора входа. Тогда на выходе сети формируется вектор, соответствующий среднему нескольких целевых векторов, соответствующих входным векторам обучающего множества, близких к данному вектору входа. Чем больше значение параметра SPREAD, тем большее число нейронов участвует в формировании среднего значения, и в итоге функция, генерируемая сетью, становится более гладкой. Синтез сети Для создания нейронной сети GRNN предназначена М-функция newgrnn. Зададим следующее обучающее множество векторов входа и целей и построим сеть GRNN: Р = [4 5 6]; Т = [1.5 3.6 6.7]; net = newgrnntP,T); net.layers{1}.size % Число нейронов в скрытом слое ans = 3 Эта сеть имеет 3 нейрона в скрытом слое. Промоделируем построенную сеть сначала для одного входа,, а затем для последовательности входов из интервала [4 7]: р я 4.5; v = sxm(net,p); pi = 4:0.1:7; vl =s sim(net,pl) ; plot(P,T,•*k',p,v,"ok1,pl,vl,■-k','MarkerSize',10,■LineWidth',2) Результат показан на рис. 6.11. 6. Радиальные базисные сети 141
ж 7 6 5 4 3 2 * i у** ^i t : Г7-:"-■■;■: А'.й- ' "". i Реакция сети GRNN / <• * С^ у/\ г : \ ; # Р.Т О P*.v* - P. v : 5.5 ,;' 6- V.-< •ФЛ Рис. 6.11 Заметим, что для сети GRNN размер вводимого вектора может отличаться от размера векторов, используемых в обучающей последовательности. Кроме того, в данном случае ■ аппроксимирующая функция может значительно отличаться от значений, соответствующих обучающей последовательности. Демонстрационная программа demogrnl иллюстрирует, как сети GRNN решают зада- . чи аппроксимации. Определим обучающее множество в виде массивов Р и Т. Ра [1234567 8]; Т « [0 1 2 3 2 1 2 13; Для создания сети GRNN используется функция newgrnn. Примем значение парамет- - ра влияния SPREAD немного меньшим, чем шаг задания аргумента функции (в данном случае 1), чтобы построить аппроксимирующую кривую, близкую к заданным точкам. ' Как мы уже видели ранее, чем меньше значение параметра SPREAD, тем ближе точки аппроксимирующей кривой к заданным, но тем менее гладкой является сама кривая: spread =0.7; net = newgrnn(Р,Т,вргеad); net.layers{1}.size % Число нейронов в скрытом слое ans = 8 А = s±m(net,P); plot(Р,Т,•*k',"markersize',10) hold on, plot(P,A,'ok1,'markersize',10); Результат показан на рис. 6.12. 142 Нейронные сети. MATLAB 6
Аппроксимация wieit' Г SPREAD;= 0.7 О <) О,-. сЯШ&Ё1~£$*::& Рис. 6.12 Моделирование сети для диапазона значений аргумента позволяет увидеть всю аппроксимирующую кривую, причем возможна экстраполяция этой кривой за пределы области ее определения. Для этого зададим интервал аргумента в диапазоне [-1 10]: Р2 = -1:0.1:10; А2 - sim(net,P2); plot(P2,A2,'-k',"linewidtb',2) hold on, plot(P,T,■ *k'/'markersize'jlO) Результат показан на рис. 6.13. ?%Ч -&ЯЯ. ''^&?{$^ШШ'*~'!Я&\*£&* "1 -Sill :S.fJ-£S;.2 %:yzm » Рис. 6.13 Сформированная сеть GRNN использует всего 8 нейронов в скрытом слое и весьма успешно решает задачу аппроксимации и экстраполяции нелинейной зависимости, восстанавливаемой по экспериментальным точкам. б. Радиальные базисные сети 143
щ 6.2. Сети PNN Нейронные сети PNN (Probabilistic Neural Networks) описаны в работе [43] и предназначены для решения вероятностных задач, и в частности задач классификации. Архитектура сети Архитектура сети PNN базируется на архитектуре радиальной базисной сети, но в качестве второго слоя использует так называемый конкурирующий слойу который подсчитывает вероятность принадлежности входного вектора к тому или иному классу и в конечном счете сопоставляет вектор с тем классом, вероятность принадлежности к которому выше. Структура сети PNN представлена на рис. 6.14. Вход Радиальный базисный слой Конкурирующий слой r~\ rzzz \ г о%« iwr-! \1jkJ1 £^v_ Л > IAYi.1 KxQ a* - у Q rtf1 = mf№rt.v([l.l\VLl-pHbj) n2= compete h\\^1 a1) J Рис. 6.14 Предполагается, что задано обучающее множество, состоящее из Q пар векторов вход/цель. Каждый вектор цели имеет К элементов, указывающих класс принадлежности, и, таким образом, каждый вектор входа ставится в соответствие одному из К классов. В результате может быть образована матрица связности Т размера KxQ, состоящая из нулей и единиц, строки которой соответствуют классам принадлежности, а столбцы - векторам входа. Таким образом, если элемент T(i, j) матрицы связности равен 1, то это означает, что j-й входной вектор принадлежит к классу L Весовая матрица первого слоя IW11 (net.IW {1,1}) формируется с использованием векторов входа из обучающего множества в виде матрицы Р'. Когда подается новый вход, блок Hdist|| вычисляет близость нового вектора к векторам обучающего множества; затем* вычисленные расстояния умножаются на смещения и подаются на вход функции активации radbas. Вектор обучающего множества, наиболее близкий к вектору входа, будет представлен в векторе выхода а1 числом, близким к 1. Весовая матрица второго слоя LW21 (net.LW{2,l}) соответствует матрице связности Т, построенной для данной обучающей последовательности. Эта операция может быть выполнена с помощью М-функции ind2vec, которая преобразует вектор целей в матрицу. связности Т. Произведение Т*а' определяет элементы вектора а1, соответствующие каждому из /if классов. В результате конкурирующая функция активации второго слоя compet- формирует на выходе значение, равное 1, для самого большого по величине элемента вектора п2 и 0 в остальных случаях. Таким образом, сеть PNN выполняет классификацию векторов входа по К классам. 144 Нейронные сети. MATLAB 6
Синтез сети Для создания нейронной сети PNN предназначена М-функция newpnn. Определим 7 следующих векторов входа и соотнесем каждый из них с одним из трех классов: Р = [0 0;1 1;0 3;1 4;3 1;4 1,-4 3]'; Тс = [112 2 3 3 3]; Вектор Тс назовем вектором индексов классов. Этому индексному вектору можно поставить в соответствие матрицу связности Т в виде разреженной матрицы вида Т = ind2vec{Tc) Т = (1.1) 1 (1.2) 1 (2.3) 1 (2.4) 1 (3.5) 1 (3.6) 1 (3.7) 1 которая определяет принадлежность первых двух векторов к классу 1, двух последующих - к классу 2 и трех последних - к классу 3. Полная матрица Т имеет вид: Т = full(T) 110 0 0 0 0 0 0 110 0 0 0 0 0 0 111 Массивы Р и Т задают обучающее множество, что позволяет выполнить формирование сети, промоделировать ее, используя массив входов Р, и удостовериться, что сеть правильно решает задачу классификации на элементах обучающего множества. В результате моделирования сети формируется матрица связности, соответствующая массиву векторов входа. Для того чтобы преобразовать ее в индексный вектор, предназначена М-функция vec2ind: net = newpnn(PfT); net.layers{1}.size % Число нейронов в сети PNN ans = 7 Y = sim(xiet,P) ; Ус я vec2ind<Y) Yc =1122333 Результат подтверждает правильность решения задачи классификации. Выполним классификацию некоторого набора произвольных векторов р, не принадлежащих обучающему множеству, используя ранее созданную сеть PNN: р = [1 3; 0 1; 5 2]'; Выполняя моделирование сети для этого набора векторов, получаем а = sim<net,p); ас = vec2ind(a) ас = 2 1 3 б. Радиальные базисные сети 145
'■# С'' ::-Л Фрагмент демонстрационной программы demopnnl позволяет проиллюстрировать ■ результаты классификации в графическом виде: elf reset, drawnow pi = 0: .05:5; p2 = pi; [Pl,E2J=meshgrid(pl,p2); pp = [Pl(:> P2(:)]; aa = sim(net,pp'); aa - full(aa); m = mesh(Pl,P2,reshape(aa(l,:),length(pi),length(p2))); set(m,'facecolor',[0.75 0.75 0.75],'linestyle','none'); hold on view{3) ш = mesh(PI, P2 ,reshape(aa(2,:)/length(pi),length(p2))); set(m, 'facecolor',[0 1 0.5],'linestyle','none■);, m = mesh(Pl,P2,reshape(aa(3,:)-, length (pi) , length (p2))); set(m,'facecolor',[0 1 1],'linestyle','none'); plot3(P(l,:),P(2,:),ones(size(P,2))+0.1,•.','markersize',30) plot3(p(l, :),p(2, :),l.l*ones(size(p,2)}, •*', 'marker size',20,... .:, •color',[1 0 0]) hold off view(2) Результаты классификации представлены нарис. 6.15 и показывают, что 3 представленных сети вектора, отмеченные звездочками, классифицируются сетью PNN, состоящей >■ из семи нейронов, абсолютно правильно. *■ . Рис. 6.15 В заключение отметим, что сети PNN могут весьма эффективно применяться для ре-„ шения задач классификации. Если задано достаточно большое обучающее множество, то решения, генерируемые сетями, сходятся к решениям, соответствующим правилу Байеса., Недостаток сетей GRNN и PNN заключается в том, что работают они относительно мед-> ленно, поскольку выполняют очень большие объемы вычислений по сравнению с друга-, ми типами нейронных сетей. . -: ш 146 Нейронные сети. MATLAB 6
7. СЕТИ КЛАСТЕРИЗАЦИИ И КЛАССИФИКАЦИИ ДАННЫХ В процессе анализа больших информационных массивов данных неизменно возникают задачи, связанные с исследованием топологической структуры данных, их объединением в группы (кластеры), распределением по классам и т. п. Это могут быть экономические, финансовые, научно-технические, медицинские и другие приложения, где требуется решение таких практических задач, как сжатие данных, их хранение и поиск, определение характеристик объекта по ограниченнолгу набору признаков. Такие задачи могут быть успешно решены с применением специального класса самоорганизующихся нейронных сетей. 7.1. Самоорганизующиеся нейронные сети Свойство самоорганизации является одним из наиболее привлекательных свойств нейронных сетей. Таким свойством обладают самоорганизующиеся нейронные сети, описанные финским ученым Т. Кохоненом [23]. Нейроны самоорганизующейся сети могут, быть обучены выявлению групп (кластеров) векторов входа, обладающих некоторыми общими свойствами. При изучении самоорганизующихся нейронных сетей, или сетей Кохонена, существенно различать сети с неупорядоченными нейронами, которые часто называют слоями Кохонена, и.сети с упорядочением нейронов, которые часто называют картами Кохонена. Последние отражают структуру данных таким образом, что близким кластерам данных на карте соответствуют близко расположенные нейроны. Для создания самоорганизующихся нейронных сетей, являющихся слоем или картой Кохонена, предназначены М-функции newc и newsom соответственно. По команде help selforg можно получить следующую информацию об М-функциях, входящих в состав ПГШ Neural Network Toolbox и относящихся к построению сетей Кохонена: Self-organizing networks New networks newc newsom . Using networks sim init adapt ' train Weight functions negdist Net input functions netsum Transfer functions com pet Самоорганизующиеся сети Формирование сети ' Создание слоя Кохонена Создание карты Кохонена Работа с сетью Моделирование Инициализация Адаптация Обучение Функции расстояния и взвешивания Отрицательное евклидово расстояние Функции накопления Сумма взвешенных входов Функции активации Конкурирующая функция активации 147
Topology functions gridtop hextop randtop Distance functions dist boxdist mandist linkdist Initialization functions initlay initwb initcon midpoint Learning functions learnk learncon learnsom Adapt functions adaptwb Training functions trainwM Demonstrations demod demosml demosm2 Функции описания топологии сети Прямоугольная сетка Гексагональная сетка Сетка со случайно распределенными узлами Функции расстояния Евклидово расстояние Расстояние максимального координатного смещения Расстояние суммарного координатного смешения Расстояние связи Функции инициализации сети Послойная инициализация Инициализация весов и смещений Инициализация смещений с учетом чувствительности нейронов Инициализация весов по правилу средней точки Функции настройки параметров Правило настройки весов для слоя Кохонена Правило настройки смещений для слоя Кохонена Правило настройки весов карты Кохонена Функции адаптации Адаптация весов и смещений Функции обучения Повекторное обучение весов и смещений Демонстрационные примеры Настройка слоя Кохонена Одномерная карта Кохонена Двумерная карта Кохонена 7.1.1. Слой Кохонена Рассмотрим самоорганизующуюся нейронную сеть с единственным слоем, задача которой заключается в том, чтобы правильно сгруппировать (кластеризировать) поступающие на нес векторы входа. Архитектура сети Архитектура слоя Кохонена показана на рис. 7.L Вход Конкурирующий слой S'x/c IW" I р lindistll "Ч. Slx\ ll1 V?i t aJJ ^ r4t/S'xl С S'xl 4_ -^ Рис. 7.1 148 Нейронные сети. MATLAB 6
Нетрудно убедиться, что это слой конкурирующего типа, поскольку в нем применена конкурирующая функция активации. Кроме того, архитектура этого слоя очень напоминает архитектуру скрытого слоя радиальной базисной сети. Здесь использован блок ndist для вычисления отрицательного евклидова расстояния между вектором входа р и строками матрицы весов IW1 \ Вход функции активации п1 - это результат суммирования вычисленного расстояния с вектором смещения Ь. Если все смещения нулевые, максимальное значение п1 не может превышать 0. Нулевое значение п1 возможно только, когда вектор входа р оказывается равным вектору веса одного из нейронов. Если смещения отличны от 0, то возможны и положительные значения для элементов вектора п1. Конкурирующая функция активации анализирует значения элементов вектора п1 и формирует выходы нейронов, равные 0 для всех нейронов, кроме одного нейрона - победителя, имеющего на входе максимальное значение. Таким образом, вектор выхода слоя а имеет единственный элемент, равный 1, который соответствует нейрону- победителю, а остальные равны 0. Такая активационная характеристика может быть описана следующим образом: . fl, i~i*, i'* = arg(maxnj) аН. * (7Л) [0, i^i Заметим, что эта активационная характеристика устанавливается не на отдельный нейрон, а на слой. Поэтому такая активационная характеристика и получила название конкурирующей. Номер активного нейрона i определяет ту группу (кластер), к которой наиболее близок входной вектор. Создание сети Для формирования слоя Кохонена предназначена М-функция newc. Покажем, как она работает, на простом примере. Предположим, что задан массив из четырех двухэлементных векторов, которые надо разделить на 2 класса: р = [.1 .8 .1 .9; .2 .9 .1 .8] Р = 0.1000 0.8000 0.1000 0.9000 0.2000 0.9000 0.1000 0.8000 В этом примере нетрудно видеть, что 2 вектора расположены вблизи точки (0,0) и 2 вектора - вблизи точки (1,1)- Сформируем слой Кохонена с двумя нейронами для анализа двухэлементных векторов входа с диапазоном значений от 0 до 1: net = newc([0 1; 0 l],2); Первый аргумент указывает диапазон входных значений, второй определяет количество нейронов в слое. Начальные значения элементов матрицы весов задаются как среднее максимального и минимального значений, т. е. в центре интервала входных значений; это реализуется по умолчанию с помощью М-функции midpoint при создании сети. Убедимся, что это действительно так: wts = net.iw{l,l} wts = 0.5000 0.5000 0.5000 0.5000 7. Сети кластеризации и классификации данных 149
« Определим характеристики слоя Кохонена: net.layers{1} ans = dimensions: 2 distanceFcn: 'dist' distances: [2x2 double} initFcn: 'initwb' netlnputFcn: 'netsum' positions: [0 1] size: 2 topologyFcn: 'hextop' transferFcn: 'compet' userdata: [lxl struct] Из этого описания следует, что есть использует функцию евклидова расстояния,^!, функцию инициализации initwb, функцию обработки входов netsum, функцию активации compet и функцию описания топологии hextop. Характеристики смещений следующие: net.biases{1} ans = initFcn learn learnFcn learnParam size userdata 'initcon' 1 'learncon' [lxl struct] 2 [lxl struct] Смещения задаются функцией initcon и для инициализированной сети равны net.b{l} ans = 5.4366 5.4366 Функцией настройки смещений является функция1еагпсоп, обеспечивающая настройку с учетом параметра активности нейронов. Элементы структурной схемы слоя Кохонена показаны нарис.7.2, а-б и могут быть получены с помощью оператора gensim(net) Они наглядно поясняют архитектуру и функции, используемые при гостроении слоя Кохонена. аъ W р{1} rpi Delays Р 1 wiefrjjvii IW{1,1} •bias»- W: S netsui fe ■* ■C т\ compet *чз> a{1} ь{1У 150 Нейронные сети. MATLAB 6
Leiflhtsj ► w..- Ш{1.1X2.:? negdirt2 б Рис. 7.2 Теперь, когда сформирована самоорганизующаяся нейронная сеть, требуется обучить се решению задачи кластеризации данных. Напомним, что каждый нейрон блока compet конкурирует за право ответить на вектор входа р. Если все смещения равны 0, то нейрон с вектором веса, самым близким к вектору входа р, выигрывает конкуренцию и возвращает на выходе значение 1; все другие нейроны возвращают значение 0. Правило обучения слоя Кохонена Правило обучения слоя Кохонена, называемое также правилом Кохонена, заключается в том, чтобы настроить нужным образом элементы матрицы весов. Предположим, что нейрон i победил при подаче входа р(#) на шаге самообучения q, тогда строка i матрицы весов корректируется в соответствии с правилом Кохонена следующим образом: ,TWn{q)=imu{q-l) + ak(q)- jIWn(9-l)). (7.2) Правило Кохонена представляет собой рекуррентное соотношение, которое обеспечивает коррекцию строки i матрицы весов добавлением взвешенной разности вектора входа и значения строки на предыдущем шаге. Таким образом, вектор веса, наиболее близкий к вектору входа, модифицируется так, чтобы расстояние между ними стало еще меньше. Результат такого обучения будет заключаться в том, что победивший нейрон, вероятно, выиграет конкуренцию и в том случае, когда будет представлен новый входной вектор, близкий к предыдущему, и его победа менее вероятна, когда будет представлен вектор, существенно отличающийся от предыдущего. Когда на вход сети поступает все большее и большее число векторов, нейрон, являющийся ближайшим, снова корректирует свой весовой вектор. В конечном счете, если в слое имеется достаточное количество нейронов, то каждая группа близких векторов окажется связанной с одним из нейронов слоя. В этом и заключается свойство самоорганизации слоя Кохонена. Настройка параметров сети по правилу Кохонена реализована в виде М-функции learnk. Правило настройки смещений Одно из ограничений всякого конкурирующего слоя состоит в том, что некоторые нейроны оказываются незадействованными. Это проявляется в том, что нейроны, имеющие начальные весовые векторы, значительно удаленные от векторов входа, никогда не выигрывают конкуренции, независимо от того как долго продолжается обучение. В результате оказывается, что такие векторы не используются при обучении и соответствующие нейроны никогда не оказываются победителями. Такие нейроны-неудачники iz{1.1} 7. Сети кластеризации и классификации данных 151
называют "мертвыми" нейронами, поскольку они не выполняют никакой полезной функции. Чтобы исключить такую ситуацию и сделать нейроны чувствительными к поступающим на вход векторам, используются смещения, которые позволяют нейрону стать конкурентным с нейронами-победителями. Этому способствует положительное смещение, которое добавляется к отрицательному расстоянию удаленного нейрона. Соответствующее правило настройки, учитывающее нечувствительность мертвых нейронов, реализовано в виде М-функции learncon и заключается в следующем. В начале процедуры настройки всем нейронам конкурирующего слоя присваивается одинаковый параметр активности где N- количество нейронов конкурирующего слоя, равное числу кластеров. В процессе настройки М-функция learncon корректирует этот параметр таким образом, чтобы его значения дня активных нейронов становились больше, а для неактивных нейронов меньше. Соответствующая формула для вектора приращений параметров активности выглядит следующим образом: Дс = /г*(а;.-с), ' (7.4) где 1г~ параметр скорости настройки; а\ -вектор, элемент!* которого равен 1,аостальные-0. Нетрудно убедиться, что для всех нейронов, кроме нейрона-победителя, приращения отрицательны. Поскольку параметры активности связаны со смещениями соотношением (в обозначениях системы MATLAB) Ь = ехр(1)./с, (7.5) то из этого следует, что смещение для нейрона-победителя уменьшится, а смещения для остальных нейронов немного увеличатся. М-функция learncon использует следующую формулу для расчета приращений вектора смещений ДЬ = ехр(1 - log(c)) - b . (7.6) Параметр скорости настройки /г по умолчанию равен 0.001, и его величина обычно на порядок меньше соответствующего значения для М-функции learnk. Увеличение смещений для неактивных нейронов позволяет расширить диапазон покрытия входных значений, и неактивный нейрон начинает формировать кластер. В конечном счете он может начать притягивать новые входные векторы. Это дает два преимущества. Если нейрон не выигрывает конкуренции, потому что его вектор весов существенно отличается от векторов, поступающих на вход сети, то его смещение по мере обучения становится достаточно большим и он становится конкурентоспособным. Когда это происходит, его вектор весов начинает приближаться к некоторой группе векторов входа. Как только нейрон начинает побеждать, его смещение начинает уменьшаться. Таким образом, задача активизации "мертвых" нейронов оказывается решенной. Второе преимущество, связанное с настройкой смещений, состоит в том, что они позволяют выравнять значения параметра активности и обеспечить притяжение приблизительно одинакового количества векторов входа. Таким образом, если один из кластеров притягивает большее число векторов входа, чем другой, то более заполненная область притянет дополнительное количество нейронов и будет поделена на меньшие по размерам кластеры. 152 Нейронные сети. MATLAB 6 '■
Обучение сети Реализуем 10 циклов обучения. Для этого можно использовать функции train или adapt: net.trainParam.epochs = 10; net = train{net,p); net.adaptParam.passes = 10; [net,y,e] = adapt(net,mat2cell(p)); Заметим, что для сетей с конкурирующим слоем по умолчанию используется обучающая функция trainvvbl, которая на каждом цикле обучения случайно выбирает входной вектор и предъявляет его сети; после этого производится коррекция весов и смещений. Выполним моделирование сети после обучения: а = sim(net,p); ас = vec2ind(a) ас = 2 1 2 1 Видим, что сеть обучена классификации векторов входа на 2 кластера: первый расположен в окрестности вектора (0,0), второй - в окрестности вектора (1,1). Результирующие веса и смещения равны: wtsl = net.iw{l,l} Ы = net.b{l} wtsl = 0.58383 0.58307 0.41712 0.42789 Ы = 5.4152 5.4581 Заметим, что первая строка весовой матрицы действительно близка к вектору (1, 1), в то время как вторая строка близка к началу координат. Таким образом, сформированная сеть обучена классификации входов. В процессе обучения каждый нейрон в слое, весовой вектор которого близок к группе векторов входа, становится определяющим для этой группы векторов. В конечном счете, если имеется достаточное число нейронов, каждая группа векторов входа будет иметь нейрон, который выводит 1, когда представлен вектор этой группы, и 0 в противном случае, или, иными словами, формируется кластер. Таким образом, слой Кохонена действительно решает задачу кластеризации векторов входа. Пример: Функционирование слоя Кохонена можно пояснить более наглядно, используя графику системы MATLAB. Рассмотрим 48 случайных векторов на плоскости, формирующих 8 кластеров, группирующихся около своих центров. На графике, приведенном на рис. 7.3, показано 48 двухэлементных векторов входа. Сформируем координаты случайных точек и построим план их расположения на плоскости: с=8;п=6;% Число кластеров, векторов в кластере d = 0.5; % Среднеквадратичное отклонение от центра кластера х = 1-10 10;-5 5]; % Диапазон входных значений [r,q] = sise(x); minv = min{x1)'; maxv = luax(x')'; v = rand{r,c) .* ((maxv - minv) *ones(l,c) + minv*ones(l,c)); t = c*n; % Число точек 7. Сети кластеризации и классификации данных 153
v= [vvvvvv]; v=v+randn(r,t)*d; % Координаты сочек P = v; plot<P(l,:), P<2,:),'+k') % Рис.7.3 title{' Векторы входа'}, xlabel('P(l,:)'), ylabel('P(2,:)') Векторы входа, показанные на рис. 7.3, относятся к различным классам. Векторы входа :■: -. А. .:.":Ч; :...•' - Рис. 7.3 Применим конкурирующую сеть из восьми нейронов для того, чтобы распределить их по классам: net = newc([-2 12;-1 6], 8 ,0.1); wO = net.IW{l} ЬО = net.b{l} cO = ехр(1)./ЬО Начальные значения весов, смещений и параметров активности нейронов представлены в следующей таблице: wO = 0.5 0.25 0.5 0.25 0.5 0.25 0.5 0.25 0.5 0.25 0.5 0.25 0.5 0-25 0.5 0.25 После обучения в течение 500 циклов получим: net.trainP arairw epochs = 500; net = train(net#P); w = net.lWCl} bn = net.b{l} en = exp(l)./bn b0 = 21.746 21.746 21.746 21.746 21.746 21.746 21.746 21.746 cO = 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 154 ' Нейронные сети МАТ1АВ6
w = 6. 1. 0, 3. 3 4, 6 0 .2184 .3277 ,31139 .543 .4617 .3171 .7065 .97817 2. 0. 0. 4. 2. 1. 0. 0 .4239 .94701 .40935 .5845 .8996 .4278 .43696 .17242 bn = 22.137 21.718 21.192 21.472 21.957 21.185 23.006 21.42 en = 0. 0. 0. 0. 0, 0. 0 0 123 ,125 .128 .127 .124 .128 .118 .127 Как следует из приведенных таблиц, центры кластеризации распределились по восьми областям, показанным на рис. 7.4, а; смещения отклонились в обе стороны от исходного значения 21.746 так же, как и параметры активности нейронов, показанные на рис. 7.4,0. с s А ^ 3 СЬ . о- ~ 2 "-Г1" , 1 '. , О "/" '-"* '. 1 'А *3. V/ J 4*V л% 2 0^- 8 1 1 " * ^^1 В№орГ|ССДО rv * \ t *\ ^ \ ■—*-—— v^4^- 5 / v О "' / у/ ♦* / 6 *^"^ Г + о* ^ \ *■ ^"^ Ч/ \ * \ 7 \ ... з~-!*:«*?* а б Рис. 7.4 Рассмотренная самонастраивающаяся сеть Кохонена является типичным примером сети, которая реализует процедуру обучения без учителя. Демонстрационный пример democl также поясняет процедуру обучения самоорганизующейся сети. 7.1.2. Карта Кохонена Самоорганизующаяся сеть в виде карты Кохонена предназначена для решения задач кластеризации входных векторов. В отличие от слоя Кохонена карта Кохонена поддерживает такое топологическое свойство, когда близким кластерам входных векторов соответствуют близко расположенные нейроны. Первоначальная топология размещения нейронов в слое Кохонена задается М-функ- циями gridtop, hextop или randtop, что соответствует размещению нейронов в узлах либо прямоугольной, либо гексагональной сетки, либо в узлах сстки со случайной топологией. Расстояния между нейронами вычисляются с помощью специальных функций вычисления расстояний dist, boxdist, linkdist и mandist. Карта Кохонена для определения нейрона-победителя использует ту же процедуру, какая применяется и в слое Кохонена. Однако на карте Кохонена одновременно изменяются весовые коэффициенты соседних нейронов в соответствии со следующим соотношением, именуемым правилом Кохонена: " «55 7. Сети кластеризации и классификации данных
(w(4) = (l~or),w(g-l) + ap(q). (7-7) В этом случае окрестность нейрона-победителя включает все нейроны, которые находятся в пределах некоторого радиуса d: ЛГД</) = Ц </,<</}. (7-8) Чтобы пояснить понятие окрестности нейрона, обратимся к рис. 7.5. © © О © © © ©-©-© © © ©y©s© © © © © © © © © ©ч©*ч® © © © © © .у1) Л' (2) Рис. 7.5 (7.9) Левая часть рисунка соответствует окрестности радиуса 1 для нейрона-победителя с номером 13; правая часть - окрестности радиуса 2 для того же нейрона. Описания этих окрестностей выглядят следующим образом: [ВД) = {8,12,13,14,18}; [ЛГ13(2) = {3,7,8,9,11,12,13,14,15,17,18,19,23}. Заметим, что топология карты расположения нейронов не обязательно должна быть двумерной. Это могут быть и одномерные и трехмерные карты, и даже карты больших размерностей. В случае одномерной карты Кохонена, когда нейроны расположены вдоль линии, каждый нейрон будет иметь только двух соседей в пределах радиуса 1 или единственного соседа, если нейрон расположен на конце линии. Расстояния между нейронами можно определять различными способами, используя прямоугольные или гексагональные сетки, однако это никак не влияет на характеристики сети, связанные с классификацией входных векторов. Топология карты Как уже отмечалось выше, можно задать различные топологии для карты расположения нейронов, используя М-функции gridtop, hextop, randtop. Рассмотрим простейшую прямоугольную сетку размера 2x3 для размещения шести нейронов, которая может быть сформирована с помощью функции gridtop: pos = gridtop(2,3) pos = 0 10 10 1 0 0 112 2 plotsom(pos) % Рис.7.6 Соответствующая сетка показана на рис. 7.6. Метки positkm(l, i) и position(2, i) вдоль координатных осей генерируются функцией plotsom и задают позиции расположения нейронов по первой, второй и т. д. размерностям карты. 156 Нейронные сети. MATLAB 6
Карта размещения нейринов S , -, ' 1 ' 1 1 : 5 ; б : '< з ■ а ] __ ... ... ..., .._ — .,—л---_ : 1 : 2 : D.5 positional ,i) Рис. 7.6 Здесь нейрон 1 расположен в точке с координатами (0,0), нейрон 2 - в точке (1,0), нейрон 3 - в точке (0,1) и т. д. Заметим, что, если применить команду gridtop, переставив аргументы местами, получим иное размещение нейронов: роз = gridtop(3,2) pos = 0 12 0 12 0 0 0 111 Гексагональную сетку можно сформировать с помощью функции hextop: pos = hextop(2,3) pos = 0 1.0000 0.5000 1.5000 0 1.0000 0 0 0.8660 0.8660 1.7321 1.7321 plotsom(pos) % Рис.7.7 ■ 1.6 .14 12 •:g'-J.i I ¥ О 0.6 0.4 0.2 0 5 1 ; -Карта-размещениянейронов- : ■;.. ,' 3] 6/ L i /2 0.5 ,1 positional ,i) •1.5 РИС. 7.7 Заметим, что М-функпия hextop используется по умолчанию при создании карт Кохо- нена при применении функции newsom. Сетка со случайным расположением узлов может быть создана с помощью функции randlop: 7. Сети кластеризации и классификации данных 157
-$ pos = randtop(2,3) pos = 0.061787 0.64701 0 0.12233 plotsom(pos) % Рис.7.8 0.40855 0.90438 0.94983 ■ 0.54745 0 1.4015 0.65113 1.5682 I J.6 1.4 b 1.2 -=. 1 .1 0.B О " * ' . о-0.6 > 6л "ч 0.2 ... о ;."--о;5- Карта размещения нейронов 0.5 , 'розй1ап(1 ;i} ;*'- V:-2 .1.5 Рис. 7.8 Функции для расчета расстояний /- В ПГШ NNT используется 4 функции для расчета расстояний между узлами сетки..;\ Функция dist вычисляет евклидово расстояние между нейронами, размещенными/-: в узлах сетки, в соответствии с формулой d - sqrt(sum(( pos f - pos i ).Л2)), (7.10) .- где pos,-, pos,- - векторы положения нейронов с номерами / и j. Обратимся к прямоугольной сетке из шести нейронов (см. рис. 7.6) и вычислим соот-/; ветствующий массив расстояний: pos = gridtop(2 d = dist(pos) d = 0 l l 1.4142 2 2.2361 ,3).; 1 0 1.4142 1 2.2361 2 1 1.4142 0 1 1 1.4142 1.4142 1 1 0 1.4142 1 2 2.2361 1 1.4142 0 1 2.2361 2 1.4142 1 1 0 Этот массив размера бхб описывает расстояния между нейронами и содержит на диагонали нули, поскольку они определяют расстояние нейрона до самого себя, а затем, двигаясь вдоль строки, - до второго, третьего и т. д. На рис. 7.9 показано расположение нейронов в узлах прямоугольной сетки. Введем понятие окрестности для прямоугольной сетки. В этом случае окрестность размера 1, или > просто окрестность 1, включает базовый нейрон и его непосредственных соседей; окрестг ность 2 включает нейроны из окрестности 1 и их соседей. 158 Нейронные сети. MATLAB 6 I зи пр 7. Прямоугольный слой f ^ - Столбцы р*|. оооооооооо 00 оо оо оо 00 оо оо ЖЮЮЖЖ 1 S Й ОООО'.О о р. 0 ооо о •'о ооо о 0 о 6#0'.О.ОчО 3 S а а 8 Ьюззгаш 0 0 0 о 0 0 0 Базовый нейрон Окрестность I Окрестность 2 Окрестность 3 ОООООООООО ОООООООООО Рис. 7.9 Размер, а соответственно и номер окрестности, определяется максимальным значен и- ем координаты смещения нейрона от базового. Вводимое таким способом расстояние между нейронами называется расстоянием максимального координатного смещения и может быть вычислено по формуле d - max(abs(pos/ - pos^)), (7.11) где pas,-, pos,- - векторы положения нейронов с номерами i и j. Для вычисления этого расстояния в ППП NNT предназначениа М-функция boxdist. Для конфигурации нейронов, показанной на рис. 7.6, эти расстояния равны: pos « gridtop(2,3); = boxdist(pos) Расстояние максимального координатного смещения между базовым нейроном 1 и нейронами 2,3 и 4 равно 1, поскольку они находятся в окрестности 1, а расстояние между базовым нейроном и нейронами 5 и б равно 2, и они находятся в окрестности 2. Расстояние максимального координатного смещения от нейронов 3 и 4 до всех других нейронов равно 1. Определим другое расстояние между нейронами, которое учитывает то количество связей, которое необходимо установить, чтобы задать путь движения от базового нейрона. Если задано S нейронов, положение которых определяется векторами р„ i = 1, ..., 5, то расстояние связи между ними определяется соотношением 1, distfoos, - pos.) < 1; 2, Vk,dik=d^\; ^^ 3, V(fc,, k2), dikt = dk^ = dkd = 1; Nt V(*„V.*„), rfftj =dk>k2 =... = dkNJ=\; S, в остальных случаях. Если евклидово расстояние между нейронами меньше или равно 1, то расстояние связи принимается равным 1; если между нейронами с номерами i nj имеется единственный Промежуточный нейрон с номером к, то расстояние связи равно 2, и т. д. d,. 7. Сети кластеризации и классификации данных 159
Для вычисления расстояния связи в ГШП NNT предназначена функции linkdist. Для конфигурации нейронов, показанной на рис. 7.6, эти расстояния равны: pos = gridtop(2,3); = linkdist(pos) Расстояние связи между базовым нейроном 1 и нейронами 2,3 равно 1, между базовым нейроном и нейронами 4 и 5 равно 2, между.базовым нейроном и нейроном 6 равно 3. Наконец, определим расстояние максимального координатного смещения по формуле d = sum(abs( pos -t - pos i)), (7.13) где pos,-, pos,- - векторы расположения нейронов с номерами / nj. Для вычисления расстояния максимального координатного смещения в ППП NNT предназначена функции mandist. Вновь обратимся к конфигурации нейронов на рис. 7.6: pos = gridtop(2,3); d = mandist(pos) d = В случае прямоугольной сетки оно совпадает с расстоянием связи. Архитектура сети Архитектура самоорганизующейся карты Кохонена показана на рис. 7.10. Вход Карта Кохонеш ISlxK ^ — Ы li nclist III " ► Л >c J n' = - II IW" - p II i i a: = compcttV) Рис. 7.10 Эта архитектура аналогична структуре слоя Кохонена за исключением того, что здесь не используются смещения. Конкурирующая функция активации возвращает 1 для элемента выхода а1, соответствующего победившему нейрону; все другие элементы вектора а1 равный 160 Нейронные сети. MATLAB 6
Однако в сети Кохонена выполняется перераспределение нейронов, соседствующих о победившим нейроном. При этом можно выбирать различные топологии размещения нейронов и различные меры для вычисления расстояний между нейронами. Создание сети Для создания самоорганизующейся карты Кохонена в составе ППП NNT предусмотрена М-функция newsom. Допустим, что требуется создать сеть для обработки двухэлементных векторов входа с диапазоном изменения элементов от 0 до 2 и от 0 до I соответственно. Предполагается использовать гексагональную сетку размера 2x3. Тогда для формирования такой нейронной сети достаточно воспользоваться оператором net = newsom([0 2; 0 1], [2 3]); net.layers{l} dimensions: distanceFcn: distances: initFcn: netlnputFcn: positions: size: topologyFcn: transferFen: userdata: [2 3] 1linkdist' [6x6 double] 1initwb' 'netsum' [2x6 double] 6 'hextop' "compet' [1x1 struct] Из анализа характеристик этой сети следует, что она использует по умолчанию гексагональную топологию hextop и функцию расстояния linkdist. Для обучения сети зададим следующие 12 двухэлементных векторов входа: Р = [0.1 0.3 1.2 1.1 1.8 1.7 0.1 0.3 1.2 1.1 1.8 1.7; ... 0.2 0.1 0.3 0.1 0.3 0.2 1.8 1.8 1.9 1.9 1.7 1.8]; Построим на топографической карте начальное расположение нейронов карты Кохонена и вершины векторов входа (рис. 7.11): plotsom(net.iw{1,1},net.layers{1}.distances) hold on plot(P(l,:),P(2,:),•♦k','markersize',10) IB , ,E ы ■=■1.3 a. "■ t --*-- • * : г ' W(..1).P(1.} u и (.6 is Рис. 7.11 7. Сети кластеризации и классификации данных 161
Векторы входа помечены символом * и расположены по периметру рисунка, а начальное расположение нейронов соответствует точке с координатами (1,0.5). Обучение сети Обучение самоорганизующейся карты Кохонена реализуется повскторно независимо от того, выполняется обучение сети с помощью функции trainwbl или адаптация с помощью функции adaptwb. В любом случае функция Icamsom выполняет настройку элементов весовых векторов нейронов. Прежде всего определяется нейрон-победитель и корректируются его вектор весов и векторы весов соседних нейронов согласно соотношению dW=/r*A2*(p'-w), (7.14) где Jr - параметр скорости обучения; А2 - массив параметров соседства для нейронов, расположенных в окрестности нейрона-победителя i, который вычисляется по соотношению X a(i,q)~l; A2(i,q) = 10.5, a(j,q) = 1 & D(i,j) < nd; C7-15) 0, в остальных случаях, где a(i, q) - элемент выхода нейронной сети; D(i, j) -расстояние между нейронами i uj; nd~ размер окрестности нейрона-победителя. В соответствии с соотношениями (б. 14) и (6.15) весовые векторы нейрона-победителя и соседних нейронов изменяются в зависимости от значения параметра соседства. Веса нейрона-победителя изменяются пропорционально параметру скорости обучения, а веса соседних нейронов - пропорционально половинному значению этого параметра. Процесс обучения карты Кохонена включает 2 этапа: этап упорядочения векторов весовых коэффициентов в пространстве признаков и этап подстройки. При этом используются следующие параметры обучения сети: Параметры обучения и настройки карты Кохонена Количество циклов обучения Количество циклов на этапе упорядочения Параметр скорости обучения на этапе упорядочения Параметр скорости обучения на этапе подстройки Размер окрестности на ■ этапе подстройки net.trainParam.epochs net.inputWeights{1,1 }.learnParam,order_steps net.inputWeights{1,1 ].learnParam.orderJr net.inputWeights{1,1}.learnParam.tuneJr neUnputWeights{1,1 }.leamParam.tune_nd N S orderjr tunejr tune_nd Значение nt умолчанию >1000 1000 0.9 0.02 1 В процессе построения карты Кохонена изменяются 2 параметра: размер окрестности и параметр скорости обучения. Этап упорядочения. На этом этапе используется фиксированное количество шагов. Начальный размер окрестности назначается равным максимальному расстоянию между 162 Нейронные сети. MATLAB 6
нейронами для выбранной топологии и затем уменьшается до величины, используемой на этапе подстройки в соответствии со следующим правилом: nd =1.00001 + (max(tf) -1)0 --), (7.16) О где maxM) - максимальное расстояние между нейронами; j - номер текущего шага. Параметр скорости обучения изменяется по правилу /г = tune _lr + (order _lr- tune _/r)(l ). (7.17) Таким образом, он уменьшается от значения orderJr до значения tune Jr. Этап подстройки. Этот этап продолжается в течение оставшейся части процедуры обучения. Размер окрестности на этом этапе остается постоянным и равным nd = tune _nd + 0.00001. (7.18) Параметр скорости обучения изменяется по следующему правилу: lr=tune_lr-. (7.19) s Параметр скорости обучения продолжает уменьшаться, но очень медленно, и именно поэтому этот этап именуется подстройкой. Малое значение окрестности и медленное уменьшение параметра скорости обучения хорошо настраивают сеть при сохранении размещения, найденного на предыдущем этапе. Число шагов на этапе подстройки должно значительно превышать число шагов на этапе размещения. На этом этапе происходит тонкая настройка весов нейронов по отношению к набору векторов входа. Как и в случае слоя Кохонена, нейроны карты Кохонена будут упорядочиваться так, чтобы при равномерной плотности векторов входа нейроны карты Кохонена также были распределены равномерно. Если векторы входа распределены неравномерно, то и нейроны на карте Кохонена будут иметь тенденцию распределяться в соответствии с плотностью размещения векторов входа. Таким образом, при обучении карты Кохонена решается не только задача кластеризации входных векторов, но и выполняется частичная классификация. Выполним обучение карты Кохонена размера 2x3 с гексагональной сеткой и с мерой, определяемой расстоянием связи net - newsom([0 2; О 1], [2 3)); Для обучения сети зададим 12 двухэлементных векторов входа Р = [0.1 0.3 1.2 1.1 1.8 1.7 0.1 0.3 1.2 1.1 1.8 1.7; ... 0.2 0.1 0.3 0.1 0.3 0.2 1.8 1.8 1.9 1.9 1.7 1.8]; Зададим количество циклов обучения равным 2000: net.trainParam.epochs = 2000; net.trainParam.show = 100; net = train(net,P); plot(P(l,:),P(2,:),•*','markersize',10) hold on plotsom(net-iw{l,1},net.layers{1}.distances) 7. Сети кластеризации и классификации данных 163
Результат обучения представлен на рис. 7.12. Топогргфи-ледоя юрм О 02 01 06 D-3 1 .1? ».* 16 18 2 VAJ.4,Pf1.0 Рис. 7.12 Положение нейронов и их нумерация определяются массивом весовых векторов, который для данного примера имеет вид: net.IW{l} 1.2163 0.73242 1.0645 0.4551 1.5359 1.0888 0.20902 0.46577 0.99109 1.3893 1.8079 1.8433 Если промоделировать карту Кохонена на массиве обучающих векторов входа, то бу- дет получен следующий выход сети: а = sim{net1 а = (2,1) (2,2) (1,3) (1.4) 11,5) (1,6) (4,7) (4,8) (6,9) (6,10) (5,11) (5,12) гР) 1 1 1 1 1 1 1 1 1 1 1 1 Это означает, что векторы входов 1 и 2 отнесены к кластеру с номером 2, векторы 3-6 - к кластеру 1, векторы 7-8 ~ к кластеру 4, векторы 9-10 - к кластеру 6, а векторы 11-12- к кластеру 5. Номер кластера на рисунке соответствует номеру соответствующего нейрона на карте Кохонена. Если сформировать произвольный вектор входа, то карта Кохонсна должна указать его принадлежность к тому или иному кластеру: 164 Нейронные сети. MATLAB 6
a = sim(net,[1.5; 1]) a = (3,1) 1 В данном случае представленный вектор входа отнесен к кластеру с номером 3. Обратите внимание, что векторов такого сорта в обучающей последовательности не было. Рассмотрим еще 2 примера одномерной и двумерной карт Кохонена. Одномерная карта Кохонена Рассмотрим 100 двухэлементных входных векторов единичной длины, распределенных равномерно в пределах от 0 до 90°: angles = 0:0.5*pi/99:0.5*pi; Р ~ [sin(angles); cos(angles)]; plot<P(1,1:10 tend), F<2,1:10:end),■*b'), hold on График входных векторов приведен на рис. 7.13, а, и на нем символом * отмечено положение каждого 10-го вектора. цу»ду.д»п - ., . -„■_ -: ,. ^ распрвделенке'вйсгсров ш> 'мастерам а б Рис. 7.13 Сформируем самоорганизующуюся карту Кохонена в виде одномерного слоя из 10 нейронов и выполним обучение в течение 2000 циклов: net = newsom([О 1;0 1], [10]); net.trainParam.epochs = 2000; net.trainParam.show = 100; [net, tr] = train(net,P); plotsom(net.IW{1,1},net.layers{l}.distances) % Рис.7.13,a figure(2) a = sim(net,P); bar(sum(a1)) % Рис.7.13,б Весовые коэффициенты нейронов, определяющих центры кластеров, отмечены на рис. 7.13, а цифрами. На рис. 7.13, б показано распределение обучающих векторов по кластерам. Как и ожидалось, они распределены практически равномерно с разбросом от 8 до 12 векторов в кластере. Таким образом, сеть подготовлена к кластеризации входных векторов. Определим, к какому кластеру будет отнесен вектор [1; 0]: 7. Сети кластеризации и классификации данных 165
*fc a = sim(net,[1;0]) а = (10,1) 1 Как и следовало ожидать, он отнесен к кластеру с номером 10. Двумерная карта Кохонена Этот пример демонстрирует обучение двумерной карты Кохонена. Сначала создадим обучающий набор случайных двумерных векторов, элементы которых распределены по равномерному закону в интервале [-1 1 ]: Р = rands(2,1000); plot(P(l, :) ,Р{2, :) ,' + ') % Рис.7.14 Начальное распределение векторов'входа 1 " "■' * '■ Рис. 7.14 Для кластеризации векторов входа создадим самоорганизующуюся карту Кохонена размера 5хб с 30 нейронами, размещенными-на гексагональной сетке: net = newsom{[-1 1; -1 1],[5,б]); net.trainParam.epochs = 1000; net.trainParam.show = 100; net = train(net,P); plotsom(net .IW{1,,1}, net .layers {1} .distances) Результирующая карта после этапа размещения показана на рис. 7.15, а. Продолжим.- обучение и зафиксируем карту после 1000 шагов этапа подстройки (рис. 7.15, б), а затем после'4000 шагов (рис. 7.15, е). Нетрудно убедиться, что нейроны карты весьма равномерно покрывают область векторов входа. ■:.- ь Кэрга Кохонена посла 1ОО0 шагов-, (завершение этапа рлзилщлцн*у"\ K*jhi tCffiannnfaubj SttD 166 Нейронные сети. MATLAB 6
Определим принадлежность нового вектора к одному из кластеров карты Кохонсна и построим соответствующую вершину вектора на рис. 7.15, в: а = sim(net,[0.5;0.3]) а = (19,1) 1 hold on, plot(0.5,0.3,'*k') % Рис.7.15,в Нетрудно убедиться, что вектор отнесен к 19-му кластеру. Промоделируем обученную карту Кохонсна, используя массив векторов входа: а = sim(net,P); bar(sum(a')) % Рис.7.16 Из анализа рис. 7.16 следует, что количество векторов входной последовательности, отнесенных к определенному кластеру, колеблется от 13 до 50. РюфщмаиДОДОга» M.axwpiH ашшяив Рис. 7.16 Таким образом, в процессе обучения двумерная самоорганизующаяся карта Кохонена выполнила кластеризацию массива векторов входа. Следует отметить, что на этапе размещения было выполнено лишь 20 % от общего числа шагов обучения, т. е. 80 % общего времени обучения связано с тонкой подстройкой весовых векторов. Фактически на этом этапе выполняется в определенной степени классификация входных векторов. Слой нейронов карты Кохонена можно представлять в виде гибкой сетки, которая натянута на пространство входных векторов. В процессе обучения карты, в отличие от обучения слоя Кохонсна, участвуют соседи нейрона-победителя, и, таким образом, топологическая карта выглядит более упорядоченной, чем области кластеризации слоя Кохонена. Читатель может продолжить изучение самоорганизующихся сетей, обратившись к демонстрационным программам demosml и demosm2. 7.2. LVQ-сети Ниже рассматриваются сети для классификации входных векторов, или LVQ (Learning Vector Quantization)-cera. Как правило, они выполняют и кластеризацию и классификацию векторов входа. Эти сети являются развитием самоорганизующихся сетей Кохонена [23]. По команде help lvq можно получить следующую информацию об М-функциях, входящих в состав ППП Neural Network Toolbox и относящихся к построению LVQ-сетей: 7. Сети кластеризации и классификации данных 167
Learning Vector Quantization New networks newlvq Using networks sim init adapt train Weight functions negdist dotprod Net input functions netsum Transfer functions compet purelin Performance functions mse initialization functions initlay initwb midpoint Learning functions Iearnlvl learnlv2 Adapt functions adapt Training functions train r Demonstrations demolvql Сети для классификации векторов Формирование сети Создание сети для классификации входных векторов Работа с сетью Моделирование Инициализация Адаптация Обучение Операции с весовой функцией Функция отрицательного расстояния Скалярное произведение Операции над входами Суммирование Функции активации Конкурирующая Линейная Функции погрешности обучения Среднеквадратичная ошибка обучения Функции инициализации сети Послойная инициализация Инициализация весов и смещений Инициализация весов по правилу средней точки Функции настройки параметров Функция настройки lvl Функция настройки lv2 Функции адаптации Адаптация весов и смещений Функции обучения Повекторное обучение весов и смещений Демонстрационные примеры Пример классификации векторов Архитектура сети Архитектура LVQ-сети, предназначенной для классификации входных векторов, показана на рис. 7.17. Вход Конкурирующий слой Линейный слой Г—N Г 1о 1VV" л 1 ' Ь ■ ;;>< * 1 хК 1 г-п 1 11 nji&t ■! п1 = - 1М а1 = corn .«■XI > W- -pi pi'tiu') (J —N t— •\ 1 1 ОТ a ь 5-xl P "A r.wJ' = pui , S'-r'i diiidAV- У / s- 'a5) S-'xl Рис. 7.17 168 Нейронные сети. MATLAB 6
'W LVQ-сеть имеет 2 слоя: конкурирующий и линейный. Конкурирующий слой выполняет кластеризацию векторов, а линейный слой соотносит кластеры с целевыми классами, заданными пользователем. Как в конкурирующем, так и в линейном слое приходится 1 нейрон на кластер или целевой класс. Таким образом, конкурирующий слой способен поддержать до S1 кластеров; эти кластеры, в свою очередь, могут быть соотнесены с S" целевыми классами, причем ^не превышает S1. Например, предположим, что нейроны 1-3 конкурирующего слоя определяют 3 кластера, которые принадлежат к одному целевому классу #2 линейного слоя. Тогда выходы конкурирующих нейронов 1—3 будут передаваться в линейный слой на нейрон п с весами, равными 1, а на остальные нейроны с весами, равными 0. Таким образом, нейрон п2 возвращает 1, если любой из трех нейронов 1-3 конкурирующего слоя выигрывает конкуренцию. Короче говоря, единичный элемент в i-й строке вектора а1 (остальные элементы а1 нулевые) однозначно выберет t-й столбец матрицы весов LW21 в качестве выхода сети. При этом каждый столбец, в свою очередь, содержит единственный элемент, равный 1, который указывает принадлежность к классу. Таким образом, кластер с номером 1 из слоя 1 может оказаться отнесенным к различным классам в зависимости от значения произведения LW^a1. Поскольку заранее известно, как кластеры первого слоя соотносятся с целевыми классами второго слоя, то это позволяет заранее задать элементы матрицы весов LW21. Однако чтобы найти правильный кластер для каждого вектора обучающего множества, необходимо выполнить процедуру обучения сети. Создание сети В ППП NNT для создания LVQ-сетей предусмотрена М-функция newlvq, обращение к которой имеет следующий вид: net = newlvq(PR,SI,PC,LR,LF) где PR- массив размера Rx2 минимальных и максимальных значений для R элементов вектора входа; S1 — количество нейронов конкурирующего слоя; PC—вектор с 5> элементами, определяющими процентную долю принадлежности входных векторов к определенному классу; LR- параметр скорости настройки (по умолчанию 0.01); LF- имя функции настройки (по умолчанию для версии MATLAB 5 - '1еагщу2', для версии MATLAB 6 - 'leamlvl'). Предположим, что задано 10 векторов входа и необходимо создать сеть, которая, во-первых, группирует эти векторы в 4 кластера, а во-вторых, соотносит эти кластеры с одним из двух выходных классов. Для этого следует использовать LVQ-сеть, первый конкурирующий слой которой имеет 4 нейрона по числу кластеров, а второй линейный слой - 2 нейрона по числу классов. Зададим обучающую последовательность в следующем виде: Р = [-3 -2-2 0 0 О 0 2 2 3; 0 1-12 1-1-21-10]; Тс = [1112222111]; Из структуры обучающей последовательности следует, что 3 первых и 3 последних ее вектора относятся к классу 1, а 4 промежуточных — к классу 2. На рис. 7. ] 8 показано расположение векторов входа. II = find(Tc==l); 12 = find(Tc==2)? axis{[-4,4,-3,3]), hold on 7. Сети кластеризации и классификации данных ' 169
plot(P(l,Il),P(2fIl),'+k') plot(P(l,l2),P(2,I2),'xb') % Рис.7.18 Распределение еекгоров входа по классам 3 2 1 О- р2 + Pi + рз р4 <& рб 0 р7 р8 -г р10 -г р9 ' ■• -4 -2 - 0 2. 4 - • . Рис. 7.18 Векторы, относящиеся к разным классам, отмечены разными символами. Как следует из расположения векторов, классы не являются линейно отделимыми, и задача не может быть решена с использованием, например, персептрона. Преобразуем вектор индексов Тс в массив целевых векторов: Т = £ull(ind2vec(Tc)) т = 1110000111 0001111000 Процентные доли входных векторов в каждом классе равны 0.6 и 0.4 соответственно. Теперь подготовлены все данные, необходимые для вызова функции л ewlvq. Вызов может быть реализован с использованием следующего оператора net = newlvq{minmax(P),4,[.б .4],0.1); net.layers{1} ans = dimensions: distanceFcn: distances: initFcn: netlnputFcn: positions: size: topologyFcn: transferFcn: userdata: ■dist' [4x4 double] 1initwb" 'netsum' [0 12 3] 4 •hextop' ■compet' [lxl struct] net.layers{2} ans = dimensions: distanceFcn: distances: initFcn: netlnputFcn: positions: size: topologyFcn: transferFcn: userdata: 'disc' [2x2 double] 'initwb' "netsum* [0 1] 2 1hextop' 'purelin' [lxl struct] Обучение сети Правила настройки параметров Правило LVQ1. LVQ-сеть обучается на основе множества пар вход/выход, составленных из элементов обучающей последовательности {Р, Т}: {Pi»ti}.{P2.t2}»-»ta'teb (7.20) 170 Нейронные сети. MATLAB б
Каждый целевой вектор имеет единственный элемент, равный 1, а остальные равны 0. Для обучения сети необходимо задать вектор входа р, и тогда в конкурирующем слое будет выполнена настройка элементов матрицы весов IWn. Предположим, что весовые коэффициенты нейрона i * наиболее близки к вектору входа р и нейрон i* выигрывает конкуренцию. Тогда конкурирующая функция активации возвращает 1 в качестве элемента г* вектора а1, причем все другие элементы а1 равны 0. Во втором, линейном слое произведение LW" а выделяет некоторый столбец матрицы LW21 и связанный с ним класс к*. Таким образом, сеть связывает вектор входа р с классом к*. Это назначение может оказаться либо правильным, либо ошибочным. Поэтому в процессе обучения необходимо откорректировать строку /* матрицы IWn таким образом, чтобы приблизить се к вектору р, если назначение правильное, и удалить от вектора р, если назначение неправильное. Основываясь на этих рассуждениях, можно сформулировать правило LVQ1 для настройки параметров сети: |..IWU(?)= rmU(q-l) + lr{p(q)-,Wll(q~\)), 4 =V Bl: (7 21) [,IW%)= rm"(q-l)~lrip{q)-rmu{q-\i), («J =1)*(V =0). Это правило гарантирует, что при правильной классификации нейрон-победитель приближается к векторам входа, а при неправильной классификации удаляется от них. Правило LVQ2. Это правило предназначено для того, чтобы улучшить настройку параметров сети после применения стандартной процедуры LVQ1. Вариант, реализованный в версии MATLAB 6, известен в литературе [23] как LVQ2.1, и именно он положен в основу алгоритма learnlv2. Правило LVQ2 во многом схоже с правилом LVQ1, за исключением лишь того, что в соответствии с правилом LVQ2 корректируется 2 весовых вектора, ближайших к входному; причем один из них должен быть классифицирован как правильный, а второй - нет. Введем следующие понятия, чтобы дать количественную оценку свойства близости векторов. Пусть величины dt и dj обозначают евклидовы расстояния вектора р от соответствующих строк г* и./* весовой матрицы IW11, причем строка./* принадлежит к области в пространстве признаков, соответствующей требуемому классу, а строка i* не принадлежит. Если выполняется условие min|-4 — > 0.5-0.7, (7-22) то корректировка производится и правило настройки соответствующих весовых векторов выглядит следующим образом: fi,IW11(^)= rmll(q-l) + lr(p{q)-,mU(q-l)); ' [fmu(q)^ ,mu(q~l)-lr\p(q)-rYWn(q-\)j. Процедура обучения Для удобства работы с текстом повторим операторы задания обучающей последовательности и формирования LVQ-сети Р = [-3 -2 -2 О О О 0 2 2 3,- 0 1-12 1-1-21-1 0]; Тс = [1112 2 2 2 111],- Т = full(ind2vec(Tc))j 7. Сети кластеризации и классификации данных 171
Выполним синтез LVQ-сети: net = newlvq(minmax(P) ,4, [ .6 .4]); net.inputWeights{1} ans = delays: 0 initFcn: 'midpoint' learn: 1 learnFcn: ' learnlv2.' learnParam: [lxl struct] size: [4 2] userdata: [1x1 struct] weightFcn: 'negdist' Для обучения сети применим М-функцию train, задав количество циклов обучения равным 2000, и значение параметра скорости обучения 0.05: net.trainParam.epochs = 2000; net.trainParam.show = 100; net.trainParam.lr = 0.05; net = train(net,P,T); В результате обучения получим следующие весовые коэффициенты нейронов конкурирующего слоя, которые определяют положения центров кластеризации: V = net.IW{l,l} V = -2.3639 0.0074775 2.3461 0.033489 0 -1.4619 0 1.4731 Построим картину распределения входных векторов по кластерам (рис. 7.19): II = find(Tc==l); 12 = find(Tc==2); axis([-4,4,-3,3]), hold on PI = P(:,I1); P2 = P(:,I2); plot(Pl{l,:),Pl(2,:),'+k') plot{P2(l,:),P2(2,:), 'ads') plot(V(:,1),V(:,2),'or') % Рис.7.19 Распределение входных векторов по кластерам;, J'':-\- + О 1 4 С 3 О + Р1 к Р2 О V о + 2 Рис. 7.19 172 Нейронные сети. MATLAB 6
В свою очередь, массив весов линейного слоя указывает, как центры кластеризации распределяются по классам: net.LW{2> ans = 110 0 0 0 11 Нетрудно видеть, что обучение сети выполнено правильно. Чтобы проверить функционирование сети, подадим на ее вход массив обучающих векторов Р: У = sim(net,F) Yc = vec2indCY) Ус =1112222111 Результат подтверждает, что классификация выполнена правильно. Теперь построим границу, разделяющую области точек, принадлежащих к двум классам. Для этого покроем сеткой прямоугольную область и определим принадлежность каждой точки к тому или иному классу. Текст соответствующего сценария и вспомогательной М-функции приведен ниже function P = mesh2P(x,y) % Вычисление массива координат прямоугольной сетки [X,Y] = meshgrid{x,y); Р = cat(3,X,Y); [nl,n2,n3] = size{P); Р = permute(F, [3 2 1]) ; Р = reshape(P, [n3 nl*n2]); Результат работы этого сценария представлен на рис. 7.20. Здесь же отмечены вычисленные ранее центры кластеризации для синтезированной LVQ-сети. Анализ рисунка подтверждает, что граница между областями не является прямой линией. Распределение точек области по'классам з,- ;«..=;. ■-•-., .. х = -4:0.2:4; у = -3:0.2:3; Р = mesh2P(x,y); Y = sim(net,P); Ус = vec2ind(Y); II ~ find<Yc==l); 12 = find(Yc==2); plot(P(l,Il),P(2,Il), '+k'b hold on plottP{l,l2),P(2,I2),'*b'J % Рис.7.20 :::::::;©::::::: i!-: о'- ■if- -2|- <> .O:: ::a: Рис. 7.20 Наряду с процедурой обучения можно применить и процедуру адаптации в течение 200 циклов для 10 векторов, что равносильно 2000 циклам обучения с использованием функции train: net.adaptparam.passes = 200; 7. Сети кластеризации и классификации данных 173
Обучающая последовательность при использовании функции adapt должна быть представлена в виде массивов ячеек: Pseq = con2seq(P); Tseq = con2seq(T); net = adapt(net,Pseq,Tseq); net.IW{l,l} ans = -2.3244 -0.0033588 2.3311 -0.0033019 -0.0003663 1.4704 -0.0003663 -1.4754 Промоделируем сеть, используя массив входных векторов обучающей последовательности: Y = sim(net,P); Ус = vec2ind(Y) Ус =11 12222111 Результаты настройки параметров сети в процессе адаптации практически совпадают с результатами обучения. Единственное, что можно было бы напомнить при этом, что при обучении векторы входа выбираются в случайном порядке и поэтому в некоторых случаях обучение может давать лучшие результаты, чем адаптация. Можно было бы и процедуру адаптации реализовать с использованием случайной последовательности входов, например следующим образом: сформируем 2000 случайных векторов и выполним лишь 1 цикл адаптации: TS = 2000; ind = floor(rand(l,TS)*size(P,2))+l; Pseq в con2seq(P(:,ind)); Tseq в con2seq(T(:,ind)); net.adaptparam.passes = 1} net a adapt(net,Pseq,Tseq); nefc.IW{l,l} У = Ус 2.354 -2.362 0 0 sim(net,P); = vec2ind(Y) -0 -0 061991 .093345 -1.4834 1.4539 Yc = В результате получаем LVQ-сеть, подобную тем, которые были получены ранее с помощью процедур обучения и адаптации. Читатель может продолжить изучение LVQ-сетей, обратившись к демонстрационной программе demolvql. 174 Нейронные сети. MATLAB 6
8. РЕКУРРЕНТНЫЕ СЕТИ В этой главе рассматриваются 2 типа рекуррентных нейронных сетей, представляющих наибольший интерес для пользователей, - это класс сетей Элмана (Elman) и класс сетей Хопфилда (Hopfield). Характерной особенностью архитектуры рекуррентной сети является наличие блоков динамической задержки и обратных связей. Это позволяет таким сетям обрабатывать динамические модели. Обратимся к описанию конкретных типов рекуррентных нейронных сетей. 8.1. Сети Элмана Сеть Элмана - это сеть, состоящая из двух слоев, в которой скрытый слой охвачен динамической обратной связью. Это позволяет учесть предысторию наблюдаемых процессов и накопить информацию для выработки правильной стратегии управления. Сети Элмана применяются в системах управления движущимися объектами, при построении систем" технического зрения и в других приложениях. В качестве первоисточника следует рекомендовать статью Элмана [10]. По команде help elman можно получить следующую информацию об М-функциях, входящих в состав ППП Neural Network Toolbox и относящихся к построению сетей Элмана: Elman recurrent networks New networks newelm Using networks sim init adapt train Weight functions dotprod ddotprod Net input functions netsum dnetsum Transfer functions purelin tansig logsig dpurelin dtansig diogsig Performance functions mse msereg dmse Рекуррентные сети Элмана Формирование сети. Создание сети Элмана Работа с сетью Моделирование Инициализация Адаптация Обучение Функции взвешивания Скалярное произведение Производная скалярного произведения Функции накопления Сумма взвешенных входов Производная суммы взвешенных входов Функции активации Линейная Гиперболический тангенс Логистическая Производная линейной функции Производная гиперболического тангенса Производная логистической функции Функции оценки качества сети Среднеквадратичная ошибка обучения Среднеквадратичная ошибка обучения при применении регуляризации Производная среднеквадратичной ошибки обучения 175
dmsereg Initialization functions inillay initnw Learning functions learngd learngdm Adapt functions adapt Training functions traingd traingdm traingda Demonstrations appelml Производная среднеквадратичной ошибки обучения при применении регуляризации Функции инициализации сети Послойная инициализация . Функция NW (Nguyen - Widrow) Функции настройки параметров Функция настройки методом градиентного спуска Функция настройки методом градиентного спуска с возмущением Функции адаптации Адаптация весов и смещений Функции обучения Градиентный спуск по правилу обратного распространения ошибки Градиентный спуск с возмущением Градиентный спуск с адаптацией параметра скорости настройки Демонстрационные примеры Пример рекуррентной сети Элмана Архитектура Сеть Элмана - это, как правило, двухслойная сеть с обратной связью от выхода ко входу первого слоя (рис. 8.1). Рекуррентный слой Линейный слой aU) = tansigUW1' р +LW" a1 .Jfc-1) + Ь1) вг(*) = purelin(LW31 a\k) + h~> Рис. 8.1 В качестве функций активации в сети Элмана часто используются: в скрытом, рекуррентном слое - функция гиперболического тангенса tansig, в линейном слое - функция purelin. Такое сочетание функций активации позволяет максимально точно аппроксимировать функций с конечным числом точек разрыва. Единственное требование, предъявляемое к сети, состоит в том, чтобы скрытый слой имел достаточно большое число нейронов, что необходимо для успешной аппроксимации сложных функций. 176 Нейронные сети. MATLAB 6
В соответствии со структурной схемой сети Элмана сформируем динамическое описание се рекуррентного слоя в виде уравнений состояния fn1W = LWua,(^~l) + IVV1,p+b1) a'(0)=aj); [a1 (&) = tansig(n'(£)). Эта рекуррентная матричная форма уравнений состояния лишний раз подчеркивает название изучаемых нейронных сетей. Второй, линейный слой является безынерционным и описывается соотношениями ln2(k) = LW2W(k)+b2; |a2(*) = purelin(n2(fc)). Ниже сеть Элмана исследуется на примере такой задачи детектирования амплитуды гармонического сигнала. Пусть известно, что на вход нейронной сети поступают выборки из некоторого набора синусоид. Требуется выделить значения амплитуд этих синусоид. Далее рассматриваются выборки из набора двух синусоид с амплитудами 1.0 и 2.0: pi = sin(l:20); р2 = sin(l:20)*2; Целевыми выходами такой сети являются векторы tl = ones(1,20); t2 = ones{l,20)*2; Сформируем набор векторов входа и целевых выходов: Р - Ipl p2 pi р2]; t = [tl t2 tl t2]; Сформируем обучающую последовательность в виде массивов ячеек: Pseq = con2seq(p); Tseq = con2seq(t); Создание сети В nnnNNT для создания сети Элмана предусмотрена М-функция newelm. Решаемая задача требует, чтобы сеть Элмана на каждом шаге наблюдения значений выборки могла выявить единственный ее параметр -амплитуду синусоиды. Это означает, что сеть должна иметь I вход и 1 выход: R = 1; % Число элементов входа S2 = 1;% Число нейронов выходного слоя Рекуррентный слой может иметь любое число нейронов, и чем сложнее задача, тем большее количество нейронов требуется. Остановимся на 10 нейронах рекуррентного слоя: S1 — 10; % Число нейронов рекуррентного слоя . Элементы входа для данной задачи изменяются в диапазоне от -2 до 2. Для обучения используется метод градиентного спуска с возмущением и адаптацией параметра скорости настройки', реализованный в виде М-функции traingdx: net = newelm<[-2 2],[Si S2],{■tansig','purelin'},'traingdx'); «5. Рекуррентные сети 177
Сеть использует следующие функции адаптации, инициализации, обучения и оценки качества: adap t Fc n: 'adaptwb' initFcn: 'initlay' performFcn: 'mse' trainFcn: 'traingdx' Слои сети Элмана имеют следующие характеристики: net.layers{1} ans = dimensions: 10 distanceFcn: distances: initFcn: netlnputFcn: positions: size: topologyFcn: transferFcn: userdata: 'dist' [10x10 double] 'initnw' 'netsum' [0 1234567 10 'hextop' 1tansig' [lxl struct] 8 9] net.layers{2) ans = dimensions: 1 distanceFcn: distances: initFcn: netlnputFcn: positions: size: topologyFcn: transferFcn: userdata: 'dist' 0 'initnw' 'netsum' 0 1 'hextop' 'purelin' [lxl struct] Скрытый слой использует функцию активации tansig, которая для сети Элмана принимается по умолчанию; инициализация весов и смещений реализуется методом NW (Nguen - Widrow) с помощью М-функции initnw. Второй слой использует линейную функцию активации purelin. По умолчанию для настройки весов и смещений используется функция learngdm, а для оценки качества обучения - функция mse. Обучение сети Для обучения сети Элмана могут быть использованы как процедура адаптации, так и процедура обучения, реализуемые с помощью функций adapt и train соответственно. В процессе процедуры адаптации на каждом шаге выполняются следующие действия: • моделирование сети при подаче полного набора векторов входа и вычисление ошибки сети; • вычисление приближенного градиента функционала ошибки относительно весов и смещений методом обратного распространения ошибки; •. настройка весов с использованием функции настройки, выбираемой пользователем; рекомендуется функция learngdm. В процессе процедуры обучения на каждом цикле выполняются следующие действия: • моделирование сети при подаче последовательности входных сигналов, сравнение с целевыми выходами и вычисление ошибки; • вычисление приближенного градиента функционала ошибки относительно весов и смещений методом обратного распространения ошибки; • настройка весов с использованием функции настройки, выбираемой пользователем; рекомендуется функция traingdx. 178 Нейронные сети. MATLAB 6
Сети Элмана не обеспечивают высокой точности решения, поскольку присутствие обратной связи в рекуррентном слое не позволяет вычислить точно градиент функционала. В дальнейшем для обучения сети Элмана используется М-функция train. Ее входными аргументами являются обучающие последовательности Pscq HTseq, в качестве метода обучения используется метод обратного распространения ошибки с возмущением и адаптацией параметра скорости настройки. Количество циклов обучения принимается равным 1000, периодичность вывода результатов - 20 циклов, конечная погрешность обучения - 0.01: net. trainParam. epochs = 1000; net.trainParam.show = 25; net.trainParam.goal = 0.01; [net,trl = train(net,Pseq,Tseq); После 500 циклов обучения получим следующий график ошибки (рис. 8.2). ю" Но" Точность- CJD09993-45, предельная $.01 &?':^Й; ЮГ Нф >'*.,'.' т В • ; .О"'':.^100^.-20р^Гл30О ^^^БОО^^г^Трр^ Рис. 8.2 Требуемая точность обучения обеспечивается за 728 циклов. Теперь можно проверить работу сформированной сети. Проверка сети Будем использовать для проверки сети входы обучающей последовательности: figure(2) а = sim{net,Pseq); time = 1:length(p); plot(time, t, '—', time, cat(2,a{:})) axis([l 80 0.8 2.2]) % Рис.8.3 На рис. 8.3 приведены графики входного и выходного сигналов. 5. Рекуррентные сети 179
Рис. 8.3 Как следует из анализа рисунка, сеть справляется с решением задачи детектирования амплитуды на наборах обучающего множества. Однако неясно, как она будет вести себя на других наборах входа. Обладает ли построенная сеть Элмана свойством обобщения? Попробуем проверить это, выполнив следующие исследования. Подадим на сеть набор сигналов, составленный из двух синусоид с амплитудами 1.6 и 1.2 соответственно: рЗ = sin{l:20)*1.6; t3 = ones{l,20)*1.6; р4 = sin(l:20)*1.2; t4 = ones(l,20)*1.2; pg - ЕрЗ р4 рЗ p4]; tg - [t3 t4 t3 t4];- pgseq = con2seq(pg); figure(3) a = sim(net,pgseq); ime = 1:length(pg); plot(time, tg, ■—*, time, cat(2,a{:})) axis([1 80 0.8 2.2]) Результат представлен на рис. 8.4. 2.2 -Ч2 "и 1.2 Л / vt 1 N 1D 20 30 ■""*. SO Б0 70 BO Рис. 8.4 На этот раз сеть хуже справляется с задачей. Сеть стремится детектировать значение амплитуды, но делает это не очень точно. Улучшенное обобщение могло быть получено, обучая сеть на большее количество амплитуд, чем только на значения 1.0 и 2.0. Использование трех или четырех гармонических сигналов с различными амплитудами может при- вссти к намного лучшему датчику амплитуд. . 180 Нейронные сети. MATLAB б
Читатель может продолжить изучение сетей Элмана, используя программу appelml. Сделав копию этой программы, можно продолжить эксперименты, увеличивая количество нейронов в рекуррентном слое или длительность, а также количество входных наборов. 8.2. Сети Хопфилда Всякий целевой вектор можно рассматривать как набор характерных признаков некоторого объекта. Если создать рекуррентную сеть, положение равновесия которой совпадало бы с этим целевым вектором, то такую есть можно было бы рассматривать как ассоциативную память. Поступление на вход такой сети некоторого набора признаков в виде начальных условий приводило бы ее в то или иное положение равновесия, что позволяло бы ассоциировать вход с некоторым объектом. Именно такими ассоциативными возможностями и обладают сети Хопфилда. Они относятся к классу рекуррентных нейронных сетей, обладающих тем свойством, что за конечное число тактов времени они из произвольного начального состояния приходят в состояние устойчивого равновесия, называемое аттрактором. Количество таких аттракторов определяет объем ассоциативной памяти сети Хопфилда. Описание сетей Хопфилда читатель может найти в книге [18]. Спроектировать сеть Хопфилда-это значит создать рекуррентную сеть со множеством точек равновесия, таких, что при задании начальных условий сеть в конечном счете приходит в состояние покоя в одной из этих точек. Свойство рекурсии проявляется в том, что выход сети подается обратно на вход. Можно надеяться, что выход сети установится в одной из точек равновесия. Предлагаемый ниже метод синтеза сети Хопфилда не является абсолютно совершенным в том смысле, что синтезируемая сеть в дополнение к желаемым может иметь паразитные точки равновесия. Однако число таких паразитных точек должно быть сведено к минимуму за счет конструирования метода синтеза. Более того, область притяжения точек равновесия должна быть максимально большой. Метод синтеза сети Хопфилда основан на построении системы линейных дифференциальных уравнений первого порядка, которая задана в некотором замкнутом гиперкубе пространства состояний и имеет решения в вершинах этого гиперкуба. Такая сеть несколько отличается от классической модели Хопфилда, но она проще для понимания и проектирования, и мы будем ссылаться на нес как на модифицированную сеть Хопфилда. Основополагающей работой, связанной с анализом и синтезом модифицированных сетей Хопфилда, является статья [25]. По команде help hopfield можно получить следующую информацию об М-функциях, входящих в состав 1ШП Neural Network Toolbox и относящихся к построению модифицированных сетей Хопфилда: Hopfield recurrent networks New networks newhop Weight functions dotprod Net input functions netsum Рекуррентная модифицированная сеть Хопфилда Формирование сети Создание модифицированной сети Хопфилда Операции с весовой функцией Скалярное произведение Операции над входами Суммирование S. Рекуррентные сета 181
Transfer functions satlins Demonstrations demohopi demohop2 demohop3 demohop4 Функции активации Симметричная линейная функция с ограничениями Демонстрационные примеры Пример двумерной модифицированной сети Хопфилда Пример неустойчивой точки равновесия Пример трехмерной модифицированной сети Хопфилда Пример устойчивых паразитных точек равновесия Архитектура сети Архитектура модифицированной сети Хопфилда представлена на рис. 8.5. Г~^ ■ I., ■ А*1 х 1 Л1 V ) Начальные условия r u'(k-i) Г ^-> 1) !-► л LW" i'xlO 1>' Slx\ лнейщ D л }A>«~v п1 J©^* У4 ^ 5' >й спой с насьп. цени а'(А-) .*'*. L г > ем Рис. 8.5 Вход р устанавливает значения начальных условий. В сети используется линейная функция активации с насыщением satlins, которая описывается следующим образом: -1, и<~1; a=satlim(n) = \ «, -1<и<1; (8-3) 1, и>1. Эта сеть может быть промоделирована с одним или большим количеством векторов входа, которые задаются как начальные условия. После того как начальные условия зад а- ны, сеть генерирует выход, который по обратной связи подается на вход. Этот процесс повторяется много раз, пока выход не установится в положение равновесия. Можно над е- яться, что каждый вектор выхода в конечном счете сойдется к одной из точек равнов есия,' наиболее близкой к входному сигналу. Рассмотрим следующий пример. Предположим, что требуется разработать сеть с дв у- мя устойчивыми точками в вершинах трехмерного куба: т = [~1 -1 1; 1 -1 1] ■ т = -1 1 -1 -1 1 1 182 Нейронные сети. MATLAB 6
Выполним синтез сети: net = newhop(T); gensim(net) Структура сети представлена на рис. 8.6. О—Н'{4 ~"'{Ч г{1\ Uyci 1 -Ю ©—*Ш—НуФ*. >{1} л[1) DtUysl LVUJ1.1} УН} Ь[1) H»htth в Рис. 8.6 Читателю следует обратить внимание, что на схеме рис. 8.6, а вход и выход слоя совпадают; на рис. 8.6, б показаны используемые в рекуррентном слое элементы. Обратимся к информации о структуре слоя: net.layers{1} ans = dimensions: distanceFcn: distances: initFcn: netlnputFcn: positions: size: topologyFcn: transferFcn: userdata: 3 •disf [3x3 double] 'initwb' 'netsum' [0 1 2] 3 ' hex-top ■ 'satlins' [lxl struct] Из этого списка следует, что в слое используется функция инициализации initwb, функция суммирования входов netsum и функция активации satlins. На рис. 8.6, в показан блок, описывающий матрицу весов, которая определяет переходную матрицу динамической модели рекуррентного слоя. Динамическая модель рекуррентного слоя модифицированной сети Хопфилда опис ы- вается следующим образом: a,(A') = satlins(LWnaI(^-l) + b1), a'(0)=p. (8.4) При внимательном анализе приведенного соотношения можно действительно убедиться, что матрица весов LW1' равносильна переходной матрице динамической системы, 8. Рекуррентные сети 183
а вектор смещений bl - вектору передачи единичного входа. Необходимо сформировать эти элементы, если заданы точки равновесия системы t в вершинах гиперкуба Синтез сети Метод проектирования модифицированных сетей Хопфилда описан в работе [25], на основе этого метода разработан алгоритм синтеза, который реализован в ППП NT в виде подфункции solvehop2(t) М-функции newhop. Если задано множество целевых точек равновесия, представленных матрицей Т, то функция newhop возвращает матрицу весов и вектор смещений для рекуррентного слоя сети Хопфилда. При этом гарантируется, что точки устойчивого равновесия будут соответствовать целевым векторам, но могут появиться и так называемые паразитные точки. В процессе синтеза сети число таких нежелательных точек сводится к минимуму. Пусть задано Q целевых векторов, образующих матрицу Т размера SxQ: T=[tI>t2,...,tfi_„tc]. (8.5) Образуем новую матрицу Y размера SxQ-l следующего вида: Y=[tl-te,t2-tff,...>te_,-te] (8.6) Вычислим разложение матрицы Y по сингулярным числам: Далее образуем матрицы ТР = £>,<, TM=£u,uJ, (8.8) где К - ранг матрицы Y. Построим динамическую систему * = TTx-KE-Tt)tQ, (8.9) где Тт - матрица вида ТР - тТМ; т - динамический параметр (в алгоритме принят равным 10); Е - единичная матрица. Вычислим дискретную модель для системы (8.9): х^Фх^+Ftp, (8.10) где Ф - переходная матрица вида е х ; F - матрица передачи входа вида F = (с,ТР+с2ТМ)(Е -Tr), ci = еА-1, с2= (I-e~ril)/x; h - такт дискретности (в алгоритме принят равным 0.15 с). Соответствующая матрица весов рекуррентного слоя и вектор смещения вычисляются следующим образом: ь-и„ (8П) 184 Нейронные сети. MATLAB б
Когда сеть спроектирована, она может быть проверена с одним или большим числом векторов входа. Весьма вероятно, что векторы входа, близкие к целевым точкам, равновесия найдут свои цели. Способность модифицированной сети Хопфилда быстро обрабатывать наборы векторов входа позволяет проверить сеть за относительно короткое время. Сначала можно проверить, что точки равновесия целевых векторов действительно принадлежат вершинам гиперкуба, а затем можно определить области притяжения этих точек и обнаружить паразитные точки равновесия, если они имеются. Рассмотрим следующий пример. Предположим, что требуется создать модифицированную есть Хопфилда с двумя точками равновесия, заданными в трехмерном пространстве: Т = [-1 -1 1; 1-11]' т = -1 1 -1 -1 1 1 Выполним синтез сети, используя М-функцию newhop: net = newhop(T); Удостоверимся, что разработанная сеть имеет устойчивые состояния в этих двух точках. Выполним моделирование сети Хопфилда, приняв во внимание, что эта сеть не имеет входов и содержит рекуррентный слой; в этом случае целевые векторы определяют начальное состояние слоя Ai, а второй аргумент функции sim определяется числом целевых векторов: Ai = Т; [Y,Pf,Af] = sim(net,2,[],Ai); Y Y = -1 1 -1 -1 1 1 Действительно, устойчивые положения равновесия сети находятся в назначенных точках. Зададим другое начальное условие в виде массива ячеек: Ai = {[-0.9; -0.8; 0.7]}; Ai<l,l> ans = -0.9000 -0.8000 0.7000 Эта точка расположена вблизи первого положения равновесия, так что можно ожидать, что сеть будет сходиться именно к этой точке. При таком способе вызова функции sim в качестве второго параметра указываются такт дискретности и количество шагов моделирования: [Y,Pf,Afi] = sim(net,{l 5},{)/Ai); Y{1} Y = -1 -1 1 8. Рекуррентные сети 185
Действительно, из заданного начального состояния сеть вернулась в устойчивое положение равновесия. Желательно, чтобы есть вела себя аналогичным образом при зада-: нии любой начальной точки в пределах куба, вершины которого составлены изо всех \ комбинаций чисел I и -1 в трехмерном пространстве. К сожалению, этого нельзя гарантировать, и достаточно часто сети Хопфилда включают нежелательные паразитные точки равновесия. Пример: Рассмотрим сеть Хопфилда с четырьмя нейронами и определим 4 точки равновесия ~ в виде следующего массива целевых векторов: Т = [1 -1; -1 1; 1 1; -1 -1]' 1 = -1 1 -1 -1 На рис. 8.7 показаны эти 4 точки равновесия на плоскости состояний сети Хопфилда plot(T(l,:), Т(2,:) , **г') % Рис.8.7 axis([-l.l 1.1 -1.1 1.1]) title('Точки равновесия сети Хопфилда') xlabelCa(l) ■), ylabel (■a (2) •) --;;•:-<-- ..-. ~,,-; Й?.. г* #&» т ;;;.'$* & :-. V _■. Тччо.р^ноисме.п.Хопфклд^^--'" "■"' iiit „^—^—j—*—j—j—в-—s-—^5-—a-—*- -4—-s—*—-s—t—j—i-—s-—s-—5-—-!-- 4...]....i....;....|....i....L4..4..4.4. ::::::::::: ... .. . . ..... y-* -j-- ; "" ■" "j* ..„„-....... „.;.. „...j ... j. .... „. . _ i ' '. '. г г г г г г "; . 4-i--i--j--i--l-4-4-4-4-t- „Ч ^ ,...-4 j j j- 1- S-—4-—Ч-- тг^яштш Рис. 8.7 Рассчитаем веса и смещения модифицированной сети Хопфилда, использую М-функ- цию newhop: net = newhop(T); W= net.LW{l,l} b = net.b{l,l) W = 1.1618 0 b = 3.5934e-017 3.5934e-017 0 1.1618 186 Нейронные сети. MATLAB 6
'<ШГ Да, Проверим, принадлежат ли вершины квадрата к сети Хопфилда: Ai = Т; [Y,Pf,Af] = sim(net,4,U,Ai) Y = 1-1 1-1 -1 11-1 Pf = U Af = 1-1 1-1 -1 11-1 Как и следовало ожидать, выходы сети равны целевым векторам. Теперь проверим поведение сети при случайных начальных условиях: plot(T(l,:), Т(2,:),'*r*), hold on axis([-l.l 1.1 -1.1 1.1]) xlabeK'a(l)1)/ у1аЪе1('а(2)') new = newhop(T); [Y,Pf,Af] = sim(net,4,[3,T); for i =1:25 a = {rands(2,1)}; [Y,Pf,Af] = sim(net,{l,20},O,a); record ~ [cell2mat(a) cell2mat(Y)]; start = cell2mat(a); plot(start(1,1), start(2,1), 'kx', record(1,:), record(2,:)) end Результат представлен на рис. 8.8. ■:•'"":■?'•■■"•' - "' Т^-;*".~'-г ■■ " " " '^1Ш Рис.8.8 Читатель может продолжить изучение модифицированных сетей Хопфилда, обратившись к демонстрационным примерам. Пример двумерной сети можно найти в демонстрации demohopl, пример неустойчивой точки равновесия - в демонстрации demohop2. Демонстрация demohop3 дает пример трехмерной модифицированной сети Хопфилда. Демонстрация demohop4 иллюстрирует появление устойчивых паразитных точек равновесия. 8. Рекуррентные сети 187
9. ПРИМЕНЕНИЕ НЕЙРОННЫХ СЕТЕЙ В настоящее время многие задачи, имеющие важное практическое значение и которые не имели приемлемого решения в прошлом, могут быть решены с использованием нейронных сетей. Ниже рассматривается решение таких задач, связанных с аппроксимацией и фильтрацией сигналов, моделированием динамических систем, распознаванием образов и проектированием систем управления. 9.1. Аппроксимация и фильтрация сигналов 9.1.1. Предсказание стационарного сигнала Постановка задачи Задан гармонический сигнал с круговой частотой 4п 1/с (2 Гц) и длительностью 5 с. Дискретный сигнал Т получен в результате квантования исходного сигнала по времени с частотой 40 Гц (такт дискретности 0.025 с): time = 0:0.025:5; Т = sin(time*4*pi) ; stairs(time,!); axis([0 5 -1 1]), xlabel('time, с'), ylabelpT') На рис. 9.1 показан график дискретного сигнала Т. к%:я':.:'~:yi'. '!">•?. о'" ~У«.ГГ :1й;".;гГ Рис.9.1 Требуется предсказать значение сигнала yt на выходе сети в момент времени **, используя 5 последних значений сигнала Т в качестве входа, т. е. Pk-i~Tk4, i = l,...,5; 5 (9.1) где yk = sin(47Cti) = sin(4nkh), tk = t0 : ft: tt = 0 : 0.025 : 5.. В математическом смысле это задача экстраполяции сигнала на 1 шаг вперед. С позиции теории нейронных сетей это задача настройки параметров и обучения сети. Сформируем обучающее множество следующим образом. Входная последовательность Р1 определена на интервале от 0 до 1 си имеет длину Q1, а каждый вектор входа состоит из 188
пяти компонент; соответствующих запаздывающим значениям сигнала Т; целевой вектор Т1 сформирован из значений сигнала Т, начиная с шестого; контрольное подмножество Т2 формируется из значений сигнала Т на интервале от 3 до 5 с: Q = length(Т); h = 0.025; Ql = 1/h; PI = zeros (5, ОД); P1(1,1:Q1) Pl(2,2:Ql) Fl(3#3:Ql) Pl<4,4:Ql) P1{5,5:Q1) Tl = T{1,6; = T(l,l:Ql); = T(1,1:(Q1-1))| = T<l,l:(Ql-2)); = T(l,l:<Ql-3)); = T(1,1:<Q1~4)); (Ql+5)); T2 = T(l,3/h:Q>; Синтез сети Поскольку сигнал стационарный и соотношения между прошлыми и будущими значениями остаются неизменными, можно воспользоваться линейной моделью нейронной сети, рассчитывая веса на основе прямого решения системы линейных уравнений. Такой подход реализует М-функция newlind. Она вычисляет веса и смещение, которые минимизируют среднеквадратичную ошибку предсказания, которые зависят от длины обучающей последовательности Q1. Сеть для решения этой задачи должна состоять из одного нейрона с пятью входами (рис. 9.2). net = newlind{PI,Tl); Щ—НИ—ния\ pfl} Delays 1 IW{1.1} ^£ wm ъМ-f tietsur etsum purelin a{1} b[1J Рис. 9.2 Графики зависимостей значений весовых коэффициентов w,• и смещения Ь показаны на рис. 9.3, а и б соответственно. 5есоеые.гаэф"фЙ14иш<ш,; ■as ;--/- т? ^ш^^^т "/т1\";1 т Xt\ \ \ D 02 * W 06 03' '" "I time, с ■ - '- Рис. 9.3 9. Применение нейронных сетей 189
■■•:■& Значения этих величин стабилизируются после 0.5 с, когда исчерпывается I период '^[ синусоиды. ■'.? На рис. 9.4 представлена зависимость среднеквадратичной ошибки, которая характеризует? ^ погрешность экстраполяции в зависимости от длины обучающей последовательности. N j Погрешность' s «трансляции - , "'уО $ште*А&&-%%-:?^ Рис. 9.4 Проверка сети - Выполним проверку сети, используя входную последовательность обучающего по д- ^ множества и сравнивая выход сети с фактическим значением сигнала Т (рис. 9.5): ОД = 40; "■'-": а = sim{netfPl{:,l:Ql)); tl = 6:Ql+5; plbt(time(tl),a,"*rg, time(l:Ql+5),T(l,l:Ql+5)) xlabel<'Time, c')# '£' т^^?т№тш^£«щтшщ ".''--fe;"v3 Рис. 9.5 Как следует из анализа этого рисунка, нейронная сеть достаточно точно отслеживает^ входной сигнал. ]у Теперь проверим работу сети, используя контрольное множество Т2. Определим длину,'/; входной последовательности N1, равную 20, и построим график реакции сети (рис. 9.6): ' Ъ N1 = 20; ■};. Tt « T2(1,1:N1); ii'!' Р2<1,:) = Tt<l, :),- >* P2(2,2:end) = Tt(1,l:end-l); .# 190 Нейронные сети. МАПАВ'бГ. , о£ ви :" ИЛ ла СП трг Р..
P2(3,3:end) = Tt (1,1:exid-2) ; P2(4,4:end) ■ Tt(1,l:end-3); P2(5,5:end) = Tt(l,l:end-4); a ~ eim(net,P2); figure(3), elf hi = plot(time (1:size(P2, 2)-5), h2 = plot(time<l:size(P2, 2)-5), a(l:end-5), Tt(6:end), • *'); hold on v ... '4 Щ "v^ \J ■^Ш1№в&Ш*^&&&<Щ% Рис9<6 р^шшжштшш<т Вычислим погрешность сети, используя информацию из описания графических объектов Line с дескрипторами hi и h2: yl = get(hi,'YData'); y2 = get(h2,'YData'); minlength = min(length(yl), length(y2)>; e = yl(liminlength) - y2(l:minlength); nre = sqrt(mse(e)); График погрешности экстраполяции в функции от длины обучающего сигнала и в зависимости от количества точек экстраполяции в качестве параметра показан на рис. 9.7. ш&тшв&Шшшт Рис. 9.7 Из анализа этого графика следует, что при малом числе экстраполируемых точек 6,8 и длительности обучающей последовательности более 0.1с погрешности малы. С ростом числа экстраполируемых точек 10,20,30 требуется большая длина обучающей последовательности, и при длине, превышающей 20 тактов (0.5 с), погрешность не зависит от числа точек экстраполяции и монотонно убывает с увеличением длины обучающего множества. 9. Применение нейронных сетей 191
Читатель может обратиться к демонстрационному примеру applinl, где исследуется подобная задача. 9.1.2. Слежение за нестационарным сигналом Рассмотрим задачу отслеживания нестационарного гармонического сигнала, что может представлять реальный интерес на практике. Задана дискретная выборка Т из гармонического сигнала длительностью 6 с, частота" которого удваивается по истечении 4 с. Частота квантования для интервала времени от 0; до 4 с составляет 20 Гц, а для интервала от 4.05 до 6 с - 40 Гц. timel =0:0.05:4; time2 = 4.05:0.025:6; time = [timel time2]; T = [sin{timel*4*pi) sin(time2*8*pi) ] ; Поскольку при синтезе сети будут использоваться адаптивные алгоритмы настройки,; сформируем обучающую последовательность {Р, Т} в виде массива ячеек, при этом по-, следовательность входов Р должна совпадать с последовательностью целевых выходов Т, поскольку рассматривается задача слежения: Т = con2seq(T); Р = Т; plot(time, cat<2,T{:})) График гармонического сигнала показан на рис. 9.8. ш •JH :,.Щ Рис. 9.8 Для решения поставленной задачи используется однослойная линейная сеть, которая, предсказывает текущее значение сигнала по пяти предшествующим значениям. Инициализация сети Сеть состоит только из одного нейрона, так как требуется только одно значение выходного сигнала Т, которое генерируется на каждом шаге (рис. 9.9). Р{И Delays 1 wpght IW{1 :.bias'^ -S nebu eisum •0- purelin a{1} b{1} Рис. 9.9 192 Нейронные сети. MATLAB 6'
Для создания такой сети предназначена М-функция newlin; параметр скорости настройки выберем равным 0.1: 1г = 0.1; delays = [12 3 4 5]; net = newlin (mixunax( cat (2, Р{ : })), 1,delays, lr) ; [net,a,e] = adapt (net, F, T) ; Сформированная нейронная сеть имеет следующие весовые коэффициенты и смещение: net.iw{l} net.b ans = 0.39421 0.10682 -0.15592' -0.31476 -0.34523 ans = -4.5457е-00б Проверка сети Построим график выходного сигнала и сравним его с целевым сигналом (рис. 9.10): у = sim{net,P); plot(time,cat(2,y{:}), time,cat(2,T{:}),'.') % Рис.9.10 axis([0 6 -1.5 1.5]) Построим также график сигнала ошибки (рис. 9.11): plot(time,cat(2,e{:})) I/*- Рис. 9.10 э . ;- 4' '■'-: 5->. lima, с Рис. 9.11 9. Применение нейронных сетей 193
Как следует из этого графика, для настройки на слежение нейронной сети требуется "■ около 30 тактов (1.5 с) и далее до 4-й секунды сигнал отслеживается с высокой точностью. Затем целевой сигнал мгновенно изменяет частоту и нейронная есть настраивается' -:. на новый сигнал за тс же 30 тактов, но теперь это составляет 0.75 с. Это обусловлено тем, что частота съема увеличилась вдвое. Таким образом, линейная нейронная сеть успешно справляется с задачей слежения за гармоническим сигналом, если частота квантования синхронизирована с частотой наблю- .' даемых сигналов. Для настройки на новую частоту требуется всего 30 измерений; для ти-' пичных сигналов, возникающих в приложениях, обработка сообщений может производиться с частотой 20 кГц, при такой частоте 30 тактов настройки занимают 1.5 мс. Читатель может обратиться к демонстрационному примеру applin2, где исследуется - подобная задача. 9.1.3. Моделирование стационарного фильтра Одно из полезных применений нейронных сетей-это создание моделей динамических систем по наблюдаемым входным и выходным сигналам и их применение для последующего моделирования таких систем. Первая часть этой задачи, связанная с построением модели, известна также как задача идентификации, Если реальная система линейная или близка к линейной, то линейная нейронная сеть может моделировать ее с очень малой погрешностью. Постановка задачи Допустим, что на вход фильтра подается входной сигнал вида r(t) = sin(10*sin(t)*t), заданный массивом значений R с тактом квантования 0.025 с на интервале 5 с: time = 0:0.025:5; R = sin(sin(time)-*time*10) ; plot{time,R) axis([0 5 -1 1]); График этого сигнала показан на рис. 9.12. ai-vis-i* mm^w Рис. 9.12 Рассматривается линейный стационарный фильтр, описываемый следующим рекуррентным соотношением: у(п) = -0.5у(п -1) +1 .Syifi - 2) + г(п). (9,2) Это фильтр второго порядка, функционирование которого в системе MATLAB описывается следующей М-функцией: Y = filter*[1 0.5 -1.5],1,R); 194 Нейронные сети. MATLAB б
plot (time, T) axis([0 5 -2 2]); График сигнала выхода этого фильтра показан на рис. 9.13. 1 0.5 О -0.5 -1 .1.5 -2 J- --!-• -fr птНпГП I [Иг~* " ■2- ■-:..> з ~. time','с' Рис. 9.13 Задача нейронной сети - сформировать такую линейную модель, которая в процессе обучения определяет параметры фильтра, а затем использует их для моделирования при произвольных значениях входа. Определим следующую обучающую последовательность: в качестве целевого выхода Т примем массив Y, а входную последовательность Р зададим на основе текущего и двух предшествующих значений входа R: Т = Y; Q = size(R,2); Р = zeros (3,p_); P(1,1:Q) = R(l,lsQ); P(2,2:Q) = R(1,1:(Q-1)>; P(3,3:Q> = R(l,l:(Q-2)); Синтез сети Нейронная сеть должна иметь только 1 нейрон, потому что динамическая система имеет только 1 выход. Нейрон должен иметь 3 входа, чтобы получить текущий и 2 запаздывающих значения входного сигнала. М-функция riewlind позволяет выполнить синтез такой, нейронной сети: net = newlind(Р,Т); net.IW{l}, net.b ans = 1.0000 0.5Q00 -1.5000 ans = -7.43 94e-017 Нетрудно убедиться, что сеть точно определяет параметры фильтра. Проверка сети Для проверки функционирования сети подадим входную последовательность Р и сравним с целевой последовательностью Т (рис. 9.14): а = sim(net,P)y plot(time,T, 'Color', [0 0.8 0.8J, 'LineWidth•,3),hold on plot(time,a, 'k')# grid on axis([0 5 -2 2]); % Рис.9.14 9. Применение нейронных сетей 195
2 1.6 1 0.5 0 -D.5 •1 -1.5 ~0 1 2 3 4 5 time, с РИС. 9.14 Сеть выполняет поставленную задачу. Погрешность моделирования показана на рис. 9.15 и находится в пределах точности компьютера при вычислениях с плавающей точкой: е = Т-а; plot(time, e) х Ю*1* Погрешность сети 2 • 1.5 1 0.5 О . -0.5 -1 -1^5 : — ■ - О • . 1 2 3 4 5 <■• '■- time, с РИС. 9.15 Построенная линейная нейронная сеть может быть использована для идентификации и моделирования динамических систем, причем для линейных систем погрешности близки кО. Для нелинейных систем такой подход при достаточно малых амплитудах входного сигнала обеспечивает линеаризацию с минимальной среднеквадратичной ошибкой. Если нелинейная система переместится в другую рабочую точку, то изменятся и параметры нейронной сети. Для того чтобы получить линеаризованную модель за короткое время, частота замеров должна быть достаточно высокой, а на вход нелинейной системы необходимо подать пробный сигнал в виде случайного процесса небольшой амплитуды. Это ускорит адаптацию сети, поскольку большее количество измерений, характеризующих динамику системы, будет представлено на коротком интервале времени. Учет в случае нелинейных систем большего числа запаздывающих входов позволяет минимизировать ошибку при моделировании нелинейной системы. Если система характеризуется существенной нелинейностью, то более подходящими будут сети с обучением методом обратного распространения ошибки или радиальные базисные сети. Читатель может обратиться к демонстрационному примеру аррНпЗ, где рассмотрена подобная задача. 196 Нейронные сети. MATLAB 6 щ 111 if.
9.1.4. Моделирование нестационарного фильтра В отличие от описанного выше стационарного фильтра рассмотрим задачу идентификации и моделирования нестационарной системы. Постановка задачи Допустим, что на вход фильтра подается входной сигнал вида r(t) = sin(8sin(4t)*t), заданный массивом значений R с тактом квантования 0.005 с на интервале 6 с: timel = 0:0.005:4; time2 = 4.005:0.005:6; time = [timel time2]; R = sin(sin{time*4).*time*8); plot(time, R) axis([0 6 -1.1 1.1])i График этого сигнала показан на рис. 9.16. D - ' 1 ! 2 3 . V А ' '" 5 ' ■ 6' ' ■ • time, с ■."''. Рис. 9.16 Нестационарный линейный фильтр описывается следующими рекуррентными соотношениями: Х«) = 0.5Х«-1) + К"), 0 < л £800; (д 3) 0.9у(п) = 0.ву(п -1) + г(п), 801 < п < 1200. Этот фильтр может быть представлен в системе MATLAB следующим образом: steps 1 = length.(timel) ; [Yl,state] = filter([l -0.5],l,R(l:stepsl)); steps2 = length(time2); Y2 = filter([0.9 -0.6],l,R((l:steps2) + stepsl),state); Y = [Yl Y2]; plot(time,Y) График сигнала на выходе этого фильтра показан на рис. 9.17. 9. Применение нейронных сетей 197
-G.6 Рис. 9.17 Определим такую обучающую последовательность: в качестве целевого выхода Т примем массив Y, а входную последовательность Р зададим на основе текущего и предшествующего значений входа R. Для использования алгоритмов адаптации представим обучающие последовательности в виде массивов ячеек: Т =s con2seq(Y); F - con2seq<R); Инициализация сети Сеть создается с помощью функции newlin, которая генерирует веса и смещение для линейного нейрона с двумя входами. На входе сети используется линия задержки на 1 такт; параметр скорости настройки принят равным 0.5. 1г = 0.5; delays = £0 1]; net = newlin(minmax(cat (2,P{ : })) ,1,delays,lr) ; [net,a,e] = adapt(net,P,T); Сформированная нейронная сеть имеет следующие весовые коэффициенты и смещение: net.IW{l}, net.b ans = 0.9 -0.6 ans = -3.14e-013 Нетрудно убедиться, что они соответствуют коэффициентам второго фильтра. Проверка сети Построим график погрешности сети (рис. 9.18): plot(time, cat(2,e{:})) 198 Нейронные сети. MATLAB 6
Погрешность сети 0.3 0.1 0.1 О -0.1 -0.2 -0.3 .0 4 0 1 2 3 4 5 6 lime, с РИС. 9.18 Из анализа этого графика следует, что сети требуется 2.5 с для настройки на реакцию первого фильтра и немногим более 0.2 с для настройки на реакцию второго фильтра. Это объясняется тем, что фактические настройки параметров сети стационарны и соответствуют значениям параметров второго фильтра. Читатель может обратиться к демонстрационному примеру applin4, где исследуется подобная задача. 9.2. Распознавание образов Часто полезно иметь устройство, которое выполняет распознавание образов. В частности, очень эффективны и выгодны машины, которые могут читать символы. Машина, которая читает банковские чеки, может выполнять за то же самое время намного больше проверок, чем человек. Этот вид приложений сохраняет время и деньги, а также устраняет условия, при которых человек выполняет монотонную, периодически повторяющуюся работу. Демонстрационная программа сценарий appcrl иллюстрирует, как распознавание символов может быть выполнено в сети с обратным распространением. Постановка задачи Требуется создать нейронную сеть для распознавания 26 символов латинского алфавита. В качестве датчика предполагается использовать систему распознавания, которая выполняет оцифровку каждого символа, находящегося в поле зрения. В результате каждый символ будет представлен шаблоном размера 5x7. Например, символ А может быть представлен, как это показано на рис. 9.19, а и б. 0 0 0 1 1 1 1 0 1 1 0 1 0 0 б 1 0 0 0 1 0 0 0 1 1 0 1 0 0 0 0 0 1 1 1 1 : 1 ': : : ': щ : : : : Ык \ \W • W ^ ; Г; ] -■-:-- r-r -. г г 9. Применение нейронных сетей 199
Однако система считывания символов обычно работает неидеально и отдельные элементы символов могут оказаться искаженными (рис. 9.20). в HL ■ 5^1 ■ sCK я я в ^ H()<f ■ 53 ■ н нГ>Л • в . к я -EIIS3 Рис. 9.20 Проектируемая нейронная сеть должна точно распознавать идеальные векторы входа и с максимальной точностью воспроизводить зашумленные векторы. М-функция prprob определяет 26 векторов входа, каждый из которых содержит 35 элементов, этот массив называется алфавитом. М-функция формирует выходные переменные alphabet и targets, которые определяют массивы алфавита и целевых векторов. Массив targets определяется как еуе(26). Для того чтобы восстановить шаблон для i-й буквы алфавита, надо выполнить следующие операторы: [alphabet, targets] = prprob; ti = alphabet(:, i); letterfi} = reshape(ti, 5, 7)'; letter{i} Пример: Определим шаблон для символа А, который является первым элементом алфавита: [alphabet, targets] =: prprob; i = 2; ti « alphabet(:, i); letter{i} = reshape(ti, letter{i} ans = 0 0 10 0 10 1 0 10 1 10 0 0 1111 10 0 0 10 0 0 5, 7) Нейронная сеть На вход сети поступает вектор входа с 35 элементами; вектор выхода содержит 26 элементов, только один из которых равен 1, а остальные-0. Правильно функционирующая сеть должна ответить вектором со значением 1 для элемента, соответствующего номеру символа в алфавите. Кроме того, сеть должна быть способной распознавать символы в условиях действия шума. Предполагается, что шум - это случайная величина со средним значением 0 и стандартным отклонением, меньшим или равным 0.2. 200 Нейронные сети. MATLAB 6
Архитектура сети Для работы нейронной сети требуется 35 входов и 26 нейронов в выходном слое. Для решения задачи выберем двухслойную нейронную сеть с логарифмическими сигмоидаль- ными функциями активации в каждом слое. Такая функция активации выбрана потому, что диапазон выходных сигналов для этой функции определен от 0 до 1, и этого достаточно, чтобы сформировать значения выходного вектора. Структурная схема такой нейронной сети показана на рис. 9.21. Вход Скрытый слой Выходной слой л г л ОТ'У a^/flgrigrtW'-'p'+b'j а' = hgsi$(L\\ a +lr) Рис. 9.21 Скрытый слой имеет 10 нейронов. Такое число нейронов выбрано на основе опыта и разумных предположений. Если при обучении сети возникнут затруднения, то можно увеличить количество нейронов этого уровня. Сеть обучается так, чтобы сформировать единицу в единственном элементе вектора выхода, позиция которого соответствует номеру символа, и заполнить остальную часть вектора нулями. Однако наличие шумов может приводить к тому, что сеть не будет формировать вектора выхода, состоящего точно из единиц и нулей. Поэтому по завершении этапа обучения выходной сигнал обрабатывается М-функцией compet, которая присваивает значение 1 единственному элементу вектора выхода, а всем остальным - значение 0. Инициализация сети Вызовем М-файл prprob, который формирует массив векторов входа alphabet размера 35x26 с шаблонами символов алфавита и массив целевых векторов targets: [alphabet,targets] = prprob; [R,QJ = size(alphabet); [S2,Q] = size(targets); Двухслойная нейронная сеть создается с помощью команды nevvff: SI = 10? net = newf£ (minmax(alphabet), [SI S21, {' logsig' ' logsig'}, * traingdx') ; net.LW{2,l} = net.LW{2,l}*0.01; net.b{2) = net-b{2)*0.01; Структура нейронной сети представлена на рис. 9.22. gensim{net) 9. Применение нейронных сетей 201
Neural Netwoik Input 1 p{1} —► mV. y{i} □ У{1} р{1> Delays 1 weight IW{1.1} bias '—I 2-x§> netsum logsig a{1} b{1} a{1} f^l чЗ^ p{i} О KJ ь ^ Ь W p{1}^;^a{1} Layer 1 3{1}v-€a{2} fcO a{1} >№ #-*• FPi-+ a{1} Delays 1 weigM: Щ2.1} -bias-;' ► +:y." neisu ti logsig bJ<Y\ HM a{2} Layer 2 y{H b{2} Рис. 9.22 Обучение Чтобы создать нейронную сеть, которая может обрабатывать зашумлснныс векторы входа, следует выполнить обучение сети как на идеальных, так и на зашумленных векторах. Сначала есть обучается на идеальных векторах, пока не будет обеспечена минимальная сумма квадратов погрешностей. Затем сеть обучается на 10 наборах идеальных и зашумленных векторов. Две копии свободного от шума алфавита используются для того, чтобы сохранить способность сети классифицировать идеальные векторы входа. К сожалению, после того, как описанная выше сеть обучилась классифицировать сильно зашум- ленные векторы, она потеряла способность правильно классифицировать некоторые векторы, свободные от шума. Следовательно, сеть снова надо обучить на идеальных векторах. Это гарантирует, что сеть будет работать правильно, когда на ее вход будет передан идеальный символ. Обучение выполняется с помощью функции trainbpx, которая реализует метод обратного распространения ошибки с возмущением и адаптацией параметра скорости настройки. Обучение в отсутствие шума Сеть первоначально обучается в отсутствие шума с максимальным числом циклов обучения 5000 либо до достижения допустимой средней квадратичной погрешности, равной 0.1 (рис. 9.23): Р = alphabet; Т = targets; net.performFcn = 'see'; net. trainParam. goal = 0.1; net.trainParam.show = 20; net.trainParam.epochs = 5000; net. trainParam. mc = 0.95; [net,tr} = train(net,P,T); % Рис.9.23 202 Нейронные сети. MATLAB б
Точность -00903872. предельная- 01 .0' 1" ^ Р га'1 1: | :i::: viiL Will ЙНШШ ЙШШ 1ЙШН1И щипан шшшн iiliiiiiii glUlill IMilliiii ИНН!!! иш Ш щ^ ШИН Ш!Ш mm S:::::::::::::::::::::::::::::::^:::::::::::::^::^ ;s| = I ::з;: ННШЙП ............ ЩНПШ: :A::::i::: ": : mm n :iii!I iiKiij v.cA::} : Г"": Г""-" •'"" : Л :£2S: !s!!!4;!E !s!!!iHi ::2::: ИНН!! Щ&ЩЩЩЩЩ^&:^Ц D 2J 20 40 БО SO 100 120 140 160 160 Рис. 9.23 Обучение в присутствии шума Чтобы спроектировать нейронную сеть, не чувствительную к воздействию шума, обучим ее с применением двух идеальных и двух зашумленных копий векторов алфавита. Целевые векторы состоят из четырех копий векторов. Зашумленные векторы имеют шум со средним значением 0.1 и 0.2. Это обучает нейрон правильно распознавать зашумленные символы и в то же время хорошо распознавать идеальные векторы. При обучении с шумом максимальное число циклов обучения сократим до 300, а допустимую погрешность увеличим до 0.6 (рис. 9.24): netn = net; netn.trainParam.goal = 0.6; netn.trainParam.epochs = 300; 7 = [targets targets targets targets]; for pass =1:10 P = [alphabet, alphabet, ... (alphabet + randn(R,Q)*0.1), ... (alphabet + randn(R,Q)*0.2)]; [netn,tr] = train(netn,P,T); end % Рис.9.24 Рис. 9.24 9. Применение нейронных сетей 203
Повторное обучение в отсутствие шума Поскольку нейронная сеть обучалась в присутствии шума, то имеет смысл повторить се обучение без шума, чтобы гарантировать, что идеальные векторы входа классифицируются правильно. netn.trainPaxam.goal =0.1; % Предельная среднеквадратичная погрешность netn.trainParam.epochs = 500; % Максимальное количество циклов обучения net.trainParam.show = 5; % Частота вывода результатов на экран [netn, tr] = train<netn, Р, T); Эффективность функционирования системы Эффективность нейронной сети будем оценивать следующим образом. Рассмотрим 2 структуры нейронной сети: сеть 1, обученную на идеальных последовательностях, и сеть 2, обученную на зашумленных последовательностях. Проверка функционирования производится на 100 векторах входа при различных уровнях шума. Приведем фрагмент сценария appcrl, который выполняет эти операции: noise_range = 0:.О 5:.5; max_test = 100; networkl = []; network.2 = П ; Т = targets; % Выполнить тест for noiselevel = noise_range errorsl =0; errors2 =0; for i=l:max_test P = alphabet + randn{35,26)*noiselevel; % Тест для сети 1 A = sim(netrP); - AA = compet(A); errorsl = errorsl + stim(sum(abs(AA-T)))/2; % Тест для сети 2 An = sim(netnrP); AAn = compet(An); errors2 = errors2 + sum(sum(abs{AAn-T)))/2; echo off end % Средние значения ошибок {100 последовательностей из 26 векторов целей networkl - [networkl errorsl/26/100]; network2 = [network2 errors2/26/100]; end Тестирование реализуется следующим образом. Шум со средним значением 0 и стандартным отклонением от 0 до 0.5 с шагом 0.05 добавляется к векторам входа. Для каждого уровня шума формируется 100 зашумленных последовательностей для каждого символа 204 Нейронные сети. MATLAB 6
и вычисляется выход сети. Выходной сигнал обрабатывается М-функцией compct с той целью, чтобы выбрать только один из 26 элементов вектора выхода. После этого оценивается количество ошибочных классификаций и вычисляется процент ошибки. Соответствующий график погрешности сети от уровня входного шума показан нарис. 9.25. plot{n©ise_jrange,networkl*100,'—',noise_range,network2*100); Рис. 9.25 Сеть 1 обучена на идеальных векторах входа, а сеть 2 - на зашумленных. Обучение сети на зашумленных векторах входа значительно снижает погрешность распознавания реальных векторов входа. Сети имеют очень малые погрешности, если среднеквадратичное значение шума находится в пределах от 0.00 до 0.05. Когда к векторам был добавлен шум со среднеквадратичным значением 0.2, в обеих сетях начали возникать заметные ошибки. При этом погрешности нейронной сети, обученной на зашумленных векторах, на 3-4% ниже, чем для сети, обученной на идеальных входных последовательностях. Если необходима более высокая точность распознавания, сеть может быть обучена либо в течение более длительного времени, либо с использованием большего количества нейронов в скрытом слое. Можно также увеличить размер векторов, чтобы пользоваться шаблоном с более мелкой сеткой, например 10x14 точек вместо 5x7. Проверим работу нейронной сети для распознавания символов. Сформируем зашум- ленный вектор входа для символа J (рис. 9.26): noisytf = alphabet{:,10) + randn(35,l)*0.2; plotchar(noisyJ); % Затупленный символ J (рис.9.26) Рис. 9.26 9. Применение нейронных сетей 205
A2 ~ sim(net,noisyJ); A2 = compet(A2); answer = find(compet(A2) == 1) ansv/er =10 plotchar(alphabet (:,answer)); % Распознанный символ J Нейронная сеть выделила 10 правильных элементов и восстановила символ J без ошибок (рис. 9.27). txx щ к X жж ■2х.№>Ы5:хШ-?Ш$:ь Рис. 9.27 Эта задача демонстрирует, как может быть разработана простая система распознавания изображений. Заметим, что процесс обучения не состоял из единственного обращения к обучающей функции. Сеть была обучена несколько раз при различных векторах входа. Обучение сети на различных наборах зашумленных векторов позволило обучить сеть работать с изображениями, искаженными шумами, что характерно для реальной практики. 9.3. Нейронные сети и системы управления В настоящее время нейронные сети нашли успешное применение для проектирования систем управления динамическими процессами. Универсальные возможности аппроксимации с помощью многослойного персептрона делают их полезным инструментом для решения задач идентификации, проектирования и моделирования нелинейных регуляторов [15]. Ниже описаны 3 архитектуры нейронных сетей, которые реализованы в ППП Neural Network Toolbox в виде следующих контроллеров: • контроллера с предсказанием (NN Predictive Controller); • контроллера на основе модели авторегрессии со скользящим средним (NARMA-L2 Controller); • контроллера на основе эталонной модели (Model Reference Controller). Ниже представлено краткое описание каждой из этих архитектур и способы их применения на практике. Применение нейронных сетей для решения задач управления позволяет выделить 2 этапа проектирования;. • этап идентификации управляемого процесса; • этап синтеза закона управления. На этапе идентификации разрабатывается модель управляемого процесса в виде нейронной сети, которая на этапе синтеза используется для синтеза регулятора. Для каждой Г $* 206 Нейронные сети. MATLAB 6
из трех архитектур используется одна и та же процедура идентификации, однако этапы синтеза существенно различаются. При управлении с предсказанием модель управляемого процесса используется для того, чтобы предсказать его будущее поведение, а алгоритм оптимизации применяется для расчета такого управления, которое минимизирует разность между желаемыми и действительными изменениями выхода модели. При управлении на основе модели авторегрессии со скользящим средним регулятор представляет собой достаточно простую реконструкцию модели управляемого процесса. При управлении на основе эталонной модели регулятор - это нейронная сеть, которая обучена управлять процессом так, чтобы он отслеживал поведение эталонного процесса. При этом модель управляемого процесса активно используется при настройке параметров самого регулятора. В последующих разделах обсуждаются все 3 структуры систем управления и архитектуры соответствующих неиросетевых контроллеров. Каждый раздел включает краткое изложение принципа управления динамическим процессом и сопровождается описанием сценария функционирования проектируемой системы, который реализован в виде комбинации GUI-интерфейса и динамической модели регулятора в системе Simulink. Динамические модели систем управления с нейросетевыми регуляторами размещены в специальном разделе Control Systems набора блоков Neural Network Blocksets (рис. 9.28) и включают 3 упомянутые выше модели регуляторов, а также блок построения графиков. £*3Simulink Library Browser -DO МШГ™ ТГг 11 ТГ *"~ГГГТп №ГГ.У. )>■**•■•*,'- NN Predictive Controller: Кокгдолмр с npeancuuoetm: Сь»чи» необходимо построил кюпда' пхналахмчааюю процесс*- Контроллер nmowytT иу моде» дюс прадошамки arc эффегааюстк на мдахнож umpum храмекх. Алгоритм eiuiuuuuwi оир«амиат тр«6учш» пдоюаиссигкш. упрыгают. Анткицм блош. НН Predictive Controller топким щеткам ниптп мшлкгепотиоет построят* мопет пхнэлэпсяского процесс* к устиажяп гариящвиохгрсияер». Е- Tjft Neural Network Bfocksetjfj I \ -ШШШШ$£№, 3' ■ \-Ш Net Input Functions $ ;; | I- Sj T render Functions % \ !~ Ы Weighl Functions j[? E -Я Power System Blockset El- 5Ц Real-Time Woikshop j— SB Report Generator Й Я Simulink Extras й Model Reference Controller NARMA-L2 Controller NN Predictive Controller XI&) Graph 1^шшшшшаш^Ш1^1й Рис. 9.28 Поскольку ни один конкретный регулятор не является универсальным, то описаны функциональные возможности всех трех типов регуляторов, каждый из которых имеет свои преимущества и недостатки. Регулятор с предсказанием. Этот регулятор использует модель управляемого процесса в виде нейронной сети, для того чтобы предсказать будущие реакции процесса наслучай- ные сигналы управления. Алгоритм оптимизации вычисляет управляющие сигналы, которые минимизируют разность между желаемыми и действительными изменениями сигнала 9. Применение нейронных сетей 207
на выходе модели и таким образом оптимизируют управляемый процесс. Построение мо- h дели управляемого процесса выполняется автономно с использованием нейронной сети, t, которая обучается в групповом режиме с использованием одного из алгоритмов обучения.. ~ Контроллер, реализующий такой регулятор, требует значительного объема вычислений, поскольку для расчета оптимального закона управления оптимизация выполняется на каждом такте управления. Регулятор NARMA-L2. Изо всех архитектур этот регулятор требует наименьшего объема f вычислений. Данный регулятор-это просто некоторая реконструкция нейросетевой мо-. дели управляемого процесса, полученной на этапе автономной идентификации. Вычисле- . ния в реальном времени связаны только с реализацией нейронной сети. Недостаток метода состоит в том, что модель процесса должна быть задана в канонической форме пространства состояния, которой соответствует сопровождающая матрица, что может ; приводить к вычислительным погрешностям. Регулятор па основе эталонной модели. Требуемый объем вычислений для этого ! регулятора сравним с предыдущим. Однако архитектура регулятора с эталонной моделью требует обучения нейронной сети управляемого процесса и нейронной сети регулятора. При этом обучение регулятора оказывается достаточно сложным, поскольку обучение основано на динамическом варианте метода обратного распространения ошибки [16]. Достоинством регуляторов на основе эталонной модели является то, что они применимы к различным классам управляемых процессов. 9.3.1. Регулятор с предсказанием Регулятор с предсказанием, реализованный в ПГШ Neural Network Toolbox, использует модель нелинейного управляемого процесса в виде нейронной сети для того, чтобы предсказывать его будущее поведение. Кроме того, регулятор вычисляет сигнал управления, который оптимизирует поведение объекта на заданном интервале времени. Идентификация управляемого процесса. Схема подсистемы идентификации показана на рис. 9.29. Она включает модель управляемого процесса в виде нейронной сети, которая должна быть обучена в автономном режиме так, чтобы минимизировать ошибку между реакциями процесса и модели е = ур —ут на последовательность пробных сигналов и. и Управляемый процесс Модель (нейронная сеть) + ( Алгоршм | _^ I обучения Г*" ^ J in у 1 *(\ 1 р r + р Рис. 9.29 Нейронная сеть регулятора управляемого процесса представлена на рис. 9.30; она имеет 2 слоя нейронов и использует линии задержки (ЛЗ), чтобы запомнить предшествующие значения входов и выходов процесса с целью предсказать будущие значения выхода. 208 Нейронные сети. MATLAB 6
Входы У& - и(0 _ ЛЗ лз Спой 1 IW» IW1 Спой 2 г\ >Ф> ^гИ / w LW3 Hjii 3W Я#*1) Рис. 9.30 Настройка параметров этой сети выполняется автономно методом группового обучения, используя данные, полученные при испытаниях реального объекта. Для обучения сети может быть использован любой из обучающих алгоритмов для нейронных сетей. Принцип управления с предсказанием. Управление с предсказанием использует принцип удаляющегося горизонта [40], когда нейросетевая модель управляемого процесса предсказывает реакцию объекта управления на определенном интервале времени в будущем. Предсказания используются программой численной оптимизации для того, чтобы вычислить управляющий сигнал, который минимизирует следующий критерии качества управления: •/= t(yr(t + J)-ym(t + J))2+p£(u'(t + J-V-uXt + j-2))2, (9.4) где константы NuN2u N„ задают пределы, внутри которых вычисляются ошибка слежения и мощность управляющего сигнала. Переменная и" описывает пробный управляющий сигнал, уГ- желаемая, аут - истинная реакция модели управляемого процесса. Величина р определяет вклад, который вносит мощность управления в критерий качества. Структурная схема на рис. 9.31 иллюстрирует процесс управления с предсказанием. Регулятор состоит из нейросетевой модели управляемого процесса и блока оптимизации. Блок оптимизации определяет значения и\ которые минимизируют критерий качества управления, а соответствующий управляющий сигнал управляет процессом. 1, г ь ^ Регулятор У» ▼ Оптимизация и' и. Модель объекта (нсГфонная сеть) у5 Управляемым процесс 1 ^ . J 4-i ■:V J Ур - Рис. 9.31 Реализация регулятора с предсказанием. В качестве примера исследуется процесс управления каталитическим реактором с непрерывным перемешиванием (Continous Stirred Tank Reactor - CSTR), схема которого показана на рис. 9.32. 9. Применение нейронных сетей 209
ь Рис. 9.32 Динамическая модель управляемого процесса описывается следующими обыкновенными нелинейными дифференциальными уравнениями 'dh ,dt ■ = wi(t) + w2(t)-0.2yfh] dt = (Cbl-Cb)- *iC 14> (9-5) k2' где h - уровень жидкости в резервуаре; wi(r) - скорость потока продукта с концентрацией 0>ь wi(t) - скорость потока разбавленного продукта с концентрацией Си.; Q-концентрация продукта на выходе объекта. Исходные концентрации приняты равными С^ = 29.4 и Сьг~ 0.1. Константы скорости расхода равны к\ - кг = 1. Цель регулирования состоит в поддержании концентрации продукта путем регулирования скорости потока w2(r). Для простоты принято w\(t) = 0.1. В этом примере уровень раствора в резервуаре не регулируется. Нелинейная динамическая модель каталитического реактора, соответствующая уравнениям (9.5), показана на рис. 9.33 <±> *CD Рис. 9.33 Чтобы разобрать этот достаточно сложный демонстрационный пример, следует сделать ряд предварительных замечаний. Описываемые ниже приложения нейронных сетей реализованы только в рамках системы MATLAB 6. Демонстрационный пример NN Predictive Controller использует следующие файлы, размещенные в каталоге toolbox\nnet\nncontrol. 210 Нейронные сети. MATLAB б
p/fAT-фашы данных: cstrl, cstr2, cstr3 - данные для обучения нейросстсвой модели каталитического реактора. функции одномерной оптимизации: csrehbac - поиск с обратной прогонкой; csrehbre - метод Брента (Brent), объединяющий методы золотого сечения и квадратичной интерполяции; csrehcha - метод кубической интерполяции Чараламбуса; csrehgol - метод золотого сечения; csrchhyb - гибридный метод бисекции и кубической интерполяции. Функции для синтеза управления с предсказанием: calcjjdjj - вычисление функционала качества и его градиента; predopt - оптимизация регулятора с предсказанием; dyduvar - вычисление частных производных выхода по входу. Модели Simulink: cstr - модель каталитического реактора; predestr - GUI-приложение для контроллера с предсказанием; ptest3sim2 - вейросетевая модель управляемого процесса, используемая М-функцией predopt для предсказания процесса в будущем. Вспомогательные функции: sfunxy2 - S-функция для вывода графиков; nncontrolutil - поддержка, обеспечивающая возможность обращения к частным функциям из системы Simulink. Выполнить запуск демонстрационного примера можно несколькими способами: • в окне запуска приложений Launch Pad выбрать опцию Demos для ППП Neural Network Toolbox; • ввести команду predestr, используя командное окно системы MATLAB. В любом случае открывается окно системы Simulink со следующей структурой системы управления (рис. 9.34). Контроллер с 1фсдаиакмм 1 Rind om Rtftrmct S5M B«f«r«VkV,u !?f?l Ш Output, IMP" topi! Удокхясмий if tuccc •t СП^|Й=1 PUnl (Ccntinuoct Stlntd Tji* RuctoQ О ten vtiph Ntuui M«lrtoik Pftdirti»* Contol of j Contineus Sl'mtd TtrtRtjcfrf (taublt click on tri* T lot imn info) To rtJrt лпб rtap Iht t imulilioi» wi* lh« "$Urt/$lap" *tltcta>n (ft Iht "Sinful ilitirt" pu(I-down mtfN Q Doubfe dick hirt for • S'mtliA K*lp Рис. 9.34 9. Применение нейронных сетей • 211
Эта структура включает блок управляемого процесса Plant и блок контроллера NN Predictive Controller, а также блоки генерации эталонного ступенчатого сигнала со случайной амплитудой Random Reference, отсчета времени Clock, построения графиков Graph. Особенность этой структуры заключается в том, что она выполняет не только функции блок-схемы системы Simulink, но и функции графического интерфейса пользователя GUI [53]. Для того чтобы начать работу, необходимо активизировать блок NN Predictive Controller двойным щелчком левой кнопки мыши. Появится окно, показанное на рис. 9.35. -) Heuial Nelmxfc Piediciive Control Fie /Window- Hefe.7:i.v i,iz~ ■ '■'--:"? 0ПЕ и^чЖг - : «■ ui;;,- Сой Horizon (N2r , j ""7 -■;;-* ;ConOotHotiion|Nu) ,j 2 >, Mrwe^RoUJiwIjcacH,,,; _jj; -Ч^РЙЙвл*Й^Л|'^5^>"оК^ ■:.■:■:.. SeerdtPwaimtorblrJ Q001 .^Hs^j-ft.-.-a..» щшешщтжщ ■* -*ЭТфил«МЖ* 9Ф4ЧМС* *,.'V'-* (- , S Рис. 9.35 Оно выполняет функции графического интерфейса пользователя. Обратите внимание на информацию, которая руководит вашими действиями и указана в области фрейма в виде сообщения Прежде чем установить параметры контроллера, постройте модель управляемого процесса. Это означает, что прежде всего необходимо выполнить идентификацию управляемого процесса, т. е. построить его нейросетевую модель, воспользовавшись специальной процедурой Plant Identification. Вид окна Plant Identification приведен на рис. 9.36. Это окно универсально и может быть использовано для построения нейросетевых моделей для любого динамического объекта, который описан моделью Simulink. В рассматриваемом случае такой моделью является нелинейная динамическая модель каталитического реактора CSTR. Процедура идентификации позволяет построить нейронную сеть, которая будет моделировать динамику управляемого процесса. Если модель должна использоваться при настройке контроллера, то ее следует создать прежде, чем начнется расчет контроллера. Кроме того, вам может потребоваться создание новой модели объекта, если спроектированный контроллер будет функционировать неудовлетворительно. 212 Нейронные сети. MATLAB 6
i) Plant tdtntdicoJion tic Wndow Hct> J0x; Planl Identification ScedHiiJenLayei ( 7 Sarrtfng IrtavjJ ltcc| [ 02 Г Uamsfae Tiarwig Data.. No. Delayed Plant Inpult J No. Delved Plant Gilputi | 2 2 TiainingSarnpfei Г M&amxnPbnllnpti Г lows Data Minimun Plant InpU.j Jf" Menrnunlnteival Value {кс| j jo" HinafunInle»alV«lu«.(ttC| [ 5 ГвТгП '■ P Lit* Output Data ■; MaidmumPlanlGuiaut [ ', .«HinwnPlantOulpui f SiiMnfc Plant Model '»■ .'" 20 .Biomo.'l Gnieiafe Tranng Data Impa! Dale IV £*P«tOoU ."TfaragParemetQU ; " .- ' TrarngEpodu'l5Й —" r...,Tiainr)oFunct3cr> |ьм*п^1'". ." . :■.. / •;!;,-.■;'..= ., . : i :■■.,/, .-.-iv ■-.-. -..! „>,--,, ,-rr'^ J7 U»»aiia<HWe4Wi''- ■■'. J74li«ViidajionOaU'f' >; nilrtYetSngDeta."'-.1; П4«я «буи мвииГу WH <*НЖ »Smj»OCU NWM}Tlf«l«l, KVt Рис. 9.36 Процедура идентификации требует задания следующих параметров: параметры архитектуры: Size of the Hidden Layer. Размер скрытого слоя определяется количеством используемых нейронов; Sampling Interval. Такт дискретности в секундах определяет интервал мезкду двумя последовательными моментами съема данных; No. Delayed Plant Inputs. Количество элементов запаздывания на входе модели; No. Delayed Plant Outputs. Количество элементов запаздывания на выходе модели; Normalize Training Data. Окно контроля нормирования обучающих данных к диапазону [0 1]; параметры обучающей последовательности: Training samples. Длина обучающей выборки (количество точек съема информации); Maximum Plant Input. Максимальное значение входного сигнала; Minimum Plant Input. Минимальное значение входного сигнала; Maximum Interval Value (sec). Максимальный интервал идентификации в секундах; Minimum Interval Value (sec). Минимальный интервал идентификации в секундах; Limit Output Data. Окно контроля, позволяющее ограничить объем выходных данных; только при включенном окне контроля будут доступны 2 следующих окна редактирования текста; Maximum Plant Output. Максимальное значение выходного сигнала; Minimum Plant Input Минимальное значение выходного сигнала; Simulink Plant Model. Задание модели Simulink с указанием входных и выходных портов, используемых при построении нейросетевой модели управляемого процесса. 9. Применение нейронных сетей 213
С помощью кнопки Browse вы можете выбрать любую модель из числа доступных- в рассматриваемом случае это модель каталитического реактора CSTR (рис. 9.33); Generate Training Data. Кнопка запуска процесса генерации обучающей последовательности; Import Data. Импорт обучающей последовательности из рабочей области или файла данных. Для рассматриваемого примера эти данные накоплены в МАТ-файлах cstrl, cstr2, cstr3; Export Data. Экспорт сгенерированных данных в рабочую область или МАТ-файл; • параметры обучения: Training Epochs. Количество циклов обучения; Training function. Задание обучающей функции; Use Current Weights. Окно контроля, позволяющее подтвердить использование текущих весов нейронной сети; Use Validation/Testing for Training. Выбор этих окон контроля будет означать, что по 25 % данных из обучающей последовательности будет использовано для формирования контрольного и тестового подмножеств соответственно. Итак, выбор процедуры Generate Training Data приведет к тому, что будет запущена программа генерации обучающей последовательности на интервале 1600 с для модели каталитического реактора cstr.mdl. Программа генерирует обучающие данные путем воздействия ряда случайных ступенчатых сигналов на модель Simulink управляемого процесса. Графики входного и выходного сигналов объекта управления выводятся на экран (рис. 9.37). •>Pl«ntInputOutrn*Oat» *.; НОВ! -, . . . *.. | .-;- .'■ SimiUtiunconcluded. "-'--k' i" ■ Accaptpaa- | BtjaaOaa' | Picain Accept« firicc! Pete to contipiM."; Рис. 9.37 По завершении генерации обучающей -последовательности пользователю предлагается либо принять сгенерированные данные (Accept Data), либо отказаться от них (Reject Data). Если вы принимаете данные, приложение возвращает вас к несколько измененному окну Plant Identification (рис. 9.38). Здесь часть окон недоступны, а кнопка Generate Training Data заменена на кнопку Erase Generated Data, что позволяет удалить сгенерированные данные. 214 Нейронные сети. MATLAB 6
*> Plant Identification - -■;.':■?' "',''- а-Я1 Fie Window Help Plant Identification Size cJ Hidden Layei 1 ■"■---■ I Г" HwmaK:e Training Date 7 ^.Delayed Plant Inputs Г No. Delayed Plant Outpute Г 2 2 = =--.'-,Tr.v!i-. | V.-s:v.- .;-.'■;.-..: | >-.::.::\-.s-yr±? | •.••■•к.-.л I-...-.-U- л:.:?^:) 1 ■/"■>.»P,l':-,i.rS-.:./=ift;i';C; 1 — TiairingDeta ■ j «■30 F u:*0vi.'Da:i ,; Н^>йГ-1?г-«0:д,чй | X; 0 №№■"«*№*>'' | M v, ■ u^J-crtiteJtf ^-v-J * JCSTft -'.'InprtMa: 'VJ ,!.-!'1С*ввРл;'"-| Twining Paiamelere^ Twining Epochs | 200 ,' ' - TwiningFusion.[traWm 3': I* UteCyttentWeiflW?'; ,. I? UseVeSdalionDale: £ .Г Ike Tasting Data \ ; . TfainNelwoik" 1 ""■-' 0^. I '-^ Cartceb^,'-|;^л"*№$£:* |{; . Youi training data xet has 8000 tamplejj -'"<■' -You can now tiain the netwoik."Л-- -M Рис. 9.38 В окне фрейма содержится сообщение Обучающая последовательность состоит из 8000 замеров. Можно начинать обучение нейронной сети. Для этого следует воспользоваться кнопкой Train Network (Обучить сеть). Начнется обучение нейросетевои модели. После завершения обучения его результаты отображаются на графиках, как это показано на рис. 9.39, с и б, где построены соответственно результаты обучения и тестирования на контрольном множестве. *) Tiaining date foi Ш Pt = •' ' - СИ'..' - DQ I :-!Е^ё ЕЙГ Vtw£ im«tt? Iooij-VWindow Vjtieip. Vu-:»..] -> Validation date foi NN PiedictiyaCo&Mo □ j Efc' ' ttaC^Xln^4l%'|-^rfdo«. щ; \^» j.-;? a?^lni>»rt?u^^p;>:\j*larit Ouipui/л;;=:Ц с""'4' I." 0.02 •2pq:;. Efrb'r- 0 500 1000 time (si 0 500 1000 time (si -0.02 ...joo-^oi';;-200 -wo.:- -v^ii^NH Output 23r ftm 0 200 400 0. 200 400 time (9) ■■"_",• ■ ;. lime (s) Рис. 9.39 9. Применение нейронных сетей 215
Текущее состояние отмечено в окне Plant Identification (рис. 9.40) сообщением Обучение завершено. Вы можете сгенерировать или импортировать новые данные, продолжить обучение или сохранить полученные результаты, выбрав кнопки ОК или Apply. В результате параметры нсйросетевой модели управляемого процесса будут введены в блок NN Predictive Controller системы Simulink. •4 Plan» Identification .He Wind*».-'heiR*-;.;; ■mac' Plant Identification: . , -,...... .NetwakAreftteclue — — ■ ■ b«*o(Htcfctoritj&>«-| 7 *.. .No.Delved Plan! Inpcjtt j , - - b-s-.5frj.l«c.v^i«et-| 0.2 ;:.•-No.DrieytdPtontOUpUJ p г 2 'Trailing Ma.' тшп^:ытттш ''■■*« *Р5Г ?^шашйШа^щщ|шаь^р .Jie'nmg Рвгатвмй.; ^Vi-"?^..' ~Тиипд Epoch»- j %$ ^^;''Т'впгв'Л»фп:|вАйп ^11 \?I7.UseDiwty/efjhfsji-.a 17,U»ValtitiwOete^^r;^J«^Detai^;'_■ TiehNetwoik.-i'j TiaMiina.compIete. You can generate1 oi inipotl ne«;d*ta,:ci continue^training or; Рис. 9.40 После этого мы вновь возвращаемся к окну Neural Network Predictive Control (рис. 9.35) и можем установить параметры оптимизации: Cost Horizon (N2). Верхний предел суммирования в показателе качестваNi= 7, нижний предел N\ фиксирован и равен 1; Control Horizon (Nu). Верхний предел суммирования при оценке мощности управления Nu = 2; Control Weighting Factor (p). Коэффициент веса для составляющей мощности управления р = 0.05; Search parameter (а). Параметр одномерного поиска, задающий порог уменьшения показателя качества, а = 0.001; Minimization Routine. Выбор процедуры одномерного поиска; выбрана процедура csrchbac; Iterations Per Sample Time. Число итераций на 1 такт дискретности равно 2. Как только параметры оптимизации установлены, следует подтвердить это нажатием кнопок ОК или Apply. В результате параметры регулятора будут введены в блок NN Predictive Controller системы Simulink. 216 Нейронные сети. MATLAB 6
'W Возвращаемся к модели Simulink (рис. 9.34) и начинаем моделирование, выбрав опцию Start из меню Simulation. В процессе моделирования выводятся графики входа и выхода управляемого процесса (рис. 9.41). Рис. 9.41 Из анализа полученных данных следует, что реакция системы на ступенчатые воздействия со случайной амплитудой вполне удовлетворительна, имеет колебательный характер с достаточно быстрым затуханием; на интервале 20 с вес воздействия эффективно отрабатываются. Таким образом, регулятор с предсказанием, реализованный в виде нейронной сети, можно использовать для управления каталитическим реактором с непрерывным перемешиванием. 9.3.2. Регулятор NARMA-L2 Нейросетевой регулятор, описанный в этом разделе, использует в качестве модели управляемого процесса модель нелинейной авторегрессии со скользящим средним (Nonlinear Autoregressive-Moving Average-N ARM A-L2). Схема демонстрационного примера управления магнитной подушкой показана на рис. 9.42. Model Browser TIAJMMJ СВЛЬ*1|.Г з-5йВЩ8ЭШ| '- S Mwelnfo > |>j Morelnfo2 ё- Ш NARMA-L2 Controller s- ЙН netsum !- ;Ш nelsuml ' :- 5$ netsum2 -■■ &i netsum3 ]■ Щ purelin :- ^| purelinl - iby tansig i-! tansigl - ±r\ Plant [Magnet Levitation] - ^з X[2Y] Graph Рис. 9.42 Окно Model Browser в левой части рисунка содержит перечень всех блоков, входящих в состав системы управления, представленной в виде модели системы Simulink. 9. Применение нейронных сетей 217
Управляемым объектом является магнит, который движется только в вертикальном^ v 't направлении в электромагнитном поле, как это схематично показано на рис. 9.43. Рис. 9.43 Уравнение движения этой системы имеет вид: -■2'" 0 dy(t) d2y(t) =*-g + a i (О (9.6) dt1 ° ' М y(t) M dt где y(t) - расстояние движущегося магнита от электромагнита; g - ускорение силы тяжести; а~ постоянная магнитного поля, зависящая от числа витков обмотки и намагниченности электромагнита; i(t) - управляющий ток электромагнита; М ~ масса магнита; Р~ коэффициент вязкого трения. Соответствующая динамическая модель, реализованная в системе Simulink, показана на рис. 9.44. Точно такую же модель, но с конкретными числовыми данными вы сможете увидеть на экране терминала, если активизируете блок Plant (Magnet Levitation) в окне Model Browser. Output Рис. 9.44 Заметим, что рассматриваемая динамическая система является нелинейной, и мы будем строить ее дискретную нелинейную модель как авторегрессионную модель со скользящим средним, или NARMA-модель, в форме y(k + d) = N[y(k)>y(k-\),...,y(k-ri + l),u(k),u(k-l),...,u(k-n + l)], (9.7) где у(к) - выход модели; d - число тактов предсказания; и(к) - вход модели. На этапе идентификации необходимо построить нейронную сеть для NARMA-модели вида (9.7). Эта процедура аналогична описанной выше процедуре идентификации для регулятора с предсказанием. Если требуется спроектировать следящую систему, которая обеспечивает движение по заданной траектории y{k+d)=yr{k+d), _ (9 8) 218 Нейронные сети. MATLAB 6 9. П
(9Л0) то это означает, что необходимо сформировать нелинейный регулятор следующего обшего вида: i((k) = G\y(k), >(*-l),-, y(k~n + \)tyr(k + d), «(*-]),-, M(ft-m + l)]. (9.9) Хотя такой регулятор с помощью нейронной сети и может быть сформирован, однако в процессе минимизации среднеквадратичной ошибки он требует чрезмерных вычислений, поскольку использует динамический вариант метода обратного распространения ошибки [16]. для практического решения задачи слежения Нарсндра (Narendra) и Макхопадхаи (Mukho- padhyay) [31] предложили приближенную NARMA-модель с выделенной составляющей управления. Такая модель регулятора, именуемая моделью NARMA-L2, имеет вид: yik + d) = f[y(k),y(k~\),...ty(k-n + l\u(k-l),...,u(k~m + \y) + + Siyik\ y(k -1),.... у{к - л +1), и{к -1),.... и(к - т +1)] «(*). Преимущество этой формы состоит в том, что теперь текущее управление можно непосредственно вычислить, если известна желаемая траектория уг, предыстория управления {и(к - 1),.... и(к - т + 1)}, а также предшествующие и текущее значения выхода {у(к),...,у(к~п+1)}: и(!:) =- ■>,г(* + <0-/Ь<*>» J**-1)» "» ЛЬ-п + 1), и(к-1),..., иЦс-т + Щ , (9.11) gbik), у{к-\\ ..., у(к-п + \\ и(к-\),..., и(к-т + \)] Непосредственное применение этого соотношения для реализации регулятора затруднительно, поскольку управление и(к) зависит от текущего значения выхода^). Поэтому управление (9.11) модифицируется следующим образом: yr(k+d)~f[y(k), tfft-1),..., tf*-л + 1), и(Л-1),..., и(к-т + 1)] и(к + 1)=- g[y(k), у(к-\),..., у(к-п + \\ и(*-1),..., и(*-и + 1)] (9.12) но при этом параметр предсказания должен удовлетворять условию d > 2. На рис. 9.45 показана структура соответствующего регулятора в виде нейронной сети. Аппроксимация ,? Г ;i'(rt G+S^H a'U) r+0-U и(м1) ш-И) л'О) Аппроксимация / Рис. 9.45 9. Применение нейронных сетей 219
Здесь следует обратить внимание на участки сети, которые выполняют аппроксима^ цию нелинейных операторов g и/в виде выходов g = a (t) и / = а (0. Входами регуля- ' .4 тора являются сигналы y(t+\) и «('+l)i последний реализован в виде обратной связи, ;- а также эталонный сигнал »(/+2). Блоки задержки осуществляют запоминание соответст- ] вующих последовательностей входа и выхода, а затем используются двухслойные ней- ..--.; ронные сети, которые формируют оценки нелинейных операторов и вычисляют сигнал 1 управления в форме (9.12). , ! Общая структурная схема системы с регулятором NARMA-L2 показана на рис. 9.46. " ;; 1—' Рис. 9.46 На схеме явным образом выделена эталонная модель, которая задает желаемую траекторию для выхода управляемого процесса. Демонстрационный пример NARMA-L2 Controller использует следующие файлы, размещенные в каталоге toolbox\nnet\nncontrol. МАТ-файлы данных: ЬаШ- данные для обучения нейросетевой модели магнитной подушки. Функции активации, используемые в нейронной сети контроллера NARMA-L2: netinv - функция активации (1/п); dnetinv - производная функции активации (1/п). Модели Simitlink: ballrepelO - модель магнитной подушки; narmamaglev - GUI-приложение для контроллера NARMA-L2. Вспомогательные функции: sfunxy2 - S-функция для вывода графиков; nncontrolutil - утилита, обеспечивающая возможность обращения к частным функциям из системы Simulink. Выполнить запуск демонстрационного примера можно несколькими способами: • в окне запуска приложений Launch Pad выбрать опцию Demos для ППП Neural Network Toolbox; • ввести команду narmamaglev в командном окне системы MATLAB. 220 Нейронные сети. MATLAB 6
Для того чтобы начать работу, необходимо активизировать блок NARMA-L2 Controller двойным щелчком левой кнопки мыши. Появится окно, показанное на рис. 9.47. ■>) Plan! IdcnUttcolnn ■ HARWA-L2 Па Wrrfw Hofe HHQi Rant Identification - NARMA-L2 Sorabv]lrf«v,sl|iec) | P NatnalieTui-ingDeta Э 001 Ho.DAv*dPVrtlr«x«j j No. Ddvad[Plant tepUiJ 3 2 TmnoflOol* TrA*flSKfttet | ioooq , P UnJOiiipuiCrte '. KanrunPltrllnput | 4 MaifMnBertOiJput | MirinunPtanllrctf [ ™ MenrwnlrtaYglVufcif bed I i'"" HtwMjmlnt«MttVali»{seel j oi [ЬАецеЯ GmetJaTnirmaData j lnpoilDiU-;";\'"[,;.bi5- Е*пйШа#-' MirinumPUrilOi/pU j 5 Smft* Plant Modet. *„' J,r bow*,'-1 Tiering Petsnelan. TurngEpochi j 755 TtAJngFmefion ]t,irim 7]'; P UieCJmntWeehU ' P UwVdidalionDt**;: -^PjteTeibi'pita^'i; ^ Generate ш hekiH data before Lwwg the печо! network ptanl.,; Рис. 9.47 Обратите внимание, что это окно дает возможность обучить модель NARMA-L2. Отдельного окна для обучения регулятора нет, так как регулятор NARMA-L2, в отличие от регулятора с предсказанием, определяется непосредственно по модели. Это окно работает так же, как и другие окна идентификации объекта управления, поэтому повторно подробно процесс обучения рассматривать не будем. После окончания обучения нажать на клавишу ОК. для ввода данных регулятора в модель Simulink. Возвращаемся к модели Siraulink (см. рис. 9.34) и начинаем моделирование, выбрав опцию Start из меню Simulation. Графики задающего сигнала и выхода системы приведены на рис. 9.48. ft....] pTTL.. ife^w : : l« ; j t * 1 * ♦ ! ! ! 1 ! -:i У '■s * I J . 1.5-■ Рис. 9.48 Из анализа полученных данных следует, что реакция системы на ступенчатые воздействия со случайной амплитудой вполне удовлетворительна, имеет колебательный характер с достаточно быстрым затуханием; на интервале 5 с все уставки эффективно отрабатываются. Таким образом, регулятор NARMA-L2, реализованный в виде нейронной сети, можно использовать для управления магнитной подушкой. 9. Применение нейронных сетей 221
9.3.3. Регулятор на основе эталонной модели В этом разделе описана система управления с эталонной моделью, при реализации которой используются 2 нейронные сети: для регулятора и для модели объекта управления. Схема демонстрационного примера управления звеном робота показана на рис. 9.49. Made) Browser f^pfbp * ^йГшН^Шд .r.,"^ Model Reference £- tr NN Controller I .-•■ Q neUun ■ g; nelsuml t£ purel'n tr tan:ig £-£>; NNPIartt • ■ 'b-[ netsum jb^' nelsuml 2>j pureCn u- lant'e 2> Mote Info i£ Mo[elnlo2 :-2>j Plan) (Robot Arm) -i8X12Y) Graph R»4do* Ч*сччо| a Sim ufol Mela Рис. 9.49 Окно Model Browser в левой части рисунка содержит перечень всех блоков, входящих в состав системы управления, представленной в виде модели системы Simulink. В этом демонстрационном примере цель состоит в управлении движением одного звена робота, как это показано на рис. 9.50. Рис. 9.50 Уравнения движения звена: й*ф Аф • = -lOsin0-2—-+н, dr dt (9.13) где ф- угол поворота звена; к - момент, развиваемый двигателем постоянного тока. Цель обучения регулятора состоит в том, чтобы движение звена отслеживало выход эталонной модели: где у г ~ выход эталонной модели; г- задающий сигнал на входе модели. (9.14) 222 Нейронные сети. MATLAB 6
Соответствующая динамическая модель, реализованная в системе Simulink, показана яа рис. 9.51. Q> Velocity <ь Position Friction 10*sin(u(1J) У Gravity Рис. 9.51 Структурная схема, поясняющая принцип построения системы управления с эталонной моделью, показана на рис. 9.52. Командный вход Эталонная модель Ошибка управления Нейронная сеть регулятора Нейронная сеть модели объекта -Ф *©-► +> Объект управления Управляющий вход Ошибка модели *-► Выход объекта . Рис. 9.52 В ней следует выделить эталонную модель, которая задает желаемую траекторию движения звена робота, удовлетворяющую дифференциальному уравнению (9.14), а также нейронные сети, реализующие регулятор и модель объекта управления. Архитектуру нейронной сети регулятора можно описать профилем 5-13-1 (5 входов, 13 нейронов скрытого слоя и 1 выход). Она показана на рис. 9.53 и имеет 2 слоя. Здесь же показана и нейронная сеть модели объекта, которая также состоит из двух слоев. Линии задержки, используемые для формирования входов нейронных сетей, имеют такт дискретности, равный 0.05 с. 9. Применение нейронных сетей 223
Нейронная сеть регулятора "Л n'tf) f LW': J ■HZr f L '-*Er L a (0 v. Нейронная сеть модели объекта J Рис. 9.53 Демонстрационный пример Model Reference Control использует следующие файлы, размещенные в каталоге toolbox\nnet\nncontrol. МАТ-файлы данных: robotl, robot2 -данные для обучения нейросетевой модели звена робота; robotl norm, robot2norm, robot3norm - нормированные данные для обучения нейросетевой модели звена робота; robotl ref- данные для обучения нейросетевой модели контроллера. Обучающие функции нейронных сетей: srehbaexe - процедура одномерного поиска на основе перебора с возвратом; trainbfgc - модифицированная процедура алгоритма BFGS для расчета системы управления с эталонной моделью. Модели Simulink: rnrefrobotarm - модель системы управления звеном робота; mrefrobolarm2 - модель системы управления звеном робота с нормированными данными; robotarm - динамическая модель звена робота; robotref- эталонная модель. Вспомогательные функции: sfunxy2 - S-функция для вывода графиков; nncontrolutil — утилита, обеспечивающая возможность обращения к частным функциям из системы Simulink. 224 Нейронные сети. MATLAB 6
Выполнить запуск демонстрационного примера можно несколькими способами: • в окне запуска приложений Launch Pad выбрать опцию Demos для ППП Neural Network Toolbox; • ввести ком анды mrefrobotarm или mrefrobotarm2 в командном окне системы МATLAB в зависимости от того, используется ли модель с ненормированными или нормированными данными. Для того чтобы начать работу, необходимо активизировать блок Model Reference Controller двойным щелчком левой кнопки мыши. Появится окно, показанное на рис. 9.54. •} Mode) Fteteience Ctmtio) Re. Window Help ;_ -.";.' у.. НПО Model Reference Gontrot Г Е Size d HiddenLfljwf ■.•r.-,ii*rir.iwAD«4 ■" netwa 13 DIE No. Delayed Reference Inputs Г - No. ОЙауйСогйоЬ* Outputs Г ; No. DelaywiPlartpiilfkas j •- 2 1 - - • . г MeMfijurnRefetence Value 1 MirmH^i Reference Value j Manrnun Interval VeiJe(jeel | -, Minimum Interval Value [tec], j .- ; Generate TtaWng Date' j"'" — TwWng.Oalo „.,■ .—: - , „./ „.., i _- """,/ "-, г*'* ^ *,„;*'.: \ '. "■ " "" f'mmim^^m Ttabwig EwonetesJ;-— "-" Cot*q|eiTfainIngEpochs<: .-,P? U^CuiertWeigHj . -CwtootfcrTrernir^'Segtr*^*-.!3Q ■JT' Use CwriiiaBVe.TteKng - .. -J^," v, -r. Petioiro plant identification beforecontrpliei training*: Рис. 9.54 Особенность рассматриваемой системы управления заключается в том, что следует построить 2 нейронные сети: модели объекта управления и самого регулятора. Разумно начать с построения модели объекта управления и в окне, показанном на рис. 9.54, выбрать кнопку Plant Identification. При этом откроется окно Plant Identification, которое показано на рис. 9-55. 9. Применение нейронных сетей 225
*> Plant Identification Fife Window Help : . -»**-.-.жэи Plant Identification Network AicKteetwe - Size ct Hidden Leyei Г Samp£ngtnl«vat{sec) Г . P' NomwSze Ttrirwig Data' 0.C5 No. Delayed Ptart Inputs I 2~ Ho. Delayed Rant Outputs j J" TiainingDeta ' !.'.'•' Trai^ Sampler] 10000 ;7.Ma»mumPknUnpa.| is ::."'_'•. MiramumPleritlnpyt 1 Maximum irtwaiVate'(sec) I MirimCim InteyalValue [seel. I •)"■'■£ Maxnwn PfariOiiput' j Ji ,|У •15 ;,'i.^*.:Minimum Rant Output-1 .^-j .'■' | lObotaim^i< "'"Genwate fiaririg Data' j ' \ Import bata;^ ^E^t.Data^.MH: Рис. 9.55 Для построения нейросстевой модели объекта управления следует выбрать кнопку Generate Training Data и далее следовать рассмотренной ранее процедуре идентификации. Параметру Training Epochs целесообразно установить значение, равное 50, чтобы сократить время вычислений. Если результаты идентификации вас удовлетворяют, то следует подтвердить это нажатием кнопки Accept Data в окне Plant Input-Output Data, в противном случае выбрать кнопку Reject Data и затем сформировать новые данные. После этого вы вновь возвращаетесь в окно Model Reference Control (рис. 9.54). Теперь для обучения регулятора следует выбрать кнопку Generate Training Data, чтобы сгенерировать обучающие данные. Эти данные в виде графиков появягсяв окне Input-Output Data for NN Model Reference Control, и вам вновь необходимо подтвердить или отвергнуть эти данные. Если данные приемлемы, то в окне Model Reference Control следует выбрать кнопку Train Controller (Обучить регулятор). После того как обучение окончено, графики выходов эталонной модели и объекта управления выводятся на экран (рис. 9.56). Обучение. регулятора занимает весьма значительное время, поскольку обучение использует динамиче^ ский вариант метода обратного распространения ошибки [16]. 226 Нейронные сети. MATIAB 6 ■
■ 200 - :r... 250-' тт£&штт Рис. 9.56 Если точность слежения за эталонной моделью неудовлетворительна, то можно продолжить обучение регулятора с тем же набором данных, снова воспользовавшись кнопкой Train Controller. Если для продолжения обучения необходимо использовать новый набор данных, следует воспользоваться кнопками Generate Data или Import Data, причем, если вы хотите продолжить обучение с выбранными весами, следует сделать отметку в окне контроля Use Current Weights. По окончании обучения регулятора нажать на клавишу ОК, вернуться к модели Simulink (см. рис. 9.49) и начать моделирование, выбрав опцию Start из меню Simulation. Графики эталонного сигнала и выхода объекта управления показаны на рис. 9.57. . ■:o.!*:-:/.-'--iOv:?.;.y:20-.»'-- зо - ад^^-.го-й^'Лбог^-" -->~4^^~:¥-W; t.c ' :^'гШ:М&:Ш:^ Рис. 9.57 -' Из анализа полученных данных следует, что реакция системы на ступенчатые воздействия со случайной амплитудой носит монотонный характер и отрабатывается в пределах 3 с. Это свидетельствует о хорошем качестве регулятора Model Reference Controller для управления звеном робота-манипулятора. 9. Применение нейронных сетей 227
Часть 2. ОПЕРАТОРЫ, ФУНКЦИИ И КОМАНДЫ 10. ВЫЧИСЛИТЕЛЬНАЯ МОДЕЛЬ НЕЙРОННОЙ СЕТИ ППП Neural Network Toolbox использует специальный класс объектов network object. Эти объекты представлены в ППП в виде массивов записей, поля которых определяют их свойства, характеристики и параметры. Массивы записей позволяют задать вычислительную модель нейронной сети, для которой используется стандартное имя net, являющееся также и именем массива записей. 10.1. Описание сети Описание архитектуры Архитектура нейронной сети характеризуется количеством входов, слоев, выходов, целей, смещений, а также топологией их соединения. Перечисленные ниже поля массива записей net определяют свойства нейронной сети, связанные с ее архитектурой. net .numlnputs .numLayers .biasConnect .inputConnect .layerConnect .outputConnect targetConnect numOutputs numTargets numlnputDelays numLayerDelays Tun Integer >= 0 Integer >= 0 Boolean array Boolean array Boolean array Boolean array Boolean array Integer >= 0 (только для чтения) Integer >= 0 (только для чтения) Integer >= 0 (только для чтения) Integer >= 0 (только для чтения) Размер 1x1 1x1 NumLayersxl NumLayers x Numlnputs NumLayers x NumLayers 1 xNumLayers IxNumLayers 1x1 1x1 1x1 1x1 Значение по умапчатио 0 0 0 0 0 0 Имя поля Количество входов сети Количество слоев Матрица связности для смещений Матрица связности для входов Матрица связности для слоев Матрица связности для выходов Матрица связности для целей Количество выходов сети Количество целей сети Максимальное значение задержки для входов сети Максимальное значение задержки для слоев сети 228
nurnlnputs число входов количество векторов входа сети. Количество векторов входа следует отличать от количества элементов вектора входа. Число входов задается целым положительным числом и указывает, как много векторов входа подано на есть; по умолчанию 0. В свою очередь, количество элементов каждого входного вектора задастся свойством inputs{i} .size. Любое изменение свойства numlnputs будет влиять на размеры матрицы связности inputConnect и массивов ячеек inputs {i}. numLayers число слоев Количество слоев. Число слоев задается целым положительным числом; по умолчанию 0. Любое изменение этого свойства будет влиять на размер матриц связности biasConnect, inputConnect, IayerConnect, ouiputConnect, targetConnect, а также размеры массивов весов и смещений IW, LW, Ь. biasConnect матрица связности Матрица связности для смещений. Это одномерная булева матрица размера N(Xl, гдеТ^/ - количество слоев, определяемых свойством numLayers. Наличие или отсутствие смещения в слое / отмечается в элементе вектора biasConnect(i) как 1 или 0 соответственно. Наличие смещения означает, что в массивах ячеек biases{/} и b{i} будут созданы структуры, задающие все характеристики смещения. inputConnect матрица связности Матрица связности для входов. Это булева матрица размера NjxNj, где N, - количество слоев, определяемых свойством numLayers, и N; - количество входов, определяемых свойством numlnputs. Наличие или отсутствие веса при связывании слоя i со слоем] отмечается в элементе матрицы inputConnect(i, j) как 1 или 0 соответственно. Наличие веса означает, что в массивах ячеек inputWeights {i} и IW {i} будут созданы структуры, задающие характеристики весов входа. IayerConnect матрица связности Матрица связности для слоев. Это булева матрица размера NyxN/, где N; - количество слоев, определяемых свойством numLayers. Наличие или отсутствие веса в слое i по входу j отмечается в элементе матрицы layerConnect(i, J) как I или 0 соответственно. Наличие веса означает, что в массивах ячеек layerWetghts{/} и LW{i} будут созданы структуры, задающие характеристики весов слоя. outputConnect матрица связности Матрица связности для выходов. Это одномерная булева матрица размера 1 xNf, где N/ - количество слоев, определяемых свойством numLayers. Наличие или отсутствие выхода в слое j отмечается в элементе вектора outputConnect(i) как 1 или 0 соответственно. Наличие выхода изменяет значение свойства numOutputs и означает, что в массиве ячеек outputs{i} будет сформирована структура, задающая характеристики выхода. targetConnect матрица связности Матрица связности для цепей. Это одномерная булева матрица размера 1 xN/, где N/ - количество слоев, определяемых свойством numLayers. Наличие или отсутствие целевого выхода в слое i отмечается в элементе вектора targetConncct(i) как 1 или 0 соответственно. 10. Вычислительная модель нейронной сети 229
Наличие цели изменяет значение свойства numTargets и означает, что в массиве ячеек ~*'А - targcis{i} будет сформирована структура, задающая характеристики целевого выхода. А ".:-J ■ numOutputs число выходов (только для чтения) ~у. Количество выходов. Число выходов определяется количеством единиц в матрице связно- Л сти для выходов; по умолчанию 0. Оно может быть вычислено следующим образом: \j. numOutputs = sum(outputConnect) numTargets число целей (только для чтения) - .1 Количество целевых выходов. Число целей определяется количеством единиц в матрице: ^ связности для целей; по умолчанию 0. Оно может быть вычислено следующим образом М numOutputs = sum(targetConnect) -'"] numlnputDelays максимальное значение задержки (только для чтения) ,Ц Максимальное значение задержки для входов. Это свойство определяет максимальное -."'. значение задержки для входных последовательностей, по умолчанию 0. Оно может быть .:' ч вычислено следующим образом: numlnputDelays = 0; for i=1 :net.numLayers for j=1 -.net.numlnputs if net.inputConnect(ij) numlnputDelays = max(... [numlnputDelays net.inputWeights{ij}.delays]); end end end numLayerDelays максимальное значение задержки (только для чтения) Максимальное значение задержки для слоев. Это свойство определяет максимальное значение задержки для всех слоев сети, по умолчанию 0. Оно может быть вычислено следующим образом: num LayerDelays = 0; for i=1 rnet.numLayers for j=1 :net.numl_ayers if net.layerConnect(iJ) numLayerDelays = max(... [numLayerDelays net.layerWeights{i,j}.delays]); end end end Функции инициализации, адаптации и обучения Перечисленные ниже свойства объекта net включают перечень функций, которые используются для инициализации, адаптации и обучения нейронной сети. 230 Нейронные сети. MATLAB 6 .
net _ .initFcn _ .initParam .adaptFcn .adaptParam _ .trainFcn Tun i | Char ! Размер, i состав initcon 1 initlay 1 initnw I initnwbl initzero i 1 i Char i i Char Char adaptwb 1 trains filifiii iifllllll mae 1 mse I msereg 1 sse Значение no умолчанию (1 '' u II [1 1 I [] Имя поля \ [ Функции инициализации j i Параметры функции инициализации Функции адаптации Параметры функции адаптации Функции обучения Параметры функции обучения Функции оценки качества обучения Параметры функции оценки качества обучения .trainParam .performFcn — .performParam initFcn initcon I initlay I initnw I initnwb I initzero Функции инициализации. Это свойство определяет, какая функция инициализации initFcn будет использована для задания начальных матриц весов и векторов смещений при вызове метода init для всей сети. При изменении этого свойства параметры функции инициализации initParam будут использовать значения, соответствующие новой функции. Пользователь может расширить список применяемых функций инициализации. initParam параметры функции инициализации Параметры функции инициализации. Это свойство определяет набор параметров для используемой функции инициализации. Узнать набор таких параметров можно, применив оператор help в следующей функциональной форме: help(net.initFcn). adaptFcn adaptwb I trains Функции адаптации. Это свойство определяет, какая функция адаптации adaptFcn будет использована при вызове метода adapt. При изменении этого свойства параметры функции адаптации adaptParam будут использовать значения, соответствующие новой функции. Пользователь может расширить список применяемых функций адаптации. adaptParam параметры функции адаптации Параметры функции адаптации. Это свойство определяет набор параметров для используемой функции адаптации. Узнать набор таких параметров можно, применяя оператор help в следующей функциональной форме: help{net.adaptFcn). 10. Вычислительная модель нейронной сети 231
trainFcn trainb I trainbfg i tratngbr Itrainc 1 traincgb I traincgf I traincgp ItraingtjS ttraingda t traingdm I traingdx I trainlm 1 trainoss I trainr I trainrp i trainscg " Функции обучения. Это свойство определяет, какая функция обучения trainFcn будет ис-Ш1г пользована при вызове метода train. При изменении этого свойства параметры функции-Г"~ обучения trainParam будут использовать значения, соответствующие новой функции..^ Пользователь может расширить список используемых функций обучения. trainParam параметры функции обучения Параметры функции обучения. Это свойство определяет набор параметров для используемой функции обучения. Узнать набор таких параметров можно, применяя оператор' help в следующей функциональной форме: help(net.trainFcn). performFcn mae i mse t msereg I sse Функции оценки качества обучения. Это свойство определяет, какая функция оценки качества обучения performFcn будет использована при вызове метода train. При изменении этого свойства параметры функции оценки качества обучения performParam будут использовать значения, соответствующие новой функции. Пользователь может расширить список применяемых функций оценки качества обучения. trainParam параметры функции оценки качества обучения Параметры функции ог{енки качества обучения. Это свойство определяет набор параметров для используемой функции оценки качества обучения. Узнать набор таких параметров можно, применив оператор help в следующей функциональной форме: help(net.performFcn). 10,2. Описание элементов сети Эти свойства задаются с помощью массивов ячеек, которые включают структуры для описания входов, слоев, выходов, целей, смещений и весов. Описание входов Ниже приведено описание полей структуры, которая используется для описания каждого входа сети net.inputs(i}. ^net .inputs{i} —.range Тип Cell array Double array Integer >= 0 Struct Char Размер numlnputsxl size*2 1x1 1x1 1xvar Значение no умолчанию {0x1} [] 0 1x1 'Put your custom input information here.' Имя поля Описатель i-ro входа сети Допустимый диапазон значений Количество элементов вектора входа Информация пользователя Текст -.userdata I—.note inputs массив ячеек Описатель входов сети. Массив ячеек размера N,-xl, где N,- - число входов сети, равное numlnputs, состоящий из ячеек inputs{i}, каждая из которых является массивом записей для описания i-ro входа сети. range массив значений Допустимый диапазон значений для элементов, векторов входа. Это свойство определяет границы допустимых значений для элементов каждого вектора входа сети и является чи- 232 Нейронные сети. MATLAB 6
еловым массивом размера R/X2, где Rt -число элементов i-ro вектора входа равное значению поля inputs {i} .size. Это свойство используется некоторыми функциями инициализации сети, чтобы вычислить начальные значения для матриц весов входа. При изменении числа строк массива range будут автоматически изменяться параметры inputs{i}.size, input\Vcights{:, i }.size, а также размер матриц весов входа IW{:, i}. sjze количество элементов Количество элементов вектора входа. Это свойство определяет количество элементов для каждого вектора входа inputs{i} и может принимать только неотрицательные значения (по умолчанию 0). При изменении значения этого свойства будут автоматически изменяться параметр inputWeights{:, ij.size, а также размеры матриц inputs{i}.range и IW{:, i}. userdata массив записей Поле для записи информации пользователя. Это свойство обеспечивает место для записи информации, относящейся к входу i сети. Предусмотрено только одно поле inputs{ij.userdata.note для записи текста. По умолчанию оно содержит строку 'Put your custom input information here.' - "Информацию разместите здесь". Описание слоев Ниже приведено описание полей структуры, которая используется для описания каждого слоя нейронной сети net.layers{i}. net -.layers{i} —.dimensions —.distance Fen — distances —.initFcn trr-netlnputFcn j--dispositions —.size —.topoIogyFcn —.transferFcn —.userdata I—.note Tun Cell array Double array Char Double аггау(толь ко для чтения) Char Char Array (только для чтения) Integer >= 0 Char Char Struct Char Размер, состав numLayersxl Ixnumdim boxdist 1 distl linkdistlmandist initnw 1 initwb netprod 1 netsum 1x1 gridtop 1 hextop 1 randtop compet I hardlim 1 hardlims I togsig 1 poslin 1 purelin 1 radbas Isatltn 1 satlins isoftmaxl tansig 1 tribas 1x1 1xvar Значение no умолчанию {0x1} [1 I 1 [1 * ' f J [] 0 " 1x1 'Put your custom input information here. Имя поля Описатель i-ro слоя сети Распределение нейронов по размерностям слоя Функции вычисления расстояния между нейронами Расстояния между нейронами Функции инициализации Функции накопления Положения нейронов Количество нейронов Функции топологии Функции активации Информация пользователя Текст 10. Вычислительная модель нейронной сети 233
layers массив ячеек Описатель слоев нейронной сети. Массив ячеек размера N/xl, где N, - число слоев сети, равное numLayers, состоящий из ячеек Iayersfi}, каждая из которых является массивом записей для описания /-го слоя сети. dimensions вектор распределения по размерностям Распределение нейронов по размерностям слоя. Это свойство позволяет описывать многомерные слои нейронов реальных геометрических размерностей: 1-, 2-, 3-мерные. Многомерный слой размерности numdim может быть задан вектор-строкой, элементы которой указывают число нейронов по каждой размерности, тогда их произведение будет определять общее количество нейронов в многомерном слое layers{i}.size. Знание этого свойства необходимо для определения положений нейронов layers{i}.positions, если известна функция топологии слоя layers{i}.topologyFcn. При изменении значения этого свойства будут автоматически изменяться параметр Iayers{i}.size, а также положения нейронов layers{i}.positions и расстояния между ними layers{i}.distances. distanceFcn boxdist I dist I iinkdist 1 mandist Функция оценки расстояния между нейронами. Свойство layers{i}.distanceFcn задает функцию, которая используется для вычисления расстояния между нейронами в слое i. При замене функции будут автоматически пересчитаны значения расстояний между нейронами слоя layers{i}.distances. Пользователь может расширить список применяемых функций оценки расстояния. distances значение расстояний (только для чтения) Расстояния между нейронами. Свойство layers {i} .distances определяет расстояния между нейронами в i-u слое. Их значения зависят от используемой функции оценки расстояния layers {i} .distanceFcn. initFcn tnitnw i initwb Функция инициализации слоя. Это свойство определяет, какая функция инициализации layers {i}.initFcn применяется для слоя i. Если свойство net.initFcn имеет значение initlay, то будет применяться указанная функция инициализации слоя при вызове функции net = = init(net). Пользователь может расширить список применяемых функций инициализации. netlnputFcn netprod I netsum Функция накопления. Это свойство определяет, какая функция накопления layers{ i}.netlnputFcn применяется для слоя /. Пользователь может расширить список применяемых функций накопления. positions положения нейронов (только для чтения) Размещение нейронов в слое. Это свойство определяет положения нейронов layers {i} .positions в i-u слое. Их значения зависят от используемой функции топологии многомерного слоя layers {i} .topoIogyFcn и его размера layers {i} .dimensions. Для построения графика расположения нейронов в многомерном слое рекомендуется использовать М-функцию plotsom. 234 Нейронные сети. MATLAB 6
Пример: Если первый двумерный слой нейронной сети net имеет вектор распределения по размерностям nei.laycrs{ 1}.dimensions, равный [4 5], а функция топологии слоя net.Iaycrs{ 1} .lopologyFcn - hextop, то нейроны этого слоя будут расположены, как показано на рис. 10.1. plotsom{net.layers{1}.positions) \ \ЛЛЛ I /\ 7^ 7\7 ' V У \c V. \/ !": 'YYVN: i/VW 5 12 3 SOsifcctf.) РИС. ЮЛ size количество элементов Количество нейронов в слое. Это свойство определяет количество нейронов в слое layers{i}.size и может принимать только неотрицательные значения (по умолчанию 0). При изменении значения этого свойства будут автоматически изменяться параметры inputWeights{i,:} .size, layerWeights{i,: J.size, biases{i}.size, а также размеры матриц весов IW{i,:}, LW{i,:}, LW{:, i} и смещений b{i}. Кроме того, изменяются параметры outputs{i J.size и targets{i J.size, если для нейронной сети заданы выходы и цели. Наконец, при изменении этого свойства изменяется параметр размера нейронного слоя layers {i J .dimensions, которому присваивается значение свойства layers{ i J .size. Это приводит к тому, что слой i преобразуется в одномерный; если необходимо сохранить многомерную структуру слоя, то следует изменить значения элементов вектора layers {i J .dimensions. topologyFcn gridtop 1 hextop I randtop Функция задания топологии слоя. Это свойство определяет функцию, которая используется для вычисления положений нейронов layers{ij.positions в слое i. При замене функции эти положения будут пересчитаны автоматически. Пользователь может расширить список применяемых функций задания топологии. Пример: Если первый двумерный слой нейронной сети net имеет вектор распределения по размерностям net.layersfl J.dimensions, равный [8 10], а функция топологии слоя net.layers{ 1} .topologyFcn - randtop, то расположение нейронов этого слоя будет таким, как показано на рис. 10.2 ploteom(net.layers{1}.positions) 10. Вычислительная модель нейронной сети 235
[irinJkmil. Рис. J 0.2 transferFcn compet i hardiim I hardlims I logsig I poslin I pureiin I radbas I satiin I satlins I softmax t tansig I tribas Фунщия активации слоя. Это свойство определяет функцию активации layers{i}.transferFcn, которая используется для задания нейрона в слое /. Пользователь может расширить список применяемых функций активации. userdata массив записей Лоле для записи информации пользователя. Это свойство обеспечивает место для записи информации, относящейся к слою i нейронной сети. Предусмотрено только одно поле inputs{i}.userdata.note для записи текста. По умолчанию оно содержит строку 'Put your custom input information here.' - "Информацию разместите здесь". Описание выходов Перечисленные ниже свойства объекта net включают перечень функций, которые используются для описания выходов нейронной сети. I net L outputsfi} I—.size I—.userdata r note Tun Cell array Integer >= 0 (только для чтения) Struct Char Размер numLayersxl 1x1 1x1 txvar Значение no умолчанию {0x1} 0 1x1 "Put your custom input information here." Имя поля Описатель составляющей выхода от слоя i Количество элементов вектора выхода Информация пользователя Текст массив ячеек outputs Описатель выходов сети. Массив ячеек размера Nfxl( где N/ - число слоев сети nurnLayers, состоящий из ячеек outputs {i}, каждая из которых является массивом записей для описания выходов, которые заданы вектором связности outputConnect(i). size количество элементов (только для чтения) Количество элементов вектора выхода. Это свойство определяет количество элементов для каждого вектора выхода outputs { i} и может принимать только неотрицательные значения (по умолчанию 0). Его значение всегда совпадает со значением параметра layers{i} .size. 236 Нейронные сети. MATLAB 6
user data массив записей flone для записи информации пользователя. Это свойство обеспечивает место для записи информации, относящейся к выходу слоя i сети. Предусмотрено только одно поле outputs{i} .userdata.nole для записи текста. По умолчанию оно содержит строку 'Put your custom input information here/ - "Информацию разместите здесь". Описание целей Перечисленные ниже свойства объекта net включают перечень функций, которые используются для инициализации, адаптации и обучения нейронной сети. —.targets{i} j Cell array net' Tun \ Размер I Значение j i no умолчанию i {1x1} | {1x0} -.size j Integer >=0 ) (только для чтения) i 1x1 Имя поля I Описатель составляющей i целевого выхода от слоя i —.userdata j Struct I—.note 1x1 1x1 Char 1xvar ! "Put your custom in | put information here.'| Количество элементов целевого выхода Информация пользователя Текст targets массив ячеек Описатель целевых выходов сети. Массив ячеек размера N/X1, где N; - число слоев сети numLayers, состоящий из ячеек targets {i}, каждая из которых является массивом записей для описания целевых выходов, которые определяются вектором связности targetConnect(i). size количество элементов (только для чтения) Количество элементов вектора целей. Это свойство определяет количество элементов для каждого целевого вектора целей targets {i} и может принимать только неотрицательные значения (по умолчанию 0). Его значение всегда совпадает со значением параметра layersj i}. size. userdata массив записей Поле для записи информации пользователя. Это свойство обеспечивает место для записи информации, относящейся к целевому выходу слоя i сети. Предусмотрено только одно поле targets(ij.userdata.note для записи текста. По умолчанию оно содержит строку 'Put your custom input information here.' - "Информацию разместите здесь". Описание смещений Перечисленные ниже свойства объекта net включают перечень функций, которые используются для описания смещений в нейронной сети 10. Вычислительная модель нейронной сети 237
net —.biases{i} —.initFcn —.learn —.learnFcn —.learnParam —.size —.userdata j—.note biases Tun i Размер, состав \ Cell array = numLayersxl Char initcon 1 initzero 1 \ rands "Boolean :~0 iT " ~ Char = learncon 1 learngd 1 j learngdm 1 learnp 1 j learnpn 1 learnwh Integer >=0 '1x1 (только для чтения): Struct ! 1x1 i Char jixvar массив ячеек . Значение Имя поля \ по умолчанию \ {0x1} , Описатель вектора "1 . смещений для слоя 1 i - Функции ~] . инициализации 1 0 . Индикатор настройки ; Функции настройки • [ ] \ Параметры функции 1 настройки 0 j Количество |элементов 1x1 I Информация i пользователя 'Putyourcustominpu^ Текст information here.' ; Описатель векторов смещений. Массив ячеек размера N/xl, где Nj - число слоев сети numLayers, состоящий из ячеек biases {i}, каждая из которых является массивом записей для описания вектора смещений для слоя и Наличие или отсутствие такого вектора для слоя i определяется вектором связности biasConnect(i). initFcn initcon I initzero I rands Функция инициализации вектора смещений. Это свойство определяет, какая функция инициализации biases{i}.initFcn применяется при вызове функции ink для вычисления начального вектора смещения слоя i при условии, что свойство net.initFcn имеет значение initlay, а функция инициализации слоя Iayers{i}.initFcn имеет значение initwb. Пользователь может расширить список применяемых функций инициализации. learn признак настройки Признак настройки вектора смещений. Свойство biases{i}.learn указывает, будет ли вектор смещений для слоя i настраиваться с использованием методов adapt или train соответственно. Значение этого свойства 0 или I, по умолчанию 0, что соответствует методу адаптации. learnFcn learncon i learngd I learngdm I learnp I tearnpn I learnwh Функция настройки вектора смещений. Это свойство определяет, какая функция biases {i} .learnFcn применяется при настройке вектора смещений для слоя i при адаптации или обучении с использованием функций adaptwb и trainwb или trainwbl соответственно. Пользователь может расширить список применяемых функций настройки. При таких изменениях параметры функции настройки biases {i} .IcarnParam будут использовать значения, соответствующие новой функции. learnParam параметры функции настройки Параметры функции настройки. Свойство biases{i].learnParam определяет набор параметров для используемой функции настройки biases{i}.learnFcn. Узнать набор таких параметров можно, применяя оператор help в следующей функциональной форме: help(net.biases{i}.learnFcn). 238 Нейронные сети. MATLAB б
size количество элементов (только для чтения) Количество элементов вектора смещений. Это свойство определяет количество элементов для каждого вектора смещений biases {i} и может принимать только неотрицательные значения (по умолчанию 0). Его значение всегда совпадает со значением параметра layers {i}. size. userdata массив записей Поле для записи информации пользователя. Это свойство обеспечивает место для записи информации, относящейся к вектору смещений слоя / сети. Предусмотрено только одно поле biascs{i}.userdata.note для записи текста. По умолчанию оно содержит строку 'Put your custom input information here.' - "Информацию разместите здесь". Описание весов входа Перечисленные ниже свойства объекта net включают перечень функций, которые используются для описания весов входа. net —.inputWeights{i,j} —.delays —.initFcn —.learn —.learnFcn —.learn Param —.weightFcn —.size —.userdata 1—.note Tun Cell array Double array Char Boolean Char Char Integer >= 0 (только для чтения) Struct Char Размер numLayersxnumlnputs 1xvar initzero I midpoint I randnc I randnrI rands on learngd I learngdm I learnh I learnhd I learnis I learnk I learnlvl 1 learn Iv21 learnos 1 learnp 1 learn pn 1 learnsom 1 learnwh dist 1 dotprod 1 mandist 1 negdist 1 norm prod 1x1 1x1 1xvar Значение no умолчанию {0x1} [1 ( 1 0 < i [] 0 11x1 1 "Put your custom input information here.' Имя поля Описатель массива весов от входа j к слою / Индикатор линий задержки Функции инициализации Индикатор настройки Функции настройки Параметры функции настройки_ Функции формирования взвешенных входов j Количество 1 элементов | ! Информация ! | пользователя j Текст } i i 10. Вычислительная модель нейронной сети 239
inputWeights массив ячеек Описатель весов входа. Массив размера N,xN;, где N/ - число слоев numLayers и N,— число входов numlnputs объекта net, состоящий из ячеек inputWeights{i, j}. Каждая ячейка является массивом записей и служит для описания свойств весов, которые формируют матрицу весов. Последняя определяет веса связей слоя /' с входом j сети и согласуется с матрицей связности inputConneci(i, j). delays индикатор линий задержки Описание линий задержки. Свойство i nputWcights {i, j} - delays определяет наличие линий задержки между входом У и слоем /. Это вектор-строка, элемент которого либо равен О, либо значению задержки (положительное целое число), причем эти значения могут только возрастать. Длина этого вектора определяет количество задержанных векторов входа. При изменении значения этого свойства автоматически изменяется параметр inputWeights{i, j}.size и размер матрицы весов IW{i, j}. in it Fen initzero 1 midpoint I randnc ! randnr I rands Функция инициализации матрицы весов. Это свойство определяет, какая функция инициализации inputWeights{i, j}.initFcn применяется при вызове метода init для вычисления матрицы весов от входа./ к слою i при условии, что свойство ncLinitFcn имеет значение initlay, а функция инициализации слоя layers {iJ.initFcn имеет значение initwb. Пользователь может расширить список применяемых функций инициализации. learn индикатор настройки Индикатор настройки матрицы весов. Свойство inputWeights{i,j}.learn указывает, будет ли матрица весов для слоя i настраиваться в процессе адаптации или обучения при использовании методов adapt или train соответственно. Значение этого свойства 0 или 1, по умолчанию 0. learn Fen learngd i learngdm I learnh I learnhd I leamis i leamk i tearnlvl I !earnlv2l iearnos I learnp i iearnpn I leamsom I tearnwh Функции настройки матриц весов. Это свойство определяет, какая функция inputWeights {i,j} .learnFcn применяется при настройке матрицы весов для слоя i при адаптации или обучении с использованием функций adaptwb и trainwb или trainwbl соответственно. Пользователь может расширить список применяемых функций настройки. learn Para m параметры функции настройки Параметры функции настройки. Свойство biases{i] .learnParam определяет набор параметров для используемой функции настройки inputWeights{i,j}.learnParam. Узнать набор таких параметров можно, применяя оператор help в следующей функциональной форме: help(net.inputWeights{i,j}.learnFcn). weight Fen dist 1 dotprod I mandist i negdist I norm prod Функции для применения матриц весов. Это свойство определяет, какая функция inputWeights(i,j}.weightFcn применяется для вычисления взвешенных входов для слоя. Пользователь может расширить список таких функций. size размер матрицы весов (только для чтения) Размер матрицы весов. Свойство inputWeights{i, j}.size определяет размер матрицы весов, связывающей слой /со входом./. Это вектор-строка, в которой указано число строк 240 Нейронные сети. MATLAB 6
л столбцов матрицы весов IW; первый параметр совпадаете размером слоя layers{i}.size, второй соответствует величине length(net.inputWeights{i, j}.delays) * net.inputs{j}.size. userdata массив записей Поле Оля записи информации пользователя. Это свойство обеспечивает место для записи информации, относящейся к матрице весов слоя i сети. Предусмотрено только одно поле jnpulWeights{i,j}.userdata.note для записи текста. По умолчанию оно содержит строку ■Put your custom input information here.' - "Информацию разместите здесь". Описание весов слоя Перечисленные ниже свойства объекта net включают перечень функций, которые используются для описания весов слоя нейронной сети. net __.layerWeights{ij} —.delays —.initFcn —.learn —.learnFcn —.learnParam -.weightFcn -.size —.userdata |—.note Tun Cell array Double array Char Boolean Char Char Integer >= 0 (только для чтения) Struct Char Размер, состав {1*1} 1xvar initzero 1 midpoint 1 randnc 1 randnr 1 rands 011 го to га го «з пз то dist I dotprod I mandlst I negdist I normprod 1x1 1x1 ixvar Значение no умолчанию {0x1} [] 0 I 1 [] 11 0 1x1 Имя поля \ Описатель весов от слоя_/ к слою I Индикатор линий задержки Функции инициализации Индикатор настройки Функции настройки Параметры функции настройки Функции взвешивания Количество элементов Информация пользователя 'Put your custom inpulj Текст information here.1 ! layerWeights массив ячеек Описатель весов слоя. Массив размера N,x N/, где N/ - число слоев numLayers объекта net, состоящий из ячеек layerWeights {i, j}. Каждая ячейка является массивом записей и служит для описания свойств весов, которые формируют матрицу весов. Последняя определяет веса связей слоя / со слоем j сети и согласуется с матрицей связности layerConnect(i, j). 10. Вычислительная модель нейронной сети 241
delays индикатор линий задержки Описание линий задержки. Свойство layerWeights{i, j}. delays определяет наличие линий задержки между слоем у и слоем /. Это вектор-строка, элемент которого либо равен 0, либо значению задержки (положительное целое число), причем эти значения могут только возрастать. Длина этого вектора определяет количество задержанных векторов, поступающих на слой /. initFcn initzero I midpoint I randnc I randnr I rands Функция инициализации матрицы весов. Это свойство определяет, какая функция инициализации layerWeights{i, j}.initFcn применяется при вызове метода init для вычисления матрицы весов LW, связывающей слой / со слоем у при условии, что свойство net.initFcn имеет значение initlay, а функция инициализации слоя layers{i}.initFcn имеет значение initwb. Пользователь может расширить список применяемых функций инициализации. learn индикатор настройки Индикатор настройки матрицы весов. Свойство layerWeights{i,j}.learn указывает, будет ли матрица весов для слоя i настраиваться в процессе адаптации или обучения при использовании методов adapt или train соответственно. Значение этого свойства 0 или 1, по умолчанию 0. learn Fen leamgd I learngdm I learnh I teamhd I learnis I leamk I leamlvl I Iearnlv2| learnos I learnp I learnpn I learnsom I learnwh Функции настройки матриц весов. Это свойство определяет, какая функция inputWeights{i,j J.IearnFcn применяется при настройке матрицы весов, связывающей слой г со слоем./, при адаптации или обучении с использованием функций adaptwb и trainwb или trainwbl соответственно. Пользователь может расширить список применяемых функций настройки. learnParam параметры функции настройки Параметры функции настройки. Свойство biases{i}.learnParam определяет набор параметров для используемой функции настройки layerWeights{i, j}.learnParam. Узнать набор таких параметров можно, применяя оператор help в следующей функциональной форме: help(net.layerWeights{i,j}.learnFcn). weightFcn dist I dotprod I mandist I negdist! normprod Функции для применения матриц весов. Это свойство определяет, какая функция layerWeights{i, j}.weightFcn применяется при работе с матрицей весов, связывающей слой / со слоем j, в частности при моделировании нейронной сети с использованием метода sim. Пользователь может расширить список таких функций. size размер матрицы весов (только для чтения) Размер матрицы весов. Свойство inputWeights{i, j }.size определяет размер матрицы весов, связывающей слой / со слоем/ Это вектор-строка, в которой указано число строки столбцов матрицы весов LW; первый параметр совпадает с размером слоя layers{i}.size, второй соответствует величине lengtrKnet-layerWeightstf, jj.delays) * net.layers{j}.size. 242 Нейронные сети. MATLAB 6
userdata массив записей Ноле для записи информации пользователя. Это свойство обеспечивает место для записи информации, относящейся к матрице весов слоя i сети. Предусмотрено только одно поле layerWeights{i,j}.userdata.note для записи текста. По умолчанию оно содержит строку 'Put your custom input information here.' - "Информацию разместите здесь". Матрицы весов и векторы смещений Перечисленные ниже свойства объекта net включают перечень функций, которые используются для описания матриц весов и векторов смещений. Тип Cell array Cell array Cell array Размер NumLayers x Numlnputs NumLayers x NumLayers NumLayers x 1 Значение по умолчанию {0x0} {0x0} {0x1} Имя поля Массив ячеек для матриц весов входа Массив ячеек для матриц весов слоя Массив ячеек для векторов смещений 1W массив ячеек Матрицы весов входа. Массив ячеек IW размера tyxN,-, где N/ - число слоев numLayers и N,- - число входов numlnputs сети net, каждый элемент которого является матрицей весов, связывающей слой / со входом j сети; структура этого массива согласована с матрицей связности inputConnect(i, j). Каждая матрица весов должна иметь число строк, равное параметру layers{i}.size, а число столбцов должно удовлетворять соотношению net.inputs{j}.size * length(net.jnputWeights{i,j}.deIays) и соответствовать параметру inputWeights{i, j}.size. LW массив ячеек Матрицы весов слоя. Массив ячеек LW размера Nfx Nf, где N/ - число слоев numLayers сети net, каждый элемент которого является матрицей весов, связывающей слой i со слоем j сети; структура этого массива согласована с матрицей связности layerConnect(i, j). Каждая матрица весов должна иметь число строк, равное параметру layers {i} .size, а число столбцов должно удовлетворять соотношению net.layers{j}.size * length(net.layerWeights{i,j}.delays) и соответствовать параметру layerWeights{i, jj.size. b массив ячеек Векторы смегцении. Вектор ячеек b размера NjX 1, где N/ - число слоев numLayers объекта net, каждый элемент которого является вектором смещений для слоя i сети; структура этого вектора согласована с вектором связности biasConnect(i). Длина вектора смещений для слоя / должна соответствовать параметру biases{i}.size. 10. Вычислительная модель нейронной сети 243
Информационные поля В структуре объекта net имеются поля, предназначенные для записи информации. net Тип \ Размер - Значение __ поумолчатт I—.hint : Struct ! ixvar : 1x1 —.userdata ! Struct ; 1x1 I—.note | Char j ixvar 1x1 'Put your custom input information here.' Имя поля Информация о текущих значениях полей объекта network __ Информация пользователя Текст hint массив записей Значения полей объекта network. Это свойство обеспечивает информацию о текущих значениях полей массива записей net. Эта информация появляется в поле hint только после инициализации нейронной сети. userdata массив записей Поле для записи информации пользователя. Это свойство обеспечивает место для записи информации, относящейся к нейронной сети. Предусмотрено только одно поле userdata.note для записи текста. По умолчанию оно содержит строку 'Put your custom input information here.' - "Информацию разместите здесь". В заключение следует отметить, что для получения полной информации о структуре полей инициированного объекта network следует применять М-функцию ficldnames(<HMH_ сети>), которая будет отражать текущее состояние нейронной сети. 244 Нейронные сети. MATLAB б
11. ФОРМИРОВАНИЕ МОДЕЛЕЙ НЕЙРОННЫХ СЕТЕЙ 11.1. Модели сетей NETWORK Создание шаблона нейронной сети Блок SIMULINK: ^ъ- Синтаксис: net = network net = network(numlnputs, numLayers, biasConnect, inputConnect, layerConnect, outputConnect, targetConnect) Описание: Функция network - это конструктор класса объектов network object, используемых BnnilNNT. Функция net = network создает шаблон нейронной сети net, значения полей которого обнулены. Функция net = network(numInputs, numLayers, biasConnect, inputConnect, layerConnect, outputConnect, targctConnect) применяется как конструктор класса для написания моделей нейронных сетей. Выходной аргумент net - имя нейронной сети. Пример: Создадим шаблон нейронной сети с двумя входами (numlnputs = 2), тремя слоями (numLayers = 3) и следующими матрицами связности: BiasConnect = [ 1; 0; 0] размера numLayersxl; inputConnect = [1 1; 0 0; 0 0] размера numLayersxnumlnputs; layerConnect = [0 0 0; 1 0 0; 0 I 0] размера numLayersxnumLayers; outputConnect = [0 0 I] размера 1х numLayers; targetConnect =[0 0 1] размера 1х numLayers. net = netvrork<2, 3, [1; 0; 0], [1 1; 0 0; 0 0], [0 О 0; 1 0 0; 0 1 0], ... [0 0 ljr [001]); gensim(net) % Рис.11.1 Получим структуру, представленную на рис. 11.1. 245
Input 1 p{1} Input 2 P{2} 1 W hi W m □ у{1} Neural Network Рис. ИЛ Если раскрыть блок Neural Network, то можно выявить структуру сети, обусловленную матрицами связности inputConnect и layerConnect (рис. 11.2). р{1} ®~ Р(2} О- а{1] о а{2} mm Layer 1 l-ю am *!ШМ Layer 2 ♦О ШЬЙ—»« Layer 3 У{1} Рис. Н.2 Из анализа рис. 11.2 следует, что оба входа р{1} и р{2} действуют только на слой 1, а слои 1,2 и 3 соединены последовательно. Выходом слоя 1 является описатель а{ 1}; выходом слоя 2 - описатель а{2}; выходом слоя 3 - описатель а{3}; выход сети - описатель у {1} - совпадает с выходом слоя 3. Раскроем слои 1,2 и 3 (рис. 11.3, а-в). weight! Р11} Delays 1 IW{1.1} P(2} а£1} yyejght Delays 2 JW{1.2} purelin a{1} IS b{1} ^rpt. weioHf S—HI Delays 1 LWUI2.1} purelin ^TOL j^ Weight Delays 1 UWJ3.2} purelin aJ3} Рис. И.З На рис. 11.3, а показана схема слоя 1 со следующими обозначениями: р{ ]} - описатель входа 1 на слое I; р{2} - описатель входа 2 на слое 1; Delays 1 -линия задержки для входа 1; Delays 2 - линия задержки для входа 2; 246 Нейронные сети. MATLAB 6
IW{ 1,1} - описатель матрицы весов для входа 1 на слое 1; IW{ 1,2} - описатель матрицы весов для входа 2 на слое 1; Ь{ 1} - описатель вектора смещений на слое 1; netsum - функция накопления для слоя 1; purelin - функция активации для слоя 1; а{ 1} - описатель выхода на слое 1. На рис. 11.3, б показана схема слоя 2 со следующими обозначениями: а{ 1} - описатель входа на слое 2; Delays 1 - линия задержки; LW{2,1} - описатель матрицы весов связей слоев 1 и 2; netsum - функция накопления для слоя 2; purelin - функция активации для слоя 2; а{2} - описатель выхода на слое 2. На рис. 11.3, в показана схема слоя 3 со следующими обозначениями: а{2} - описатель входа на слое 3; Delays 1 -линия задержки; LW{3,2} - описатель матрицы весов связей слоев 2 и 3; netsum - функция накопления для слоя 3; purelin - функция активации для слоя 3; а{3} - описатель выхода на слое 3. Введем линии задержки для входов 1 и 2, а также для слоя 3 (рис. 11.4): net.inputWeights{l,l}.delays = [0 1]; net.inputWeights{l,2}.delays = [12]; net.layerWeights{3,2}.delays = [0 12]; Рис. 11.4 На рис. 11.4 показаны развернутые блоки задержек для всех слоев сети. На схемах выходы этих блоков обозначаются следующим образом: pd{3,1} — входная последовательность [pj(t), pi(t-l)] для входа 1 на слое 1; pd{ 1,2} - входная последовательность [рг0-1), Рг(*-2)] для входа 2 на слое 1; 11. Формирование моделей нейронных сетей 247
pd{2.1} - последовательность сигналов, поступающая со слоя 1 на слой 2; pd{3,2} - последовательность сигналов, поступающая со слоя 2 на слой 3. Рассмотрим описатель матрицы весов на примере весов входа для слоя I (рис. 11.5). (&\ <И/1 1 » . ■' :. vieishls:- . "•-'■' iwti .1X» .-У 11 —► Mux Mux Рис. И.5 dotprodl Эта схема использует следующие обозначения: pd{ 1,1} - вектор входной последовательности; IW{ 1,1}(!,:) - строка матрицы весов; dotprodl - скалярное произведение z = w*p; iz{ 1,1} - массив взвешенных входов. Установим параметры нейронной сети и векторов входа: net.inputs{1}.range = [0 1]; net.inputs{2}.range =» [0 1]; net.b{l)=-l/4; net.lW{l,l) = £ 0.5 0.5 ]; net.IW{l,2) = [ 0.5 0.25]; net.X.W{2,l) = t 0.5 1; net.LW{3,2} = [ 0.5 0.25 1]; P = [0.5 1; 1 0.5]; После этого модель нейронной сети может быть промоделирована либо используя переопределяемый метод network\sim, либо с помощью системы SIMULINK. Построенная модель будет использована при описании методов sim и gensim. Справка: help network/network Сопутствующие функции: GENSIM. 11.1.1. Однослойные сети Персептрон NEWP Создание перселтрона Синтаксис: net = newp(PR,s,tf,lf) Описание: Персептроны предназначены для решения задач классификации входных векторов, относящихся к классу линейно отделимых. Функция net ~ newp(PR, s, tf, If) формирует нейронную сеть персептрона. Входные аргументы: PR - массив размера Rx2 минимальных и максимальных значений для R векторов входа; s - число нейронов; tf - функция активации из списка {hardlim, hardlims), по умолчанию hardlim; If-обучающая функция из списка {learnp, learnpn}, no умолчанию learnp. 248 Нейронные сети. MATLAB 6
выходные аргументы: net - объект класса network object. Свойства: Перссптрон - это однослойная нейронная сеть с функциями взвешивания dotprod, накопления потенциала netsum и выбранной функцией активации. Слой характеризуется матрицей весов и вектором смещений, которые инициализируются М-функцией initzero. Адаптация и обучение выполняются М-функциями adaptwb и trainwb, которые модифицируют значения весов и смещений до тех пор, пока не будет достигнуто требуемое значение критерия качества обучения в виде средней абсолютной ошибки, вычисляемой М-функцией тае. Пример: Создать персептрон с одним нейроном, входной вектор которого имеет 2 элемента, значения которых не выходят за пределы диапазона (рис. 11.6): net = newp([0 1; 0 1],1); gensim(net) % Рис.11.б ш р{1) №%т Layer 1 9 У{1} TDL р{11 Delays 1 Щ1.Л} ^£Щ-*Щ~>Ш Н netsum hardlim a{1} mm b{1} Рис. 11.6 Определим следующую последовательность двухэлементных векторов входа Р, составленных из 0 и 1: Р = {[0; О] [О; 1] [1; 01 [1; Ц}; Обучим персептрон выполнять операцию ЛОГИЧЕСКОЕ И. С этой целью для полного набора входных векторов сформируем последовательность целей: PI = cat(2, Р{:}); Т1 = пшп2се11(Р1(1, :) & Р1(2, :)) Т1 = [0] [0] [0] [1] Применим процедуру адаптации, установив число проходов равным 10: net.adaptParam. passes = 10; net = adapt(net,P,Tl); Вектор весов и смещение можно определить следующим образом: net.lWdb net.b{l) ans =21 ans = -3 Таким образом, разделяющая линия имеет вид: L: 2pj + р2 - 3 = 0. 1L Формирование моделей нейронных сетей 249
Промоделируем спроектированную нейронную есть, подав входную обучающую у. последовательность: Y = sim(net,P) У = [0] [0] [0] [1] Настройка параметров сети выполнена правильно. Обучим персептрон выполнять операцию НЕИСКЛЮЧАЮЩЕЕ ИЛИ. С этой целью для полного набора входных векторов Р сформируем последовательность целей: PI = cat(2r Р{:}); Т2 = хшт2се11(Р1(1, :) | Р1(2, :)) Т2 = [0] Ц] [1] [1] Применим процедуру обучения, установив число циклов равным 20: net.trainParam.epochs = 20; net = train(net,P,T2); Вектор весов и смещение можно определить следующим образом: net.iw{l}, net.b{l} net.IW{l}, net.b(l) ans - 2 2 ans = -2 Таким образом, разделяющая линия имеет вид: L: 2pi + 2р2 - 2 = 0. Промоделируем спроектированную нейронную сеть, подав входную обучающую последовательность: Y = sim(net,P) Y = [0] [1] [11 [1] Обучение и настройка сети выполнены правильно. Замечание: Персептроны решают задачу классификации линейно отделимых входных векторов за конечное время. В случае больших по длине входных векторов функция обучения leampn может быть по времени выполнения предпочтительнее функции обучения learnp. Сопутствующие функции: SIM, INIT, ADAPT, TRAIN, HARDLIM, HARDLIMS, LEARNP, LEARNPN. Линейные сети NEWLIN Линейный слой LIN Синтаксис: net = newlinfPR.s.id.lr) net = newlin(PR,s,0,P) Описание: Линейные слои находят применение при решении задач аппроксимации, фильтрации и предсказания сигналов, построении моделей динамических систем в задачах управления. Функция net = newlin(PR, s, id, Ir) формирует нейронную сеть в виде линейного слоя. 250 Нейронные сети. MATLAB 6
Входные аргументы: PR - массив размера Rx2 минимальных и максимальных значений для R векторов входа; s - число нейронов; id - описание линии задержки на входе сети, по умолчанию [0]; ]г - параметр скорости настройки, по умолчанию 0.01. Выходные аргументы: ncl - объект класса network object с архитектурой линейного слоя. Функция net = newlin(PR, s, 0, Р), где Р - матрица векторов входа, формирует линейный слой с параметром скорости настройки, гарантирующим максимальную степень устойчивости слоя для данного входа Р. Пример: Сформировать линейный слой, который для заданного входа воспроизводит заданный отклик системы. Архитектура линейного слоя: линия задержки типа [0 1 2], 1 нейрон, вектор входа с элементами из диапазона [-1 1], параметр скорости настройки 0.01. net = newlin([-l l], 1, [0 1 2], 0.01); gensim(net) % Рис.11.7 Элементы линейного слоя показаны на рис. 11.7. Характерная особенность этого слоя - наличие линии задержки, что свидетельствует о том, что такая нейронная сеть является динамической. p(1} Layei 1 @ ►jnjjj] ►|**М1' р{1) Delays 1 IW{1.1} Ь[1} D*l jy 1 0*1»у2 т 1 ' т г г* >X*'ii"t~dl ^1чР?.-!П mux р<1{1.1» Рис. П.7 Сформируем следующие обучающие последовательности векторов входа и цели: Р1 = {0-1110-11001}; Т1 = {0-1021-10101}; Р2 - {1 О -1 -1 1 1 1 0 -1}; Т2 = {2 1 -1 -2 0 2 2 1 О}; Выполним обучение, используя только обучающие последовательности Р1 и Т1: net = train(net,Pi,Tl); J J. Формирование моделей нейронных сетей 251
Характеристика процедуры обучения показана на рис. 11.8. Из се анализа следует, что требуемая точность обучения достигается на 73-м цикле. Соответствующие значения весов и смещения следующие: net.IW{l}, net.b{l} ans = 0.8751 0.8875 -0.1336 ans = 0.0619 тЪ<л4сгь О СОРИ, t$ul **м §* 0 01 Stag tuiyc'] Рис. 11.8 Выполним моделирование сети для всех значений входа, объединяющих векторы Р1 и Р2: Yl = sim(net,[P1 Р2]>; Результаты моделирования показаны на рис. 11.10 в виде зависимости Y1; последовательность целей, объединяющая векторы Т1 и Т2, соответствует зависимости ТЗ. Теперь выполним обучение сети на всем объеме обучающих данных, соответствующем объединению векторов входа {[PI P2]} и векторов целей {[Tl T2]}: net = init(net); РЗ = [PI P23; ТЗ = [Tl Т2]; net.trainParam.epochs = 200; net.trainParam.goal = 0.01; net = train(net,P3,T3); }■?.'.-.:.->.■..--->':*'"-"'У. / .ТочностуО.(М4."првд«льчм0.01",. -"" ' " ■-'■--.-."_.■? И *0 60 ВО VO tM 140 180 ISO 200 Рис. 11.9 В этом случае процедура обучения не достигает предельной точности в течение 200 циклов обучения и, судя по виду кривой, имеет статическую ошибку. 252 Нейронные сети. MATLAB 6
Значения весов и смещений несколько изменяются: nefc.IWCL), net.Ъ{1} ans = 0.9242 0.9869 0.0339 ans = 0.0602 Соответствующая дискретная модель динамического линейного слоя имеет вид: ук = 0.9242rk + 0.9869rt_i + 0.0339г^2 + 0.0602. Результаты моделирования показаны на рис. 11.10 в виде зависимости Y3. Y3 = sim(net,[PI P2]) ".. -, -' ...-■ ,-,>.' ;...«.j:".:"•..-■■ Рис. li.m Из сравнения кривых Y3 и Y1 следует, что точность воспроизведения целевой последовательности на интервале тактов времени с 11-й по 19-й стала выше и несколько уменьшилась на 5-м и 9-м тактах. В целом сформированный динамический линейный слой достаточно точно отслеживает кривую цели на последовательностях входов, не участвовавших в обучении. Алгоритм: Линейный слой использует функцию взвешивания dotprod, функцию накопления потенциала netsum и функцию активации purelin. Слой характеризуется матрицей весов и вектором смещений, которые инициализируются М-функцией initzero. Адаптация и обучение выполняются М-функциями adaptwb и tratnwb, которые модифицируют веса и смещения, используя М-функцию learnwh, до тех пор пока не будет достигнуто требуемое значение критерия качества обучения в виде средней квадратичной ошибки, вычисляемой М-функцией mse. Сопутcmвующие функции: NEWLIND, SIМ, INIT. ADAPT, TRAIN. NEWLIND Линейный слой LEND Синтаксис: net = newlind(P, T) 1L Формирование моделей нейронных сетей 253
Описание: Линейный слой LIND использует для расчета весов и смещений процедуру решения систем линейных алгебраических уравнений на основе метода наименьших квадратов, и поэтому в наибольшей степени он приспособлен для решения задач аппроксимации, когда требуется подобрать коэффициенты аппроксимирующей функции. В задачах управления такой линейный слой можно применять для идентификации параметров динамических систем. Функция net = ncwIind(P, T) формирует нейронную сеть, используя только обучающие последовательности входа Р размера RxQ и цели Т размера SxQ. Выходом является объект класса network object с архитектурой линейного слоя. Пример: Требуется сформировать линейный слой, который обеспечивает для заданного входа Р выход, близкий к цели Т, если заданы следующие обучающие последовательности: Р = 0:3; Т = [0.0 2.0 4.1 5.9]; Анализ данных подсказывает, что требуется найти аппроксимирующую кривую, которая близка к зависимости t = 2р. Применение линейного слоя LIND в данном случае вполне оправдано. net = newlind(F, Т) ; gensim(net) % Рис.11.11 РР! »*ш Layer 1 У{1} Ь{1} Рис. 11.11 Значения весов и смещений равны: net.IW{l}, net.b{l} ans = ans = 1.9800 0.3000 Соответствующая аппроксимирующая кривая описывается соотношением у* = 1.98001b + 0.3000. Выполним моделирование сформированного линейного слоя; Y = sim(net,P) Y= 0.0300 2.0100 3.9900 5.9700 Читатель может самостоятельно убедиться, построив соответствующие графики зависимостей, что аппроксимирующая кривая в полной мере соответствует правилу наименьших квадратов. 254 Нейронные сети. MATLAB 6
Алгоритм: Функция newlind вычисляет значения веса W и смещения В для линейного уровня с входом Р и целью Т, решая линейное уравнение в смысле метода наименьших квадратов: [W Ь] * [Р; ones] = Т. Сопутствующие функции: SIM, NEWLIN. 11.1.2. Многослойные сети NEWFF I Сеть прямой передачи FF Синтаксис: net = newff(PR,{S1 S2...SNI],fTF1 TF2...TFNI},btf,blf,pf) Описание: Функция newff предназначена для создания многослойных нейронных сетей прямой передачи сигнала с заданными функциями обучения и настройки, которые используют метод обратного распространения ошибки. Функция net = newff(PR, [SI S2 ... SN1], {TF1 TF2 ... TFN1}, btf, blf, pf) формирует многослойную нейронную сеть. Входные аргументы: PR - массив размера Rx2 минимальных и максимальных значений для R векторов входа; Si - количество нейронов в слое i; TFi - функция активации слоя i, по умолчанию tansig; btf- обучающая функция, реализующая метод обратного распространения, по умолчанию trainim; blf- функция настройки, реализующая метод обратного распространения, по умолчанию Iearngdm; pf- критерий качества обучения, по умолчанию mse. Выходные аргументы: net - объект класса network object многослойной нейронной сети. Свойства сети: Функциями активации могут быть любые дифференцируемые функции, например tansig, Iogsig или purelin. Обучающими функциями могут быть любые функции, реализующие метод обратного распространения: trainim, trainbfg, trainrp, traingd и др. Функция trainim является обучающей функцией по умолчанию, поскольку обеспечивает максимальное быстродействие, но требует значительных ресурсов памяти. Если ресурсы памяти недостаточны, воспользуйтесь следующими рекомендациями: • установите значение свойства net.trainParam.mem_reduc равным 2 или более, что снизит требования к памяти, но замедлит обучение; • воспользуйтесь обучающей функцией trainbfg, которая работает медленнее, но требует меньшей памяти, чем М-функция trainim; - \П. Формирование моделей нейронных сетей 255
• перейдите к обучающей функции trainip, которая работает медленнее, но требует меньшей памяти, чем М-функция trainbfg. Функциями настройки могут быть функции, реализующие метод обратного распространения: learngd, learngdm. Критерием качества обучения может быть любая дифференцируемая функция: mse, msereg. Пример: Создать нейронную сеть, чтобы обеспечить следующее отображение последовательности входа Р в последовательность целей Т: Р = [0 123456789 10]; Т = [0 123432123 4]; Архитектура нейронной сети: двухслойная сеть с прямой передачей сигнала; первый слой - 5 нейронов с функцией активации tansig; второй слой -1 нейрон с функцией активации purelin; диапазон изменения входа [0 10]. net = new£f([0 10],[5 1],{'tansig» "purelin»}); gensim(net) % Рис.11.12 ЕЁЬ*0 a{1} р№ р{1} Layer 1 a{1} Layer 2 у{1} Обуч net. net Хар квадрата Рис. II. 12 Выполним моделирование сети и построим графики сигналов выхода и цели (рис. 11.13): Y = sim(net,P); plot(P, T, P, Y, 'о') % Рис.11.13 256 Нейронные септ. MATLAB б
10 Рис. 11.13 Обучим сеть в течение 50 циклов: net.trainParam.epochs = 50; net = train(net,P,T); Характеристика точности обучения показана на рис. 11.14; установившаяся среднеквадратичная ошибка составляет приблизительно 0.02. Точность 0.01990, предельная 0 ])!{{П||ШШ{{!]|{{||Ш-': ..I—.]—[—] ;•— StopTtarinfl ■ | ■5 • 10 15' 20 -2S -" 30 ■' Э5-i'«- « 50 Рис. 11.14 Выполним моделирование сформированной двухслойной сети, используя обучающую последовательность входа: Y = sim(net,P); plot(P,T,P,Y,'о') % Рис.11.15 Результаты моделирования показаны на рис. 11.15 и свидетельствуют о хорошем отображении входной последовательности в выходную последовательность. 6 Рис. 11.15 II. Формирование моделей нейронных сетей 257
Алгоритм: Многослойная сеть прямой передачи сигнала включает N1 слоев с функциями взвешивания dotprod, накопления nctsum и заданными пользователем функциями активации Первый слой характеризуется матрицей весов входа, другие слои -матрицами весов выхода предшествующего слоя; вес слои имеют смещения. Выход последнего слоя является выходом сети. Веса и смещения каждого слоя инициализируются с помощью М-функции initnw. Режим адаптации реализуется М-функцисй adaptwb. Для режима обучения выбирается обучающая функция, реализующая метод обратного распространения ошибки. Оценка качества обучения основана на функциях оценки качества, выбираемых из списка {mae i mse I mscrcg I ssc}. Сопутствующие функции: NEWCF, NEWELM, SIM, INIT, ADAPT, TRAIN. NEWFFTD Динамическая нейронная сеть FFTD Сеть прямой передачи с запаздыванием Синтаксис: net = newfftd(PR, ID, [S1 S2 ... SNI], {TF1 TF2 ... TFNI}, btf, blf, pf) Описание: Функция ncwfftd предназначена для создания многослойных нейронных сетей прямой передачи сигнала с линиями задержки и заданными функциями обучения и настройки, использующими метод обратного распространения ошибки. Функция net = newfftd(PR, ID, [SI S2 ... SNI], {TF1 TF2... TFNI}, btf, blf, pf) формирует динамическую многослойную нейронную сеть. Входные аргументы: PR - массив размера Rx2 минимальных и максимальных значений для R векторов входа; ГО - вектор параметров линии задержки на входе сети; Si ~ количество нейронов в слое /; TFi - функция активации слоя i, по умолчанию tansig; btf- обучающая функция, реализующая метод обратного распространения, по умолчанию trainlm; blf- функция настройки, реализующая метод обратного распространения, по умолчанию learngdm; pf- критерий качества обучения, по умолчанию mse. Выходные аргументы: net - объект класса network object динамической многослойной нейронной сети. Свойства сети: Функциями активации могут быть любые дифференцируемые функции, например tansig, logsig или purelin. Обучающими функциями могут быть любые функции, реализующие метод обратного распространения: trainlm, Iraiubfg, traimp, traingd и др. 258 Нейронные сети. MATLAB 6
. Функция trainlm является обучающей функцией по умолчанию, поскольку обеспечивает максимальное быстродействие, но требует значительных ресурсов памяти. Если ресурсы памяти недостаточны, воспользуйтесь следующими рекомендациями: , установите значение свойства nct.trainParam.mern_reduc равным 2 или более, что снизит требования к памяти, но замедлит обучение; • воспользуйтесь обучающей функцией trainbfg, которая работает медленнее, но требует меньшей памяти, чем М-функция trainlm; • перейдите к обучающей функции trainrp, которая работает медленнее, но требует меньшей памяти, чем М-функция trainbfg. Функциями настройки могут быть функции, реализующие метод обратного распространения: learngd, learngdm. Критерием качества обучения может быть любая дифференцируемая функция: msc, mscrcg. Пример: Создать нейронную сеть, чтобы обеспечить следующее отображение последовательности входа Р в последовательность целей Т: Р = {100110100001100 1}; 5 я {1 -1 О 1 О -1 1 -1 О О О 1 0 -1 0 1); Архитектура нейронной сети: двухслойная сеть с прямой передачей сигнала и линией задержки [0 1]; первый слой - 5 нейронов с функцией активации tansig; второй слой - 1 нейрон с функцией активации purelin; диапазон изменения входа [0 10]. net = new£ftd([0 1],[0 1],[5 1],{'tansig' 'purelin'}); % Рис.11.16 р{1} Layer 1 а{1} а{1} Layer 2 у{1} JA. РГО OL —► vreipht Delays 1 IWft '■ft? а{1} WH-1> neteum tansU bias*'—I etsum tansig a{1} pcuC« b{1} Delay! Ш*#: X© pd{1.1} ► weight Delays 1 LW{2 bias v —' rietsum purelin a{2} b{2} PCT .Mux-' mux pd{2.1} Рис. 11.16 11. Формирование моделей нейронных сетей 259
Обучим сеть в течение 50 циклов и промоделируем, используя в качестве теста обучающую последовательность входа: net.trainParam.epochs = 50; net = train(net,P,T); Y = sim(net,P) У - [13 [-1] [0] [1] [0] [-1] [1] [-13 10] 10] [0] [1] [0] [-1] [0] (1] Выход сети точно совпадает с целевой последовательностью. Алгоритм: Многослойная динамическая сеть прямой передачи включает N1 слоев с функциями взвешивания dotprod, функциями накопления nctsum и заданными пользователем функциями активации. Первый слой характеризуется матрицей весов входа, другие слои - матрицами весов выхода предшествующего слоя; все слои имеют смещения. Выход последнего слоя является выходом сети. Веса и смещения каждого слоя инициализируются с помощью М-функции initnw. Режим адаптации реализуется М-функцией adaptwb. Для режима обучения выбирается обучающая функция, использующая метод обратного распространения ошибки. Оценка качества обучения основана на функциях оценки качества, выбираемых из списка {mae I mse I msereg I sse}. Сопутствующие функции: NEWCF, NEWELM, SIM, INIT, ADAPT, TRAIN. NEWCF I Каскадная сеть прямой передачи CF Синтаксис: net = newcf(PR,[S1 S2...SNI],{TF1 TF2...TFNl}IbtfIblf,pf) Описание: Функция newcf предназначена для создания каскадных нейронных сетей прямой передачи сигнала с заданными функциями обучения и настройки, использующими метод обратного распространения ошибки. Функция net = newcf(PR, [SI S2 ... SNl], {TF1 TF2 ... TFN1}, btf, blf, pf) формирует каскадную нейронную сеть. Входные аргументы: PR - массив размера Rx2 минимальных и максимальных значений для R векторов входа; Si - количество нейронов в слое /; TFi - функция активации слоя i, по умолчанию tansig; btf— обучающая функция, реализующая метод обратного распространения, по умолчанию trainlm; blf- функция настройки, реализующая метод обратного распространения, по умолчанию learngdm; pf - критерий качества обучения, по умолчанию mse. 260 Нейронные сети. MATLAB 6
Выходные аргументы: net - объект класса network object каскадной нейронной сети с прямой передачей и обучением методом обратного распространения. Свойства сети: Функциями активации могут быть любые дифференцируемые функции, например tansig, logsig или purelin. Обучающими функциями могут быть любые функции, реализующие метод обратного распространения: trainlm, trainbfg, trainrp, traingd и др. Функция trainlm является обучающей функцией по умолчанию, поскольку обеспечивает максимальное быстродействие, но требует значительных ресурсов памяти. Если ресурсы памяти недостаточны, воспользуйтесь следующими рекомендациями: • установите значение свойства net.trainParam.mem_reduc равным 2 или более, что снизит требования к памяти, но замедлит обучение; • воспользуйтесь обучающей функцией trainbfg, которая работает медленнее, но требует меньшей памяти, чем М-функция trainlm; • перейдите к обучающей функции trainrp, которая работает медленнее, но требует меньшей памяти, чем М-функция trainbfg. Функциями настройки могут быть функции, реализующие метод обратного распространения: learngd, learngdm Критерием качества обучения может быть любая дифференцируемая функция: mse, msereg. Пример: Создать каскадную нейронную сеть, чтобы обеспечить следующее отображение последовательности входа Р в последовательность целей Т: Р = [О 123456789 10]; Т= [01234321234]; Архитектура нейронной сети: каскадная двухслойная сеть с прямой передачей сигнала; первый слой - 5 нейронов с функцией активации tansig; второй слой ~ 1 нейрон с функцией активации purelin; диапазон изменения входа [0 10]. net = newcf([0 10], [5 1],{■tansig' 'purelin'}); gensim(net) % Рис.11.17 Результат представлен на рис. 11.17. р{1} tfUiffijKfr|-»0 Layer 1 а{1} -И О д{1> Layer 2 1 /. Формирование моделей нейронных сетей 261
(j)>TDL -Ц weight p{1} Delays 1 IW{1.1} bias -1 netsum tansig b{1} 1 p{1} Mux rhux Pd{1.1) TOL—)► weight -. elaysl IW{2.1} | ^ I I <| ^Г" p{1} delays 1 ^^►ГО-ЧН weight: £2, ft ias- -I a{1} Delay*2 LW{2,1> W2V Mux Mux^ P{1} mux pd{1.1}a{1} Рис. 11.17 mux P<J{2.1} Обучим сеть в течение 50 циклов: net.traxnParam.epochs = 50; net = train(net,P#T); Характеристика точности обучения показана на рис. 11.18; установившаяся среднеквадратичная ошибка составляет приблизительно 0.002, что на порядок выше, чем для сети FF ( см. рис. 11.14). Точность 0.002, предельная 0 Sky Тгд'айтз | Рис. 11.18 Выполним моделирование каскадной двухслойной сети, используя обучающую последовательность входа: - Y = sim(net,P); plot(P,T,F,Y,'О1) 262 Нейронные сети. MATLAB 6
Результат моделирования представлен на рис. 1 ] .19. Рис. 11.19 Алгоритм: Каскадная сеть прямой передачи использует функции взвешивания dotprod, накопления nctsum и заданные пользователем функции активации. Первый каскад характеризуется матрицей весов входа, другие каскады - матрицами весов выхода предшествующего каскада; все каскады имеют смещения. Выход последнего каскада является выходом сети. Веса и смещения инициализируются с помощью М-функции inilnw. Режим адаптации реализуется М-функцией adaptwb. Для режима обучения выбирается обучающая функция, реализующая метод обратного распространения ошибки. Оценка качества обучения основана на функциях оценки качества, выбираемых из списка {mae I mse I msereg I sse}. Сопутствующие функции: NEWFF, NEWELM, SIM, INIT, ADAPT, TRAIN. Радиальные базисные сети NEWRB Радиальная базисная сеть RB Синтаксис: net = newrb(P,T,goal,spread) Описание: Радиальные базисные сети предназначены для аппроксимации функций. Функция newrb добавляет нейроны к скрытому слою радиальной базисной сети, пока не будет достигнута допустимая средняя квадратичная ошибка обучения. Функция net = newrb(P, T, goal, spread) формирует радиальную базисную сеть и имеет' следующие входные и выходные аргументы. Входные аргументы: Р - массив размера RxQ из Q входных векторов, R - число элементов вектора входа; Т - массив размера SxQ из Q векторов цели; 1L Формирование моделей нейронных сетей 263
goal - средняя квадратичная ошибка, по умолчанию 0.0; spread - параметр влияния, по умолчанию 1.0. Выходные аргументы: net - объект класса network object радиальной базисной сети. Свойства сети: Параметр влияния spread существенно влияет на качество аппроксимации функции: чем его значение больше, тем более гладкой будет аппроксимация. Слишком большое значение параметра spread приведет к тому, что для получения гладкой аппроксимации быстро изменяющейся функции потребуется большое количество нейронов; слишком малое значение параметра spread потребует большого количества нейронов для аппроксимации гладкой функции. Пример: Создадим радиальную базисную сеть для следующей обучающей последовательности при средней квадратичной ошибке 0.1 (рис. 11.20): Р = 0:3; Т = [0.0 2.0 4.1 5.9]; net = newrb(P,T,0.1); net.layers{1}.size ans - 3 gensim{net) % Рис.11.20 @hHfp^?OTp»0 p{1} Layer 1 a{1> a{1} Layer 2 y{1} TO weight. p{1} Delays 1 1W{1 "bias"-. m. -i J ne x; etpro<5 radbas a{1} bin TDL-* weight a{1} Delays 1 vyeigni -i -bias*. r*4±±r^li J netsum pu puielin a{2} b{2} Рис. 11.20 Сформированная радиальная базисная сеть имеет 3 нейрона с функцией активации radbas. Выполним моделирование сети для нового входа (рис. 11.21): plot(P,T,'*r',•MarkerSize,,2,'LineWidth' ,2) hold on V = sim{net,P); % Векторы входа из обучающего множества 264 Нейронные сети. MATLAB б
plot{P,V,'ob','MarkerSize',8, ■LineWidth',2) Pi e 0.5:2.5; Y = simfnet/Pl) plot(Pl,Y,'+k','MarkerSize',10, 'LineWidth',2) % Рис.11.21 Результант моделирования f -<Э 0.5 1.5 P. PI 2.5 Рис. 11.21 Алгоритм: Функция newrb создает радиальную базисную сеть с двумя слоями. Первый слой включает нейроны с функцией активации radbas и использует функции взвешивания dist и накопления netprod. Второй, линейный слой включает нейроны с функцией активации ' purelin и использует функции взвешивания dotprod и накопления netsum. Сеть формируется следующим образом. Изначально первый слой не имеет нейронов. Сеть моделируется и определяется вектор входа с самой большой погрешностью, добавляется нейрон с функцией активации radbas и весами, равными вектору входа, затем вычисляются весовые коэффициенты линейного слоя, чтобы не превысить допустимой средней квадратичной погрешности. Сопутствующие функции: SIM, NEWRBE, NEWGRNN. NEWPNN. NEWRBE Радиальная базисная сеть с пулевой ошибкой RBE Синтаксис: net = newrbe(P,T,spread) Описание: Функция net = newrb(P, T, spread) формирует радиальную базисную сеть с нулевой ошибкой и имеет следующие входные и выходные аргументы. Входные аргументы: Р - массив размера RxQ из Q входных векторов, R - число элементов вектора входа; Т - массив размера SxQ из Q векторов цели; spread - параметр влияния, по умолчанию 1.0. / /. Формирование моделей нейронных сетей 265
Выходи ыс аргум ент ы: act - объект класса network object радиальной базисной сети с нулевой ошибкой. Чем больше значение параметра spread, тем более гладкой будет аппроксимация. Слишком большое значение spread может привести к вычислительным проблемам. Пример: Создадим радиальную базисную сеть с нулевой ошибкой для следующей обучающей последовательности: Р = 0:3; Т = [0.0 2.0 4.1 5.9]; net = newrbe(P,T); net.layers{l}.size ans = 4 Сформированная радиальная базисная сеть с нулевой ошибкой имеет 4 нейрона в первом слое. Сравните с предыдущим случаем, когда число нейронов было равно трем. Выполним моделирование сети для нового входа (рис. 11.22): plot(P,T,■♦г",■MarkerSize■,2,'LineWidth',2) hold on V = sim{net,P); % Векторы входа из обучающего множества plot(Р, V,'ob','MarkerSize•, 8, 'LineWidth', 2) PI = 0.5:2.5; Y = sim(net,Fl) plot(Pl,Y,*+k','MarkerSize',10, 'LineWidth*,2) % Рис.11.22 '■■ Б 5 A :" 1 C& Результаты моделирования 0.5 1.5 P. PI .2.5 Рис. П.22 Алгоритм: Функция newrbc создаст радиальную базисную сеть с двумя слоями. Первый слой включает нейроны с функцией активации radbas и использует функции взвешивания dist и накопления rjetprod. Второй, линейный слой включает нейроны с функцией активации purelin и использует функции взвешивания dotprod и накопления netsum. 266 Нейронные сети. MATLAB 6
Функция ncwrbe устанавливает веса первого слоя равными Р', а смещения - равными O.S?26/sprcad, в результате радиальная базисная функция пересекает значение 0.5 при значениях взвешенных входов ±spread. Веса второго слоя IW{2,1} и смещения Ь{2} определяются путем моделирования выходов первого слоя А{ 1} и последующего решения системы линейных уравнений: [W{2,1} b{2}] * [А{1}; ones] = Т Сопутствующие функции: SIM, NEWRB, NEWGRNN, NEWPNN. NEWGRNN Обобщенная регрессионная есть GRNN Синтаксис: net = newgrnn(P,T,spread) Описание: Обобщенные регрессионные сети являются разновидностью радиальных базисных сетей и используются для анализа временных рядов, решения задач обобщенной регрессии и аппроксимации функций. Характерной особенностью этих сетей является высокая скорость их обучения. Функция net = newgmn(P, T, spread) формирует обобщенную регрессионную есть и имеет следующие входные и выходные аргументы. Входные аргументы: Р - массив размера RxQ из Q входных векторов, R - число элементов вектора входа; Т - массив размера SxQ из Q векторов цели; spread - параметр влияния, по умолчанию 1.0. Выходные аргументы: net - объект класса network object обобщенной регрессионной сети. Чем больше число используемых радиальных базисных функций, тем более гладкой будет аппроксимация функции. Чтобы выполнить точную аппроксимацию, следует использовать значение параметра spread меньшее, чем расстояние между векторами входа. Чтобы получить гладкую аппроксимацию, следует увеличить значение параметра spread. Свойства: Функция newgrnn создает двухслойную нейронную сеть, архитектура которой совпадает с архитектурой радиальной базисной сети. Первый слой включает нейроны с функцией активации radbas и использует функции взвешивания dist и накопления netprod. Второй, линейный слой включает нейроны с функцией активации purclin и использует функции взвешивания normprod и накопления nctsum. Смещения используются только в первом слое. Функция newgrnn устанавливает веса первого слоя равными Р', а смещения - равными 0.8326/spread, что приводит к радиальным базисным функциям, которые пересекают величину 0.5 при значениях взвешенных входов ispread. Веса второго слоя W2 устанавливаются равными Т. П. Формирование моделей нейронных сетей 267
Примеры: Создадим обобщенную регрессионную есть с входами Р и целями Т: Р = 0:3; Т = [0.0 2.0 4.1 5.9]; net = newgrnn(P,T); gensim(net) % Рис.11.24 Мodd Вrowser |^|т& х! -£ Щ untitled "=■ '^€t Neural Netwmk H i;| Layer 1 '■■ '& Delays! :-_ ±r. iwiui :■ ^-; disti ' ■ .& dist2 '. ■ 2: j dist3 - - & [adbas =!-^j Layei2 =- - &, Delays 1 В Из LW{2,1} ■ - й:] Dot Product ■ • fei pwelin Рис. 11.23 На рис. 11.23 мы обращаем внимание на блок функции взвешивания normprod, который отличает обобщенную регрессионную сеть от радиальной базисной. Структура сети может быть проанализирована по дереву в левой части рисунка. Выполним моделирование сети для нового входа и построим график (рис. 11.24): plot{P,T,'*r','MarkerSize',2,'LineWidth1,2) hold on Y = sim(net,P); % Векторы входа из обучающего множества plot <Р,V,'оЬ■,•MarkerSize■,8, ■LineWidth', 2) PI ~ 0.5:2.5; Y = sim(net,Pl); plot(PI,Y,'+k<,'MarkerSize',10# 'LineWidth',2) % Рис.11.24 Y = sim(net, 0:0.5:3) Y = 0.8104 1.3759 2.1424 3.0300 3.9030 4.6345 5.1615 Q> p » Dot Product s ui Reciprocal 268 Нейронные сети. MATLAB 6
- 2 '< Ри/льтети ийяелироваклв : L -r о v ; X Y Ь X • : $ * > : 1.3 P.P1 Рис. 11.24 Из анализа результатов моделирования следует, что на границах интервала расхождения существенны. Если уменьшить значение параметра влияния до 0.1, то мы получим аппроксимацию высокой точности: net = newgrnn(Р,Т,0.1); Y = sim<net, 0:0.5:3) Y = 0.0000 1.0000 2.0000 3.0500 4.1000 Сопутствующие функции: SIM, NEWRB, NEWRBE, NEWPNN. 5.0000 5.9000 NEWPNN Вероятностная нейронная сеть PNN Синтаксис: net = newpnn(P,T,spread) Описание: Вероятностные нейронные сети (PNN) - разновидность радиальных базисных сетей, применяемая для решения задач классификации. Функция net = newgrnn(P, T, spread) формирует обобщенную регрессионную сеть и имеет следующие входные и выходные аргументы. Входные аргументы: Р - массив размера RxQ из Q входных векторов, R - число элементов вектора входа; Т - массив размера SxQ из Q векторов цели; spread - параметр влияния, по умолчанию 1.0. Выходные аргументы: nei - объект класса network object вероятностной нейронной сети. Если параметр spread близок к нулю, то сеть будет действовать как классификатор ближайших соседей. Когда параметр spread возрастает, то вероятностная сеть будет учитывать влияние близлежащих векторов. / /. Формирование моделей нейронных сетей 269
Пример: Задача классификации определена множествами входа Р и индексов класса Тс: Р = [123456 7]; Тс = [12 3 2 2 3 1]; Индексы класса преобразуем в вектор целей и сформируем вероятностную нейронную есть (рис. 11.25): Т = ind2vec(Tc) net = newpnn(Р,Т); gensim(net) % Рис.11.25 Model Browser :w_~j £•& untitled о ->у Neuial Network E& 1 5 ifi : l B& s Ё Layer 1 ££ Delays 1 ■Ш iwo.i) ■ £-: radbas j^ffij &3 Delays 1 t£ LW{2.1) Э-Ш dotpiodl Si- £j dotptcd2 ;i> 3 do*P'od3 ©—*и—Hw"shi 1—HS1—*@—►© a{1} Delays 1 LW{2,1} nefaum compet a{2J Рис. 11.25 Обращаем внимание читателя, что в качестве второго слоя сети PNN применяется конкурирующий слой с функцией активации compet. Выполним моделирование сети, используя обучающее множество входов: Y = sim(net#P) Yc = vec2ind(Y) Yc=l 2 3 2 2 3 1 Результат, как и следовало ожидать, совпадает с множеством целей. Алгоритм: Функция newpnn создает двухслойную нейронную сеть, архитектура которой совпадает с архитектурой радиальной базисной сети. Первый слой включает нейроны с функцией активации radbas и использует функции взвешивания dist и накопления netprod. Второй, линейный слой включает нейроны с функцией активации compet и использует функции взвешивания dotprod и накопления netsum. Смещения используются только в первом слое. Функция newpnn устанавливает веса первого слоя равными Р', а смещения слоя - равными 0.8326/spread, в результате чего радиальные базисные функции достигают уровня 0.5 при значениях взвешенных входов isprcad. Веса второго слоя W2 устанавливаются равными Т. Сопутствующие функции: SIM, IND2VEC, VEC2IND, NEWRB, NEWRBE, NEWGRNN. 270 Нейронные сети. MATLAB 6
Самоорганизующиеся сети NEWC | Слой Кохонена WC Синтаксис: net = newc{PR,s,klr,clr) Описание: Конкурирующий слой Кохонена относится к классу самоорганизующихся нейронных сетей, которые предназначены для решения задач кластеризации и классификации. Функция net = newc(PR, s, klr, с] г) формирует слой Кохонена и имеет следующие входные и выходные аргументы. Входные аргументы: PR- массив размера Rx2 из Q минимальных и максимальных значений вектора входа; s - число нейронов; klr- параметр настройки функции learnk, по умолчанию 0.01; с1г — параметр настройки функции learncon, по умолчанию 0.001. Выходные аргументы: net - объект класса network object, определяющий слой Кохонена. Свойства: Конкурирующий слой Кохонена использует функции взвешивания negdist, накопления netsum и активации compet. Веса и смещения слоя инициализируются с помощью М-функций midpoint и initcon. Адаптация и обучение выполняются функциями adaptwb и trainwbl, которые модифицируют значения веса и смещения, применяя функции настройки learnk и learncon. Примеры: Зададим массив входа Р в виде четырех двухэлементных векторов: Р = [-1 .8 .1 .9; .2 .9 .1 .8]; Необходимо определить центры группирования (кластеризации) близких векторов. В этой задаче интуитивно ясно, что существует 2 таких центра. Поэтому сформируем слой Кохонена с двумя нейронами и определим диапазон расположения входных векторов в интервале [0 1]: net = newc{[0 1; 0 1],2); gensim(net) % Рис.11.26 На рис. 11.26 показана структура конкурирующего слоя Кохонена. 11. Формирование моделей нейронных сетей 271
(f) HpW з{1} р{1} Layetl У{1} (Я?) ►JTm] frj weight p{1] Delays! IW{1,1} b£1} -Ис nebum compet л{1} ■ §fc untitled ~ ^ Neural Network E> 2y Layer 1 ! Ы Delays 1 ■ ..*x Pd{i.l} CD—i r сю—^ [>-ч!М1Н: Рис. 11.26 Выполним настройку параметров слоя, чтобы решить задачу для заданного входа: net = train(net,P); Центры кластеризации расположены в точках w = net.IWU} w = 0.8031 0.8031 0.1536 0.1969 Построим на плоскости входных векторов точки кластеризации и сами входные векторы: plot(P(l,:), P(2,:),'+k') % Рис-11.27 titleC Век-горы входа') , xlabel ('Р(1,:)') , ylabel( 'Р(2, i) •) hold on plot(w, •or■) "v 09 '.. '0'8 Y 0.7 0.6 Ci0.5 0.'* - 0.Э 0.2 0.1 0 -Л-- :-'■■ ; *-a : .*••-• : : L_ ■....- ^_ Векторы бадл а : : : : .: - - 4„ : : г i : 4.. _j 4- -0-- :i J... • : : ..i... : ; _JL- .$,-— : : _.L i : : ! 0 01 D.I 03 04 05 0Б 07 D.8 09 PP.) Рис. 11.27 272 Нейронные сети MATLAB 6
На рис. ] 1.27 явно выделены 2 центра кластеризации, отмеченные цифрами 1 и 2. Моделирование сети с определением близости проверяемых точек к центрам кластеризации можно реализовать следующим образом: Pi = [0.2i0.1:0.7; 0.2:0.1:0.7] Y = sim(net#Pl); Ус = vec2ind(Y) PI = 0.2000 0.3000 0.2000 0.3000 Yc = 2 2 0.4000 0.4000 2 0.5000 0.5000 1 0.6000 0.6000 1 0.7000 0.7000 1 Сопутствующие функции: SIM, INIT, ADAPT, TRAIN, ADAPTWB, TRA1NWB1. Карта Кохонена SOM INEWSOM Синтаксис: net = newsom(PR,[d1 ,d2,...)1tfcn,dfcn,olr1osteps1tlr,tnd) Описание: Карта Кохонена относится к классу самоорганизующихся многослойных нейронных сетей, которые предназначены для решения задач кластеризации и классификации. Функция net=newsom(PR, [dl, d2,...], tfen, dfen, olr, osteps, tlr, hid) формирует многомерную карту Кохонена и имеет следующие входные и выходные аргументы. Входные аргументы: PR—массив размера Rx2 из Q минимальных и максимальных значений вектора входа; di - число нейронов по i-размерности карты, по умолчанию двумерная карта с числом нейронов [5 8]; tfen - функция топологии карты, по умолчанию hextop; dfen ~ функция расстояния, по умолчанию linkdist; olr - параметр скорости обучения на этапе размещения, по умолчанию 0.9; osteps - число циклов обучения на этапе размещения, по умолчанию 1000; tlr - параметр скорости обучения на этапе подстройки, по умолчанию 0.02; tnd - размер окрестности на этапе подстройки, по умолчанию 1. Выходные аргументы: net - объект класса network object, определяющий многомерную самоорганизующуюся карту Кохонена. '"' Свойства сети: Самоорганизующаяся карта Кохонена имеет единственный слой с функциями взвешивания negdist, накопления netsum и активации compet. Слой характеризуется весовой матрицей входа, но не имеет смещений. Инициализация слоя реализуется с помощью функции midpoint. Адаптация и обучение выполняются функциями adaptwb и trainwbl, которые используют функцию настройки learnsom. Топология карты задается функциями hextop, gridtop и randlop. Функциями расстояния могут быть выбраны из списка {linkdist I dist I mandisi}. I J. Формирование моделей нейронных сетей 273
Пример: Задай случайный вектор входа, элементы которого расположены в диапазонах [0 21 '. и [0 1]. Построить двумерную самоорганизующуюся карту Кохонена с числом нейронов [3 5] для классификации входных векторов: Р = [rand(l,400)*2; rand(l,400) J ; net = newsom([0 2; 0 1],[3 5]); gensim(net) % Рис. 11.28 Структура карты Кохонена показана на рис. 11.28 и включает 15 функций взвешивания negdist, функции накопления nctsum и активации compet. S Ш untitled Й 2у NeuialMelwcxk Й-Id ESQ £Ц Delays 1 s-eJ IW0.1} j- • 2>| negdistl ."-fel fegdistlO — и] negdislll ! Ю negdistl 2 ;• gj negdistl 3 I- S negdist14 !--ij negdistl 5 !-.i3 negdist2 !■ ^| negdistf i -£% negdi$t4 l ■ Ш nesdist5 ~&l negdist6 '-Й negdist7 ! 2:J negdistS l g negdbtS ■ ji w-vS У1 p{1} |P№&3ffl: Layer 1 (^►ЩН^Э^ШЬ»)^^ p{1} Delays 1 IW{1.1} netsum compet a{1} Рис. 11.28 Построим топологию двумерной карты Кохонена (рис. 11.29): plotsom(net.layers{l}.positions) % Рис.11.29 Ж. I-!-5 ;,'o.s ■ " -.-"', Карта размещения нейронов В .'99гл~1~"'Ф: : «о :?£: J .j?£.„1 ж '■ ф2 ! б3 ' 05 Т 15 2 25- 3 postion(1 .i) Рис. 11.29 274 Нейронные сети. MATLAB 6
Затем реализуется процедура обучения. Следует отметить, что процедура обучения длится достаточно долго; компьютер с частотой 500 МГц просчитывает 25 циклов приблизительно за 90 с, и строятся входные векторы с их отображениями (рис. 10.30), которые формируются весами SOM: net.trainparam.epochs = 2000; net = train(net,P); plot<P(l,: ),P(2,: ),'.g','markersize',10) hold on plotsom(net.iw{1,1},net.layers{1}.distances) Векторы весовое ■;-; .Б 4. CB.-V-.-'1"4 ^2&Л:и%\В;ГЯВЯС:Щ&~>~\ Рис. 11.30 Промоделируем обученную карту Кохонена на массиве векторов входа (рис. 11.31): а = sim(net,P) ; bar(sum(a')) % Рис.11.31 ттшттё^шштшшштж Рис. 11.31 Из анализа рис. 11.31 следует, что количество входных векторов, отнесенных к определенному кластеру, колеблется от 12 до 35. Таким образом, в процессе обучения двумерная самоорганизующаяся карта Кохонена выполнила кластеризацию массива векторов входа. Сопутствующие функции: SIM, INIT, ADAPT, TRAIN, ADAPTWB, TRAINWB1. Л. Формирование моделей нейронных сетей 275
Сети - классификаторы входных секторов NEWLVQ Нейронная сеть LVQ Синтаксис: net = new!vq(PRrS1,PC,LR,LF) Описание: Нейронные сети-классификаторы входных векторов, или сети LVQ, в отличие от самоорганизующихся сетей выполняют не только кластеризацию, но и классификацию входных векторов. Функция net = newlvq(PR, si, PC, lr, If) формирует сеть LVQ и имеет следующие входные и выходные аргументы. Входные аргументы: PR - массив размера Rx2 из Q минимальных и максимальных значений вектора входа; si - число нейронов скрытого слоя; PC - вектор размера 1 xS2, указывающий распределение по долям векторов каждого класса; 1г - параметр скорости настройки, по умолчанию 0.01; If - функция настройки, по умолчанию learnlv2. Выходные аргументы: net - объект класса network object, определяющий сеть-классификатор LVQ. Свойства сети: Сеть LVQ - это двухслойная сеть. Первый слой использует функции взвешивания negdist, накопления netsum и активации compel. Второй слой использует функции взвешивания dotprodt, накопления netsum и активации purelin. Слои не имеют смещений. Веса первого слоя инициализируются с помощью функции midpoint; веса второго слоя устанавливаются так, чтобы каждому нейрону на выходе соответствовал единственный нейрон скрытого слоя. Адаптация и обучение выполняются с помощью функций adaptwb и trainwbl, которые модифицируют веса первого слоя, используя заданные функции обучения. Функциями настройки могут быть М-функции learnlvl и learnlv2. Пример: Векторы входа Р и выходные классы Тс, представленные ниже, определяют задачу классификации, которая будет решена LVQ-сетью: Р = [-3 -2 -2 0 0 0 0+2 +2 +3; 0+1-121-1 -2 +1 -1 О]; Тс = [1 1 122 2 2 1 1 1]; Целевые классы Тс преобразуем в целевые векторы Т, создадим сеть LVQ со входами Р, четырьмя нейронами и долями распределения по классам [0.6 0.4]: т = ind2vec<Tc); net = newlvq(minmax(P),4, [.6 .41); gensim(net) % Рис.11.32 276 Нейронные сети. MATLAB б
Структура нейронной сети LVQ показана на рис. 11.32. Выполним обучение сети: =■■ % Й- Neural Network - '2> Layer 1 ±-; Delays I ~ ±:; IW{1/i} • "2>; negdisll г-$>1 negdisC ;--2>| negdist3 • Ъ-\ negdist4 ъ Ы Layer 2 .-i-j Delays! £.:Ы LW{2,1} {+j ■ Шз dotprodt S-^j dotprod2 ■ - - J5-j purelin ■1 P{1} ЙЧ Layer 1 a{1} TDL a{1) Layer 2 y{1} 1} weight, X p{1} Delays 1 IW{1.1} netsum compet a{1} DL4* weight'. -4S-H2K© a{1} Delays 1 LW{2.1} netsum purelin Рис. II.32 *{2} net = trainCnet^PjT); Промоделируем сеть на векторе входа: Y = sim(net,P); Yc = vec2ind(Y) Yc = 1112222111 Классификация входного вектора выполнена без ошибок. Сопутствующие функции: SIM, INIT, ADAPT, TRAIN, ADAPTWB, TRA1NW81, LEARNLV1, LEARNLV2. Рекуррентные сети NEWELM Нейронная сеть ELM Сеть Элмана Синтаксис: net = newelm(PR, [S1 S2 ... SNl], {TF1 TF2 ... TFNl}, btf, blf, pf) Описание: Функция newelm предназначена для создания динамических сетей Элмана, которые применяются для построения моделей динамических систем. Функция net = neweIm(PR, [SI S2 ... SNl], {TF1 TF2 ... TFNl}, btf, blf, pf) формирует сеть Элмана и имеет следующие входные и выходные аргументы. Входные аргументы: PR - массив размера Rx2 минимальных и максимальных значений для R векторов входа; S» - количество нейронов в слое /; И. Формирование моделей нейронных сетей 277
TFt - функция активации слоя /, по умолчанию tansig; btf-обучающая функция, реализующая метод обратного распространения, по умол-^Й чанию traingdx; :'=-| \ blf- функция настройки, реализующая метод обратного распространения, по умолча-':Я нию learn gdm; A pf- критерий качества обучения, по умолчанию mse. -?) Выходные аргументы: -'-) net - объект класса network object динамической сети Элмана. " ^ Свойства сети: Обучающими функциями могут быть любые функции, реализующие метод обратного:" распространения: trainlm, trainbfg, trainrp, traingd и др. Функциями настройки могут быть функции, реализующие метод обратного распространения: learngd, learngdm. Критерием качества обучения может быть любая дифференцируемая функция: mse, : msereg. . При реализации сети Элмана не рекомендуется применять такие алгоритмы обучения, - как trainlm или trainrp, которые работают с большим размером шага. Пример: Зададим вход Р в виде случайной булевой последовательности из нулей и единиц; вы- -_ ходом сети должна быть такая булева последовательность Т, элементы которой принимают значение 1 только в том случае, когда в последовательности Р встретились 2 единицы подряд: Р = round(rand(l#20)) Т = 10 (P(l:end-1)+P(2:end)==2)] Р = 10 101100101111001101 Т = 00 00010 0000111000100 Требуется построить сеть, которая распознает во входном сигнале 2 единицы, следующие подряд. Сначала эти последовательности представим в виде массивов ячеек: Pseq = con2seq{P); Tseq = con2seq(T); Создадим сеть Элмана с диапазоном входного сигнала от 0 до 1 с 10 скрытыми и одним выходным нейронами (рис. 11.33): net = newelm([О 1],[10 1],{"tansig1, 'logsig'}) ; gensim(net) % Рис.11.33 Ал. ПЛ1 Вь; err нас Со) 278 Нейронные сети. MATLAB 6 U.
аШХ*"*^'--^ а{1) а{1} р{1} Delays 1 1 р{1} Layer 1 Layer 2 у{1} V^lgjfij 2>j Neural Network 3- .fei Layer! .-$J Delays 1 ■ 2>! Delays 2 S- ±-j IWfl.1) Ё • &! dotprodl : fe-Й dolprodl 0 * Е-=У dotprod2 I fr Ш dotprccfi К -Й^ dolprod4 \ &■ Ш dotprod5 I i£-|hi dolprod6 1 &~Ы dotprod? -- I 63-=B dotprod8 ! Ё- Ш dotprad9 j й- IB LW<1,1} I - - ^{ tansig Й- Ш L^er 2 |..^l Delays! |- ■ SJ logsig i-.^ LWC.1} Рис. 11.33 Затем обучим сеть с допустимой средней квадратичной ошибкой 0.001 и смоделируем ее: net.trainParanugoal = 0.001; net♦trainParanu epochs = 1000; net я train(net,Fseq,Tseq); Y = sim(net,Pseq) У1 = seq2con(Y); E = round(T-Y1{1)) E = 00000000000000000000 Результат свидетельствует о том, что сеть справилась с поставленной задачей. Алгоритм: ^„. Сеть Элмана состоит из N1 слоев, использующих функции взвешивания.ао1ргос1, накопления netsum и заданные пользователем функции активации: Все слои имеют смещения. Выход последнего слоя является выходом сети. Веса и смещения инициализируются с помощью функции initnw. Адаптация реализуется с помощью функции adaptwb, которая настраивает веса с помощью заданной функции настройки. Сопутствующие функции: NEWFF, NEWCF, SIM, 1NIT, ADAPT, TRAIN. //. Формирование моделей нейронных сетей 279
NEWHOP Сеть Хопфилда HOP Синтаксис: r& net = newhop(T) \$ Описание: Сети Хопфилда применяются для решения задач распознавания образов. Функция net = newhop(T) имеет 1 входной аргумент - массив Т размера RxQ, объеди- ; няющий Q целевых векторов (со значениями +1 или ~1), R - число элементов вектора входа. -'"■ ■■ Функция возвращает рекуррентную сеть Хопфилда в виде объекта класса network ■' I object. Свойства: Сеть Хопфилда имеет 1 нейронный слой с функциями взвешивания dotprod, накопления netsum и активации satlins. Слой охвачен динамической обратной связью и имеет смещения. Пример: Создадим сеть Хопфилда с двумя устойчивыми точками в трехмерном пространстве: Т = [-1 -1 1; 1 -1 1]•; net = newhop(T); gens irn (net) % Рис. 11.34 а-ИI Й-1У Neua! Network В - Щ Layer 1 ■ •■ J3 Delays 1 $-gjLW{U} ; в Ъ$ dotpiodl I ; L.;£-j Dot Product I ffl-^j dotpiod2 gj-^J dotprod3 E -2>j satlins OHIIESp^O a{1} Layer 1 a{1} weig№ a{1] Delays 1 LW{1.., , Ш1 11 Ж*®-*® etsum satlins a{1} b{1} Delay 1 &Щ: mux р<1{1И}- Рис. 11.34 Проверим, что сеть устойчива в этих точках, и используем их как начальные условия для линии задержки. Если сеть устойчива, можно ожидать, что выходы Y будут те же самые. Ai = Т; [Y,Pf,Af] = sim(net,2,[],Ai); 280 Нейронные сети. MATLAB б
у = -1 1 -1 -1 1 1 Таким образом, вершины гиперкуба являются устойчивыми точками равновесия сети Хопфилда. Проверим сходимость сети при произвольном входном векторе Ai: Ai = {[-0.9; -0.8; 0.71}; [Y,Pf,Af] = sim(net,{l 5},0,Ai); Y{1} ans = -1 -1 1 Сеть Хопфилда обеспечила переход к устойчивому положению равновесия, ближайшему к заданному входу. Алгоритм: Сети Хопфилда разработаны для того, чтобы приводить случайные входные векторы к точкам равновесия, которые соответствуют определенным, заданным пользователем, целям. Алгоритм минимизирует число устойчивых паразитных точек равновесия [25]. Сопутствующие функции: SIM, SATLINS. 11.2. Функции активации Функция активации, или передаточная функция нейрона, преобразует каждый элемент л, вектора входа нейрона в элемент а-, вектора выхода: Если рассматривать слой нейронов, то выражение функции активации через параметры слоя может быть записано в следующей векторной форме: а'" = /(VTa"-' + b" ) = /™ (iT), где a m - вектор выхода нейронов размера 5 mxl для слоя т\ Wm - матрица весовых коэффициентов размера SmxS m_1 для слоя ш; Ь'" - вектор смещений размера 5 тх 1 для слоя т; /'" ~~ функция активации нейронов слоя т; пт- вектор входа нейронов для слоя т\ SF — число нейронов слоя т\ а0 = р - вектор входа сети размера 5° х 1, причем 5° = R и R - число элементов вектора входа сети. Все М-функции ППП NNToolbox, описывающие функции активации, имеют одинаковый формат А = <имя_функции>(1М), где А - матрица векторов выхода; N ~ матрица векторов входа. Производные функций активации имеют следующий формат dA_dN = d<HMH^yHKUHH>(N,A). 11. Формирование моделей нейронных сетей 281
Кроме того, для функций активации определена информационная функция вида info ~ <имя_функции>(сос1е), где аргумент code может принимать следующие значения: 'name' - полное название функции активации; 'deriv* - имя производной функции активации; 'active' - активный диапазон входа функции активации; 'output' - диапазон выхода функции активации. Персептрон -.-%** HARDLIM, DHARDLIM Функция активации с жесткими ограничениями Блок Simulink: Синтаксис: А = hardlim(N) info = hardlim(code) dA„dN = dhardlim(N,A) Описание: Функция А = hardlim(N) реализует функцию активации с жесткими ограничениями, которая возвращает выход нейрона равным 1, если вход достигает порогового значения, в иных случаях выход равен 0. Функция info = hardlim(code) сообщает информацию о функции hardlim. Функция dA„dN = dhardlim(N, А) вычисляет производную функции hardlim. Пример: Информация о функции активации hardlim: name = hardlim('name■) Злате = hardlim('deriv') inrange = hardlim('active') outrange = hardlim('output') name = Hard Limit dname = dhardlim inrange =0 0 outrange =0 1 Зададим следующий вектор входа функции активации с жесткими ограничениями для слоя из трех нейронов и рассчитаем вектор выхода А и производную dA_dN: N = [0.1; 0.8; -0.7]; А = hardlim(N) А = 1 1 0 dA„dN = dhardlim (N, A) dA_dN = 0 0 0 282 Нейронные сети. MATLAB б
г А ■■ Применение функции: функция активации hardlim используется при формировании нейронной сети псрсеп- .^она с помощью М-функции newp. Для задания функции активации hardlim следует установить значение свойства nct.Iayers{i}.transferFcn равным 'hardlim'. Алгоритм: функция активации hardlim и ее производная dhardlim определяются следующими соотношениями: [О, л<0; hardlimin) = { [I, л>0. ГО, п < 0; dhardlim(n) ~ < [О, п>0. Сопутствующие функции: SIM, HARDLIMS. HARDLIMS, DHARDLMS Симметричная функция с жесткими ограничениями Блок Simulink: f Синтаксис: А = hardlims(N) dA_dN = dhardlms(N, A) info = hardlims(code) Описание: Функция А = hardlims(N) реализует симметричную функцию активации с жесткими ограничениями, которая возвращает выход нейрона равным 1 при положительном и -1 при отрицательном пороговом значении. Функция info = hardlims(code) сообщает информацию о функции hardlims. Функция dA_dN - dhardlms(N, А) вычисляет производную функции hardlims. Пример: Информация о функции активации hardlims: name = hardlims{'name') dname = hardlims('deriv'} inrange = hardlims('active *) outrange = hardlims("output•) name = Symmetric Hard Limit dname = dhardlms inrange =00 outrange = -1 1 J J. Формирование моделей нейронных сетей 283
Зададим следующий вектор входа симметричной функции активации с жесткими ограничениями для слоя из трех нейронов и рассчитаем вектор выхода А и производную dA_dN; N - [0.1; 0.8; -0.7]; А = hardlims (И) А = 1 1 -1 dA_dN = dhardlms(H,A) dA_dN = 0 0 0 Применение функции: Функция активации hardlims используется при формировании нейронной сети персеп- трона с помощью М-функции newp. Для задания функции активации hardlims следует. установить значение свойства net.layers{i} .transferFcn равным 'hardlims'. Алгоритм: Функция активации hardlims и ее производная dhardlms определяются следующими соотношениями: hardlims(ri) = -1, п<0; dhardlms(ri) — 1, л>0. |0, «<0; (.0, «>0. Сопутствующие функции: SIM, HARDLIM. Линейные сети PURELIN, DPURELIn"| Линейная функция активации Блок Simulink: / Синтаксис: dA_dN = dpurelin(N,A) А = purelin(N) info = purelin(code) Описание: Функция А = purelin(N) реализует линейную функцию активации во всем диапазоне- изменения входного аргумента. - Функция info = purelin(code) сообщает информацию о функции purelin. Функция dA_dN = dpurelin(N, А) вычисляет производную функции purelin. 284 Нейронные сети. MATLAB б;
Пример: Информация о функции активации purelin: name = purelin(* name■) dname = purelin(■deriv1) inrange = purelin('active1) outrange = purelin('output■) name = Linear dname = dpurelin inrange = -Inf Inf outrange = -Inf Inf Зададим следующий вектор входа линейной функции активации для слоя из трех нейронов и рассчитаем вектор выхода А и производную dA_dN: N = [0.1; 0.8; -0.7]; А = purelin(N) А = 0.1000 0.8000 -0.7000 dA„dN = dpurelin(N,A) dA_dN = 1 1 1 Применение функции: Функция активации purelin используется при формировании нейронных сетей с помощью М-функций newlin и newlind. Для задания функции активации purelin следует установить значение свойства net.layers{i}.transferFcn равным 'purelin'. Алгоритм: Функция активации purelin и ее производная dpurelin определяются следующими соотношениями: purelin(ri) = п; dpurelinin) = 1. Сопутствующие функции: SIM. SATUN, SATLINS. POSUN, DPOSLIN I Положительная линейная функция активации Блок Simulink: L Синтаксис: А = poslrn(N) dA_dN = dposi/n(N,A) info = poslin(code) Описание: Функция А = poslin(N) реализует положительную линейную функцию активации. Функция info = poslin(code) сообщает информацию о функции poslin. Функция dA_dN = dposlin(N, А) вычисляет производную функции poslin. 11. Формирование моделей нейронных сетей 285
Пример: Информация о функции активации poslin: name = poslin('name') dname = pos1in('deriv') inrange = poslin('active') outrange = poslin(•output *) name = Positive Linear dname = dposlin inrange = 0 Inf outrange = 0 Inf Зададим следующий вектор входа положительной линейной функции активации для слоя из трех нейронов и рассчитаем вектор выхода А и производную dA_dN: N = [0.1; 0.8; -0.7]; * t А = poslin(N) А = 0.1000 0.8000 0 dA_dN - dposlin (N, A) dA„dN = 1 1 0 Применение функции: Для задания функции активации poslin следует установить значение свойства net.Iayers{i}.transferFcn равным 'poslin1. Алгоритм: Функция активации poslin и ее производная dposlin определяются следующими соотношениями: poslin(n) ~ dposlin(n) ~ [0, и < 0; [и, л>0; fO, n<0; (1, и>0. Сопутствующие функции: SIM, PURELIN, SATLIN, SATLINS. SATLIN, DSATL1N Блок Simulink: L Синтаксис: А =: satlin(N) info = satlin(code) Линейная функция с ограничениями dA„dN = dsatlin(N,A) 286 Нейронные сети. MATLAB 6
Описание: Функция А - satlin(N) реализует линейную функцию активации с ограничениями. Функция info = satlin(codc) сообщает информацию о функции satlin Функция dA_dN = dsatlin(N, А) вычисляет производную функции satlin. Пример: Информация о функции активации satlin: name = sat1in('name'} dname = satlin{'deriv1) inrange = satlin('active') outrange = satlin('output *) name = Saturating Linear dname = dsatlin inrange =0 1 outrange =0 1 Зададим следующий вектор входа линейной функции активации с ограничениями для слоя из трех нейронов и рассчитаем вектор выхода А и производную dA_dN: N = [0.1; 0.8; -0.7]; А = satlin(N) А = 0.1000 0.8000 0 dA_dN = dsatlin {N, A) dA_dN = 1 1 0 Применение функции: Для задания функции активации satlin следует установить значение свойства net.layers{i}.transferFcn равным 'satlin'. Алгоритм: Функция активации satlin и ее производная dsatlin определяются следующими соотношениями: 0, п< 0; satlin(n) ~\п, 0 ^ п < 1; 0, л>1. 0, /КО; dsatlin(n) = • 1, 0<л<1; 0, п>\. Сопутствующие функции: SIM, POSLIN, SATL1NS, PURELINS. 11. Формирование моделей нейронных сетей 287
SATLINS, DSATLINS Симметричная линейная функция с ограничениями . Блок Simulink: ■f Синтаксис: А = satlins(N) info *= satlins(code) dA_dN = dsatlins{N, A) Описание: Функция А = satlins(N) реализует симметричную линейную функцию активации с ограничениями. Функция info = satlins(code) сообщает информацию о функции satlins. Функция dA_dN = dsatlins(N, А) вычисляет производную функции satlins. Пример: Информация о функции активации satlins: name = satlins{'паше') dname = sat1ins('deriv') inrange = satlins(•active•) outrange - satlins('output') name = Symmetric Saturating Linear dname = dsatlins inrange = -1 1 outrange = -1 1 Зададим следующий вектор входа симметричной линейной функции активации с ограничениями для слоя из трех нейронов и рассчитаем вектор выхода А и производную dA_dN: N = [0.1; 0.8; -0.7]; А = satlins(N) А = 0.1000 0.8000 -0.7000 dA_dN = dA_dN = = dsat 1 ins (N, A) 1 1 1 Применение функции: Для задания функции активации satlins следует установить значение свойства net.layers{i}.transferFcn равным 'satlins'. Алгоритм: Функция активации satlins и ее производная dsatlins определяются следующими соотношениями: 288 Нейронные сети. MATLAB 6
satlins(ri) dsatlins{ri) = -1, л<-1; л, -1£и<1; 1, я>1. 0, п < -1; 1, -1<л<1; О, и>1. Сопутствующие функции: SIM, POSLIN, SATLIN, PURELINS. Радиальные базисные сети RADBAS, DRADBAS Радиальная базисная функция Блок Simulink: А Синтаксис: А = radbas(N) info = radbas(code) dA_dN = dradbas(N,A) Описание: Функция А = radbas(N) реализует радиальную базисную функцию активации. Функция info = radbas(code) сообщает информацию о функции radbas. Функция dA_dN = dradbasGSf, А) вычисляет производную функции radbas. Пример: Информация о функции активации radbas: name = radbas('name') dname = radbas (' deriv') inrange = radbas{■active') outrange = radbas(■output•) name = Radial Basis dname = dradbas inrange = -2 2 outrange =01 Следующая последовательность команд создает график функции активации radbas: п = -3:0.1:3; а = radbas(n); plot<n,а) % Рис.11.35 11. Формирование моделей нейронных сетей 289
m PUlKUkHU £иИ»И ф]ГШЦНЯ ' " ■ •• '«^i.^d Рис. 11.35 Зададим следующий вектор входа радиальной базисной функции активации для слоя из трех нейронов и рассчитаем вектор выхода А и производную dA_dN: N = [0.1; 0.8; -0.7]; А = radbas(N) А = 0.9900 0.5273 0.6126 dA_dN dA dN = dradbas (N, A) = -0.1980 -0.8437 0.8577 Применение функции: Функция активации radbas используется при формировании вероятностных и обобщенных регрессионных сетей с помощью М-функций newpnn и newgrnn. Для задания функции активации radbas следует установить значение свойства net.layers{i} .transferFcn равным 'radbas'. Алгоритм: Функция активации radbas и ее производная dradbas определяются следующими соотношениями: radbas {п)=е'2"\ dradbas (п) = -2пе-2п. Сопутствующие функции: SIM, TRIBAS, DRADBAS. TRIBAS, DTRIBAS Блок Simulink: A Синтаксис: A = tribas(N) info ~ tribas(code) Треугольная функция активации dA_dN = dtribas(N,A) 290 Нейронные сети. MATLAB 6
-a Описание: Функция А = tiibas(N) реализует треугольную функцию активации. Функция info = tribas(code) сообщает информацию о функции tribas. Функция dA_dN = dtribasfN, А) вычисляет производную функции tribas. Пример: Информация о функции активации tribas: name = tribas('name•> dname = tribas('deriv') inrange = tribas('active *) outrange = tribas(•output•) name = Triangle Basis dname = dtribas inrange = -1 1 outrange =01 Построим график функции активации tribas (рис. 11.36): n = -2:0.1:2; а = tribas(n); plot{n,a) % Рис.11.36 ' V'VJ?^'.!:"';.\Tp»yro«b«iii4ijwtti« j? X. Рис. 11.36 Зададим следующий вектор входа треугольной функции активации для слоя из трех нейронов и рассчитаем вектор выхода А и производную dA_dN: N = [0.1; 0.8; -0.7]; А = tribas (N) А = 0.9000 0.2000 0.3000 dA_dN dA_dN = dtribas (N,A) =s -1 -1 -1 Применение функции: Для задания функции активации tribas следует установить значение свойства net.layers{i}.transferFcn равным 'tribas'. 7 Л Формирование моделей нейронных сетей 291
m\ Алгоритм: Функция активации tribas" и ее производная dtribas определяются следующими соотношениями: tribas(n) = dtribasin) = - 0, 1 - abs(n), - 0, 0, 1, -1, 0, n<- -1<7 0<r n >1 л<~1; -1<я<1; л>1. ■l; !<0; <l;' Сопутствующие функции: SIM, RADBAS. Самоорганизующиеся сети COMPET П Конкурирующая функция активации Блок Simuiink: В Синтаксис: А = compet(N) info = compet(code) Описание: Функция А = compet(N) реализует конкурирующую функцию активации. Функция info = compet(code) сообщает информацию о функции compet. Функция compet не имеет производной. Конкурирующая функция преобразует вектор входа слоя нейронов так, чтобы нейрон с самым большим входом имел выход, равный 1, а всего другие нейроны имели выходы, равные 0. Пример: Информация о функции активации compet: name = compet(•name') cUiame = compet (* deriv ■ ) inrange = compet('active•) outrange = compet(•output■) name = Competitive ' dname = '' inrange = -Inf Inf outrange =01 292 Нейронные сети. MATLAB 6
Зададим следующий вектор входа конкурирующей функции активации, вычислим вьгход и представим входы и выходы в виде столбцовых диаграмм (рис. 11.37): п = [0; 1; -0.5; 0.5]; а = compet(n); subplot (2,1,1), bar{n), ylabelCn1) subplot {2,1,2), bar (a), ylabel('a') % Рис. 11.37 Рис. 11.37 Применение функции: Функция активации compet используется при формировании вероятностных и самоорганизующихся нейронных сетей с помощью М-функций newc и newpnn. Для задания функции активации compet следует установить значение свойства net.layers{i}.transferFcn равным 'compet'. Сопутствующие функции: SIM, SOFTMAX. SOFTMAX Конкурирующая функция активации с мягким максимумом Блок Simulink: Синтаксис: А = softmax(N) info = softmax(code) Описание: Функция А = softmax(N) реализует конкурирующую функцию активации с мягким максимумом. Функция info = softmax(code) сообщает информацию о функции softmax. Функция softmax не имеет производной. 11. Формирование моделей нейронных сетей 293
Am Пример: ; Информация о функции активации softmax: name = softmax('name') dname = softmax('deriv') inrange = softmax('active') outrange = softmax{'output *) name = Soft Max dname = '' inrange = -Inf Inf outrange = 0 1 Зададим следующий вектор входа конкурирующей функции активации с мягким максимумом, вычислим выход и представим входы и выходы в виде столбцовых диаграмм: и = Ю; 1; -0.5; 0.5]; а = softmax (п); subplot(2,1,1), bar(n), ylabeK'n') subplot (2,1,2), bar (a), ylabelfa') % Рис. 11.38 л\ ч Л Рис. 11.38 Применение функции: Функция активации softmax используется при формировании вероятностных и самоорганизующихся нейронных сетей с помощью М-функций newc и newpnn. Для задания функции активации softmax следует установить значение свойства net.layers{i J.transferFcn равным 'softmax'. Сопутствующие функции: SIM, COMPEL Рекуррентные сети LOGSIG, DLOGSIG Логистическая функция Блок Simulink: L Синтаксис: А = logsig(N) info = logsig(code) dA_dN = dfogsig{N,A) 294 Нейронные сети. MATLAB 6
Описание: Функция A=logsig(N) реализует логистическую сигмоидальную функцию активации. Функция info = Iogsig(code) сообщает информацию о функции logsig. Функция dA_dN = logsig(N, А) вычисляет производную функции logsig. Пример: Информация о функции активации logsig: name = logsig('name') dname = logsig('deriv') inrange = logsig('active•) outrange = logsig(•output■) name = Log Sigmoid dname = dlogsig inrange = -4 4 outrange = 0 1 Построим график функции активации logsig(pnc. 11.39): п = ~5:0.1:5; а = logsig(п); plot(n,а) % Рис.11.39 З&о cifi * Рис. П.39 Зададим следующий вектор входа логистической функции активации для слоя из трех нейронов и рассчитаем вектор выхода А и производную dA_dN: N = [0.1; 0.8; -0.7]; А = logsig(N) А = 0.5250 0.6900 0.3318 dA_dN = dlogsig(N, A) dA_dN = 0.2494 0.2139 0.2217 Применение функции: Функция активации logsig используется при формировании нейронных сетей прямой передачи с помощью М-функций newff и newef. Для задания функции активации logsig следует установить значение свойства net.laycrs{i}.iransferFcn равным 'logsig'. П. Формирование моделей нейронных сетей 295
Алгоритм: Функция активации logsig и ее производная diogsig определяются следующими соотношениями: logsig(n) = logsig(n) = (1 + е-)1 Сопутствующие функции: "SIM, DLOGSIG, DTANSIG. о •;'■ TANSIG, DTANSIG | Блок Simulink: Гиперболическая тангенциальная функция -f- Синтаксис: А = tansig(N) info = tansig(code) dA_dN = dtansig(N,A) Описание: Функция А = tansig(N) реализует гиперболическую тангенциальную функцию активации. Функция info = tansig(code) сообщает информацию о функции tansig. Функция dA_dN = tansig(N, А) вычисляет производную функции tansig. Пример: Информация о функции активации tansig: name = tansig('name') dname = tansig('deriv*) inrange = tansig('active *) outrange = tansig(•output•) name = Tan Sigmoid dname = dtansig inrange = -2 2 outrange = -1 1 Следующая последовательность команд строит график функции активации tansig: п = -3:0-1:3; а = tansig(п) ; plot{п,а) % Рис.11.40 296 Нейронные сети. MATLAB 6
Гиперболическая тангециэльная функция о.е 0.2 : о -G.2 -0.4 -0.6 -0.8 -1 т *п_л«.*г ••-^■г ,,.,,,, п ----. Рис. 11.40 Зададим следующий вектор входа гиперболической тангенциальной функции активации для слоя из трех нейронов и рассчитаем вектор выхода А и производную dA_dN: N = [0.1; 0.8; -0.7]; А = tansig(H) А = 0.0997 0:6640 -0.6044 dA_dN = dA dN = dtansig(H,A) 0.9901 0.5591 0.6347 Применение функции: Функция активации tansig используется при формировании нейронных сетей прямой передачи с помощью М-функций newff и newcf. Для задания функции активации tansig следует установить значение свойства net.layers{i}.transferFcn равным 'tansig'. Алгоритм: Функция активации tansig и ее производная dtansig определяются следующими соотношениями: tansig{ri) = ■ — i: dtansig{ri) = 1 - tansig2 (n). Приведенное выражение для функции tansig(n) математически эквивалентно функции tanh(N), но отличается тем, что выполняется быстрее, чем реализация функции tanh в системе MATLAB. Для нейронных сетей,'где быстродействие играет важную роль, это весьма существенно [42]. Сопутствующие функции: SIM, DTANSIG, LOGSIG. 11. Формирование моделей нейронных сетей 297
11.3. Синаптические функции Функции этой группы выполняют следующие операции над векторами входов нейронной сети: взвешивание, вычисление расстояний в сетях с топологией, накопление для вычисления потенциала нейрона. При описании синаптичсских функций описывается не только сама функция, но и се производные по входным аргументам, если они определены. Функции взвешивания и расстояний Скалярное произведение DOTPROD, DDOTPROD Блок SMULINK: Ш5> dotprod Синтаксис: 2 = dotprod(W, P) dZ„dP = ddotprod('p\W,P,Z) df = dotprodCdenV) dZ_dW = ddotprodCw'.W.P.Z) Описание: Функция Z=dotprod(W, P) вычисляет матрицу взвешенных входов в виде произведения W*P массива входов Р размера RxQ и матрицы весов W размера SxR. Результатом является матрица Z размера SxQ. Функция df = dotprod('deriv') возвращает имя М-функции, которая вычисляет производную скалярного произведения по одному из сомножителей. Функции dZ_dP = ddotprodCp', W, P, Z) и dZ_dW = ddotprodC'w', W, P, Z) имеют следующие входные и выходные аргументы: W - матрица весов размера SxR; Р - массив входов размера RxQ; Z - матрица размера SxQ, где S - число нейронов в слое, Q ~ число векторов входа, R - число элементов каждого вектора входа; dZ_dP - матрица производной dZ/dP размера SxR; dZ„dW - матрица производной dZ/dW размера RxQ. Примеры: Вычислим вектор взвешенных входов Z, если заданы случайные матрица весов W и вектор входа Р: W - rand (4, Р = rand(3. 3) 1) Z = dotprod(W 0.6068 0.4860 0.8913 0.7621 } Р' ,Р); Z' 0.4565 0.0185 0.8214 0.4447 0 0 0 0 .6154 7919 9218 7382 298 Нейронные сети. MATLAB б
ans = ans = 0.1763 0.8679 0.4057 0.8340 0.9355 1.3527 1.0053 Определим имя М-функции, которая вычисляет производную взвешенной функции в виде скалярного произведения: df = dotprod{■deriv') <3f = ddotprod Вычислим производные скалярного произведения по каждому аргументу: dZ_dP = ddotprod('р■,W,P , Z) dz_dw = ddotprod(' w ■, W, P, Z) dZ_dP = 0.6068 0.4860 0.8913 0.7621 dZ„dW = 0.1763 0.4057 0.9355 0 0 0 0 4565 0185 8214 4447 0 0 0 0 6154 7919 9218 73 82 Нетрудно убедиться, что производная произведения матрицы весов на вектор входа г - W*P по аргументу Р совпадает с матрицей весов W, а производная по аргументу W - с входным вектором р. Применение функции: Функция взвешивания dotprod используется по умолчанию при формировании нейронных сетей персептрона newp и линейных слоев newlin. Чтобы применить эту функцию для формирования других типов сетей необходимо установить значения свойств net.inputWeight{i,j}.weightFcnH net.layerWeight{i,j}.weightFcn равными 'dotprod'. Алгоритм: Производная скалярного произведения двух матриц Z=W*P по одной из них равна второй матрице, т. е. dZ/dP = W, dZ/dW = P. Сопутствующие функции: SIM, DIST, NEGDIST, NORMPROD. NORMPROD Нормированное скалярное произведение Синтаксис: Z = rtormprod(W,P) df = normprod('deriv') Описание: Функция взвешивания normprod отличается от функции doiprod тем, что она является нормированной функцией и не имеет производной. Функция Z = normprod(W,P) вычисляет массив взвешенных входов в виде нормированного скалярного произведения W*P/sum(P,J), где W - матрица весов размера SxR, J l'. Формирование моделей нейронных сетей 299
P - массив входов размера RxQ. Результатом является массив значений взвешенных входов Z размера S*Q. Функция df = normprod('deriv') возвращает пустую строку '', так как производная для функции normprod не определена. Пример: Определим случайную весовую матрицу W и вектор входа Р и рассчитаем соответствующий взвешенный вход Z: W - р = Z = W - ans ans rand(4,3) rand(3,1); P1 normprod(W, P ) ; Z• 0.0153 0.4660 0.7468 0.4186 0.4451 0.8462 0.9318 0.5252 0.6813 0. 0.1880 0. 0 0 0 0 3795 6482 2026 6721 8381 0196 0 0. 8318 6983 0.4494 Применение функции: Функция взвешивания normprod применяется в архитектуре обобщенных регрессионных сетей, формируемых с помощью М-функции newgmn. Чтобы применить функцию взвешивания normprod, следует установить значения для свойств net.inputWeights{i, j}.weightFcn и net.layerWeightsfi, jJ.weightFcn равными 'normprod'. Алгоритм: Функция normprod возвращает скалярные произведения весовой матрицы на каждый вектор входа, деленные на сумму элементов каждого вектора, в виде следующей матрицы Z: Z = W*P./sum(P,1). Сопутствующие функции: SIM, DOTPROD, NEGDIST, DIST. Функции расстояний могут использоваться как функции взвешивания, но их основное назначение характеризовать топологию вероятностных и самоорганизующихся сетей путем вычисления расстояний между нейронами в слое. DIST Евклидово расстояние ErokSIMULINK: Ж Синтаксис: 2 = dist(W,P) df^distCderiv') D = dist(pos) 300 Нейронные сети. MATLAB б
Описание: Функция взвешивания Z = dist(W, P) вычисляет евклидово расстояние между каждой строкой Wj матрицы весов W и каждым столбцом р; матрицы входов Р в соответствии со следующим соотношением: ъц = normfw,- - р/). (11.1) Функция Z = dist(W, Р) вычисляет матрицу взвешенных входов для матрицы входов Р размера RxQ и матрицы весов W размера SxR. Результатом является матрица Ъ размера SxQ. Функция df = distC'deriv') возвращает пустую строку, поскольку производная не определена. Функция dist может быть использована как функция для вычисления расстояний между нейронами в слое. Функция расстояния D = dist(pos) вычисляет расстояние между нейронами для сетей с топологией. Входной аргумент pos - это матрица координат расположения нейронов в N-мерном пространстве размера NxS; выходной аргумент D—это матрица расстояний размера SxS. Примеры: Вычислим вектор взвешенных входов Z, если заданы случайные матрица весов W размера 4x3 и вектор входа Р размера 3x1: W - rand(4,3); Р = rand(3,1); Z = dist(W,P) z = 0.6791 0.3994 0.3234 0.5746 Результатом является вектор размера 4х 1, вычисленный в соответствии с соотношением (11.1). Рассмотрим сеть с топологией, для которой задана случайная матрица координат для 10 нейронов в трехмерном пространстве и требуется рассчитать матрицу евклидовых расстояний между ними. pos = rand(3,10); D = dist(pos) D = Columns 1 through 7 0 0 0 0 1 0 I-l 0 1 0 5304 9195 9366 5776 0651 9003 1471 3750 0744 0 0 0 0 1 0 0 0 0 5304 0 7033 4450 7 648. 1121 8339 9753 2967 9119 0 0 0 0 0 0 0 0 0 9195 7033 0 5551 6438 7713 3219 4052 6520 4235 0 0 0 0 1 0 0 0 0 9366 4450 5551 0 9521 1444 7971 8125 6215 7844 0 0 0 0 0 0 0 0 0 5776 7648 6438 9521 0 9396 6349 9155 6276 8969 1 1 0 1 0 0 0 0 0 .0651 .1121 7713 .1444 9396 0 4624 5243 8666 4576 0 0 0 0 0 0 0 0 0 9003 .8339 3219 7971 6349 4624 0 2948 6631 2754 JI. Формирование моделей нейронных сетей 301
1 0 0 0 0 0 0 0 0 Columns 1471 9753 .4052 8125 .9155 .5243 .2948 0 .8512 .1166 8 0 0 0 0 0 0 0 0 0 through 3750 2967 6520 6215 6276 .8666 6631 .8512 0 .7709 10 1.0744 0.9119 0.4235 0.7844 0.8969 0.4576 0.2754 0.1166 0.77O9 0 :-i В результате получаем симметричную матрицу взаимных расстояний между нейронами. Применение функции: Функция взвешивания dist используется при формировании вероятностных сетей - ; newpim и обобщенных регрессионных сетей newgrnn, Чтобы применить эту функцию' взвешивания для формирования других типов сетей необходимо установить значения ' свойств nct.inputWeight{i, jJ.weightFcn и net.layerWeight{i, j}.weightFcn равными 'dist'. Чтобы применить функцию расстояния dist для сетей с топологией, необходимо уста-"^ новить значение свойства net.layers {i} .distanceFcn равным 'dist'. с. Алгоритм: Евклидово расстояние d между векторами х и у вычисляется в системе MATLAB. - следующим образом: -к:- d = sqrt((x-y).A2). ^ Сопутствующие функции: SIM, DOTPROD. NEGDIST, NORMPROD, MANDIST. LtNKDIST. ■/ 5 NEGDIST I Отрицательное евклидово расстояние.! ;* Синтаксис: 2 = negdist(W, Р) . ■ 1 df = negdistCderiv') Описание: ~.\ Функция negdist применяется в самоорганизующихся сетях как функция взвешивания. Функция взвешивания Z=negdist(W, P) вычисляет отрицательное евклидово расстоя-.. ние между каждой строкой w, матрицы весов W и каждым столбцом pj матрицы входов Р.; в соответствии со следующим соотношением: •: z,y = norm(w,- - рД (11.2):^ Функция Z = dist(W, Р) вычисляет матрицу взвешенных входов для матрицы входов Р. размера RxQ и матрицы весов W размера SxR. Результатом является матрица Z размера SxQ. Функция df=dist('derivr) возвращает пустую строку, поскольку производная не определена.. 302 Нейронные сети. MATLAB6•. ~:\ -. ч • --г • ■-■$
Пример: Вычислим вектор взвешенных входов Z, если заданы случайные матрица весов W размера 4x3 и вектор входа Р размера 3x1: W = rand(4,3); Р = raxid(3,l); Z ~ negdist(W,P) Z = -0.7558 -0.8090 -0.4755 -0.8113 Применение функции: Функция взвешивания negdist используется при формировании самоорганизующихся сетей newc и newsom. Чтобы применить эту функцию взвешивания для других сетей, необходимо установить значения свойств neLinputWeight{i, j} .weightFcn и neLlayerWeight{i, j J.weightFcn равными 'negdist'. Алгоритм: Функция negdist вычисляет взвешенный вход для векторов х и у в системе MATLAB следующим образом: z = -sqrt(sum(x - у).Л2). Сопутствующие функции: SIM, DOTPROD, DIST. MANDIST Расстояние суммарного координатного смещения Синтаксис: Z = mandist(W, P) D = mandist(pos) df = mandist('deriv') Описание: Функция взвешивания Z = mandist(W, P) вычисляет расстояние в виде суммарного координатного смещения между каждой строкой Wj матрицы весов W и столбцом pj матрицы входов Р в соответствии со следующим соотношением: z,y = sum(abs(w; - р/)). (П-3) Функция Z=mandistfW, Р) вычисляет матрицу взвешенных входов для матрицы входов Р размера RxQ и матрицы весов W размера SxR. Результатом является матрица Z размера SxQ. Функция df=dist('deriv') возвращает пустую строку, поскольку производная не определена. Функция mandist может быть использована как функция для вычисления расстояний между нейронами в слое. Функция расстояния D=mandist(pos) вычисляет расстояние между нейронами для сетей с топологией. Входной аргумент pos - это матрица координат расположения нейронов в N-мерном пространстве размера NxS; выходной аргумент D - это матрица расстояний размера SxS. 11. Формирование моделей нейронных сетей 303
Пример: '' А Вычислим вектор взвешенных входов Z, если заданы случайные матрица весов W J размера 4x3 и вектор входа Р размера 3x1: 1 W = rand<4,3); Р = rand(3,1); Z = mandist(W,P) Z = ■; 0.8265 0.9830 1.0359 1.7712 Результатом является вектор размера 4x1, вычисленный в соответствии с соотноше- ''. нием(11.2). Рассмотрим сеть с топологией, для которой задана случайная матрица координат для 10 нейронов в трехмерном пространстве и требуется рассчитать матрицу евклидовых расстояний между ними. pos = rand{3,10); D = mandist(pos) D = 0 0 1 0 0 0 0 1 0 0 0 0 1 1 1 1 0 1 Columns 0 .8589 .6427 .2565 .8813 .5815. .7340 .8268 .0852 .7504 Columns .8268 8910 9289 7622 7081 .3523 1911 0 8238 5772 1 0 0 0 1 1 0 0 0 1 8 1 0 0 1 1 1 1 0 1 through 8589 0 6227 9084 2433 4404 .7770 .8910 .9757 .1124 through .0852' 9757 4425 0977 9665 6107 5981 .8238 0 .8356 Применение функции: Функция суммарного координатного смещения используется в сетях с топологией, например в картах Кохонена newsom. Чтобы применить эту функцию для других сетей с топологией, необходимо установить значение свойства net.IayerWeight{i j J.distanceFcn равным 'mandist". Чтобы применить функцию взвешивания mandist, следует установить свойство net.inputWeight{i, j].weightFcn равным 'mandist'. 7 0.6427 0.6227 0 0.8333 1.5239 1.1681 1.2451 0.9289 0.4425 1.3930 10 0.7504 1.1124- 1.3930 1.2194 0.7122 0.9397 0.4031 1.5772 1.8356 1.2565 0.9084 0.8333 0 0.9730 1.0287 1.5443 1.7622 1.0977 1.2194 0.8813 1.2433 1.5239 0.9730 0 0.7039 1.1153 1.7081 1.9665 0.7122 0.5815 1.4404 1.1681 1.0287 0.7039 0 1.2512 1.3523 1.6107 0.9397 0.7340 0.7770 1.2451 1.5443 1.1153 1.2512 0 1.1911 1.5981 0.4031 304 Нейронные сети. MATLAB 6
1" 4 : Алгоритм: Сумммарное координатное смещение d между векторами х и у вычисляется в системе MATLAB следующим образом: d = sum(abs(x-y)). Сопутствующие функции: SIM, DIST, LINKD1ST. Максимальное координатное смещение BOXDIST Синтаксис: d = boxdist(pos) Описание: Функция d = boxdist(pos) вычисляет расстояния максимального координатного смещения между нейронами слоя, если задан массив координат нейронов pos размера NxS, где N - размерность пространства расположения нейронов. Выходом является массив расстояний размера SxS. Функция boxdist обычно используется в сетях с функцией топологии gridtop. Пример: Пусть задан массив случайных координат трехмерного пространства, в которых размещены 10 нейронов. Требуется вычислить массив максимальных координатных смещений между этими нейронами. pos d = d = = rand(3, 10); boxdist(pos) 0 0.1614 0.6100 0.5123 0.4512 0.3767 0.2785 0.4603 0.5502 0.2442 0.2785 0.1967 0.4536 0.4855 0.4244 0.3499 0 0.2623 0.5234 0.4422 0.1614 0 0.5282 0.3509 0.2898 0.2714 0.1967 0.3119 0.4720 0.3926 0.4603 0.3119 0.6149 0.5709 0.5097 0.4353 0.2623 0 0.7839 0.7045 0.6100 0.5282 0 0.4374 0.4965 0.3608 0.4536 0.6149 0.6900 0.5860 0.5502 0.4720- 0.6900 0.3611 0.6655 0.5298 0.5234 0.7839 0 0.4659 0.5123 0.3509 0.4374 0 0.3044 0.1805 0.4855 0.5709 0.36.11 0.4280 0.2442 0.3926 0.5860 0.4280 0.5862 0.4504 0.4422 0.7045 0.4659 0 0 0 0 0 0 0 0 0 0 4512 2898 4965 3044 0 1358 4244 5097 6655 5862 0 0 0 0 0 0 0 0 0 3767 2714 3608 1805 1358 0 .3499 .4353 .5298 .4504 11. Формирование моделей нейронных сетей 305
Применение функции: Функция максимального координатного смещения используется в сетях с топологией например в картах Кохонена newsom. Чтобы применить эту функцию для других сетей с топологией, необходимо установить значение свойства net.layerWcight{ij].distanceFcn равным 'boxdist'. Алгоритм: Максимальное координатное смещение d между векторами х и у вычисляется в системе MATLAB следующим образом: d - max(abs(x-y)). Сопутствующие функции: SIM, DIST, MAND1ST, LINKDIST. LINKDIST Расстояния связи между нейронами слоя Синтаксис: d = linkdist(pos) Описание: Функция d = Iinkdist(pos) вычисляет расстояния связи между нейронами слоя, если задан массив координат нейронов pos размера NxS, где N - размерность пространства расположения нейронов. Выходом является массив расстояний размера SxS. Пример: Пусть задан массив случайных координат трехмерного пространства, в которых размещены 10 нейронов. Требуется вычислить массив расстояний связи между этими нейронами (рис. 11.41): pos = rand(3,10); -' ,- • • '-./'"; Размещение нейронов 07 y^?^^^^ oi.; d.s:. 0L4:. ,9-3. 0^2; .'.~'0.f ...-Sx--- —-i—-^| .-{-- j -j^b^T"' r^iJ^/-^yj\~ 1Щ >-;;:-. S^v■';..;; jkTjc J§3^ Ш "" "*^—- !n. ■ ■•-oe-^ os' '-:-; .ГУ.--.- . ;; t - >*> •i -: Рис 11.41 306 Нейронные сети. MATLAB б
d = linkdist(pos) d = 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 2 1 2 1 1 1 1 1 1 2 0 1 1 1 2 2 1 1 1 1 1 0 1 1 1 1 1 1 1 2 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 2 1 1 1 0 1 1 1 1 1 2 1 1 1 1 0 Применение функции: Функция расстояния связи linkdist используется для оценки топологии при формировании слоя Кохонена newc и карты Кохонена newsom. Чтобы применить функцию расстояния связи linkdist, следует установить значение свойства net.layers{i}.distanceFcn равным 'linkdist'. Алгоритм: Расстояние связи d,y между двумя позициями векторов pos,- и pos,- из множества S векторов определяется соотношением 1, distipos, - pos j ) < 1; 2, Vk,dlk=dkJ=l; d9 =« 3, V(A,, k2), dik{ = dkiki = dkJ = 1; N, V(Ar„..,kN),diki =J^2 =... = dksj =1; S, в остальных случаях. Сопутствующие функции: SIM, DIST, MANDIST. Функции накопления Функции, задающие правила формирования входа нейрона, называются функциями накопления. Как правило, это либо сумма взвешенных входов, либо их поэлементное произведение. NETSUM, DNETSUM | Блок Simulink: Сумма взвешенных входов netsum Синтаксис: N = netsum(Z1,Z2,...) df = netsum('deriv') dN_dZi = dnetsum(Zi,N) ]J. Формирование моделей нейронных сетей 307
Описание: Функция N = nctprod(Zl, Z2,...) вычисляет функцию накопления потенциала нейрона в виде суммы элементов взвешенных входов Zi размера SxQ, где S - число нейронов в слое, Q - число элементов вектора входа. Для описания операции, выполняемой этим блоком, можно ввести следующую нотацию: tf = £Z|.=Z,+Z2+... + Zll, (П.4) где символ £ обозначает поэлементное сложение. Функция df = netsum('dcriv') возвращает имя М-функции, которая вычисляет производную суммы массивов взвешенных входов. Функция dN_dZi = dnctprod(Zi, N) вычисляет производную от суммы взвешенных входов N по одному из входов. Здесь N, Zi и dN_dZi - массивы одинакового размера SxQ. Пример: Вычислить функцию накопления потенциала для следующих взвешенных входов: Z1 = [ 1 2 4; 3 4 1]; Z2 = [-1 2 2; -5 -6 1] ; N = netsum(Zl,Z2) К = 0 4 6 -2 -2 2 Вычислить функцию накопления с учетом вектора смещения Ь. Поскольку массивы ZI и Z2 составлены из трех векторов, то с помощью функции concur должен быть создан массив из трех копий вектора смещения b для того, чтобы все размерности совпадали: Ь = [0; -1]; N = netsum(Zl,Z2,concur(b,size(Zl,2))) N = 0 4 6 -3 -3 1 Определим 2 весовые матрицы входа для слоя с тремя нейронами: Z1 = [0; 1; -1]; Z2 = [1; 0.5; 1.2]; Вычислить вход нейрона N с помощью функции netsum и затем найти производные по каждому из взвешенных входов: N = netsum(Zl,Z2) dN_dZl = dN_dZ2 = 7\Т — 1ч — 0 -2 dN„dZl = 1 1 dN„dZ2 = 1 1 dnetsum(Zl,N) dnet 4 -2 a 1 1 1 sum(Z2,N) 6 2 1 1 1 1 308 Нейронные сети. MATLAB 6
Применение функции: Функция вычисления потенциала netsum применяется в архитектуре персептрона и линейных нейронных, формируемых с помощью М-функций newp и new)in. Чтобы применить функцию вычисления потенциала nclsum, следует установить ■значение свойства nct.laycrs{i}.nclInputFcn равным 'netsum'. Алгоритм: Производная суммы по любому элементу этой суммы всегда является массивом единиц, имеющим те же размеры, что и сумма. Сопутствующиефункции: SIМ, N ЕТР RO D, СО NCU R. NETPROD, DNETPROD | Поэлементное произведение взвешенных входов Блок Simulink: Синтаксис: N = netprod(Z1,72.,..) dN_dZi = dnetprod(Zi.N) df = netprod('deriv') Описание: Функция N = netprod(Zl, Z2,...) вычисляет функцию накопления потенциала нейрона в виде поэлементного произведения массивов взвешенных входов Zi размера SxQ, где S - число нейронов в слое, Q - число элементов вектора входа. Для описания операции, выполняемой этим блоком, можно ввести следующую нотацию: N = Y]Z; =Z,.*Z2.*.„.*Z„, (11.5) где символ Y\ обозначает поэлементное произведение. Функция df = netprod('deriv') возвращает имя М-функции, которая вычисляет производную от поэлементного произведения массивов. Функция dN_dZi = dnetprod(Zi, N) вычисляет производную от поэлементного произведения взвешенных входов N по одному из входов. Здесь N, Zi и dN_dZi - массивы одинакового размера SxQ. Пример: Вычислить функцию накопления для следующих взвешенных входов: Z1 = [ 1 2 4; 3 4 1]; Z2 = [-1 2 2; -5 -6 1] ; И = netprod(Zl,Z2) N = -14 8 -15 -24 1 1J. Формирование моделей нейронных сетей 309
INK" I Инициализация нейронной сети Синтаксис: net = init(net) Описание: Функция net = init(net) выполняет инициализацию нейронной сети, используя функцию инициализации, определяемую свойством net.initFcn, и значения параметров, определяемые свойством net.initParam. 310 Нейронные сети. MATLAB 6 1 Вычислить функцию накопления с учетом вектора смещения Ь. Поскольку массивы^- ^!- Z1 и Z2 составлены из трех векторов, то с помощью функции concur должен быть создан^- массив из трех копий вектора смещения b для того, чтобы вес размерности совпадали- ~^" Ь = [0; -1]; N = netprod(Zl,Z2,concur(b,size(Zl,2))) N = 0 0 0 15 24 -1 Определим 2 взвешенных входа для слоя с тремя нейронами: Z1 = [0; 1; -1]; Z2 = [1; 0.5; 1.2]; Вычислить вход нейрона N с помощью функции netprod и затем найти производные по каждому из взвешенных входов: N = netprod(Zl,Z2); N' dN_dZl = dnetprod(Zl,N); dN_dZl' dN_dZ2 = dnetprod(Z2,N); dN_dZ2• ans = 0 0.5000 -1.2000 ans = NaN 0.5000 1.2000 ans =0 1 -1 Применение функции: Функция поэлементного произведения netprod применяется в архитектуре обобщенных регрессионных и вероятностных сетей, формируемых с помощью М-функций newgrnn и newpnn. Чтобы применить функцию вычисления потенциала netprod, следует установить значение свойства net.layers{i}.netInputFcn равным 'netprod'. Алгоритм: Производная поэлементного произведения взвешенных входов по каждому из них равна поэлементному произведению остальных взвешенных входов, за исключением особого случая, когда взвешенный вход содержит нулевой элемент. Сопутствующие функции: SIM, NETSUM, CONCUR. 11.4. Функции инициализации Функции инициализации выполняют подготовку нейронной сети к инициализации и выполняют саму инициализацию, присваивая начальные значения матрицам весов и векторам смещений.
Пример: Сформировать персептрон с одним нейроном, вход которого имеет 2 элемента со значениями в диапазонах [0 1] и [ -2 2]. net = newp([0 1; -2 2], 1); net.initFcn' net.layers{1}.initFcn net.inputWeights{l}.initFcn net.biases{1}.initFcn axis = initlay ans = initwb ans = initzero ans = initzero В результате создания персептрона мы видим, что сеть допускает возможность задавать любые функции инициализации весов и смещений, поскольку в качестве функций готовности выбраны: для сети - функция initlay, для слоя - initwb. В качестве функций инициализации для весов и смещений персептрона используется функция initzero. Выведем значения установленных весов и смещений: net.iw{l,i} net.b{l} ans =0 О ans = О Обучим персептрон на следующих обучающих множествах Р = [0 101;0011]: Т = [О О О 1J; net = train(net#P,T); net.IW{l,l) net-b{l} ans =12 ans = -3 Это приводит к установлению новых значений весов и смещений. Для того чтобы возвратиться к начальным значениям весов и смещений, характерных для данной сети, и предназначена функция init: net = init(net); net.IW{l,l} net.b{l} ans =0 0 ans = 0 Веса и смещения возвращаются к нулевым значениям, что соответствует свойствам нейронной сети персептрона. Алгоритм: Функция init проверяет свойство neLinitFcn, чтобы инициализировать нужным образом веса и смещения. Обычно свойство net.initFcn устанавливается равным 'initlay', что позволяет устанавливать функции инициализации для каждого слоя, используя свойство net.layers{i} .initFcn. //. Формирование моделей нейронных сетей 311
В сетях с обратным распространением ошибки свойство net.laycrs{ i }.initFcn устанав- ливается равным 'initnw', что соответствует алгоритму инициализации Nguyen - Widrow. Для других сетей значение свойства net.laycrs{i}.initFcn устанавливается равным 'initwb', что позволяет устанавливать произвольные функции инициализации для каждого слоя. Наиболее общий тип функции инициализации - это функция rands, которая генерирует случайные значения весов и смещений в диапазоне [-1 1]. Сопутствующие функции: SIM. ADAPT, TRAIN, 1NITLAY. INITNW, INITWB, RANDS. INITLAY I Функция готовности сети к инициализации Синтаксис: net ~ initlay(net) info = initlay(code) Описание: Функция net = initlay(net) устанавливает, что в сети net для инициализации ее слоев могут быть использованы собственные функции инициализации, определяемые свойством net.layers{i}.initFcn. Функция info = initlay(code) возвращает информацию о параметрах инициализации, соответствующую следующим значениям аргумента code: 'pnames' - имена параметров инициализации; 'pdefaults' - значения параметров инициализации по умолчанию. Initlay не имеет параметров инициализации. Применение функции: Функция инициализации initlay используется при создании сетей с помощью методов newp, newlin, newff, newcf, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к заданию произвольных функций инициализации слоев, необходимо: • установить свойство сети neUnitFcn равным 'initlay'. Это автоматически установит свойство net.initParam равным пустой матрице [ ], так как функция initlay не имеет параметров инициализации; • установить значения свойств nct.layers{i}.initFcn, соответствующие выбранным функциям инициализации для слоя, например initwb или initnw. Для того чтобы фактически инициализировать сеть, т. е. присвоить значения матрицам весов и векторам смещений, необходимо применить функцию init. Алгоритм: Веса и смещения в каждом слое i сети net инициализируются функцией, заданной значением свойства net.layers{i}.initFcn. Сопутствующие функции: INITWB, INITNW, INIT. 312 Нейронные сети. MATLAB б
INITWB Функция готовности слоя к инициализации Синтаксис: net = initwb(netj) Описание: Функция net = initwb(nct, I) устанавливает, что в сети net для инициализации слоя I будет использована функция инициализации, определяемая свойством net.layers{i].initFcn. Применение функции: Функция инициализации initwb используется при создании сетей с помощью методов newp, ncwlin, newff, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к заданию произвольных функций инициализации слоев, необходимо: • установить свойство сети net.initFcn равным 'initlay'. Это автоматически установит свойство net.initParam равным пустой матрице [ ], так как функция initlay не имеет параметров инициализации; • установить значение свойства net.layers{i} .initFcn равным 'initwb'; • установить значения свойств net.inputWeights{i,j].initFcn, net.layerWeights{i,j}.initFcn, net.biases{i}.initFcn, соответствующие выбранным функциям инициализации, например rands или midpoint. Для того чтобы фактически инициализировать сеть, т. е. присвоить значения матрицам весов и векторам смещений, необходимо применить функцию init. Сопутствующие функции: INITNW, INITLAY, INIT. INITNW Функция инициализации слоя по алгоритму NW Синтаксис: net = initnw(net,l) Описание: Функция net = initnwfnet, I) инициализирует веса и смещения слоя I сети net, используя алгоритм инициализации Nguyen - Widrow. Применение функции: Функция инициализации inilnw используется при создании сетей с помощью методов newff, newcf, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к заданию функции инициализации initnw, необходимо: • установить свойство сети net.initFcn равным 'initlay'. Это автоматически установит свойство net.initParam равным пустой матрице [ ], так как функция initlay не имеет параметров инициализации; • установить значение свойства net.layers{i} .initFcn равным 'initnw'. / /. Формирование моделей нейронных сетей 313
Для того чтобы фактически инициализировать сеть, т. е. присвоить значения Матпн:<йР цам весов и векторам смещений, необходимо применить функцию init. --Ч^) . 3-: 'У Алгоритм: -р;: Метод Nguyen - Widrow генерирует значения начальных весов и смещений так, чтобы^ активные области слоя нейронов были бы распределены приблизительно равномерно' ^ в пространстве входа. :xi Его преимуществами по сравнению с методом инициализации случайных весов-^' и смещений являются следующие: • оптимальное количество используемых нейронов; • ускорение процедуры обучения, поскольку активные зоны нейронов соответствуют пространству входа. Ограничения метода инициализации Nguyen - Widrow связаны с тем, что его можно.-"-- -1 применять только к слоям, имеющим смещения, с функцией взвешивания dorprod и функцией накопления netsum. Если эти условия не выполняются, то следует использовать метод инициализации rands. Сопутствующие функции: INITWB, INITLAY, INIT. Инициализация нулевых значений весов и смещений JNITZERO Синтаксис: W = initzero(S.PR) b = initzero(S,[1 1]) Описание: Функция W = initzero(S, PR) присваивает матрице весов слоя нулевые значения и имеет следующие входные и выходные аргументы. Входные аргументы: S - число нейронов в слое; PR - матрица размера Rx2, задающая диапазоны изменения элементов входного вектора. Выходной аргумент: W - нулевая матрица весов размера SxR. Функция b = initzero(S, [\ 1 ]) присваивает вектору смещений слоя нулевые значения и имеет следующие входные и выходные аргументы. Входной аргумент: S - число нейронов в слое. Выходной аргумент: Ъ - нулевой вектор смещений размера Sxl. 314 Нейронные сети. MATLAB 6
Нример: Присвоить нулевые значения матрице весов и вектору смещения для слоя с пятью нейронами и вектором входа, элементы которого принимают значения в диапазонах [0 1] [-2 2]. W = inifczero(5, [0 1; -2 2]) b = initzero(5, [l 1]) w = 0 0 0 0 0 0 0 0 0 0 b = о о о о о Применение функции: Функция инициализации initzero используется при создании сетей с помощью методов nevvp, newlin, атакже при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к заданию функции инициализации initzero, необходимо: • установить свойство сети netinitFcn равным 'initlay'. Это автоматически установит свойство net.initParam равным пустой матрице [ ], так как функция initlay не имеет параметров инициализации; • установить значение свойства net.Iayers{i}.initFcn равным 'initwb'; ■ установить значения свойств net.inputWeights{i,j}.initFcn, net.layerWeights{i,j}.initFcn, netbiases{i}.initFcn равными initzero. Для того чтобы фактически инициализировать сеть, т. е. присвоить нулевые значения матрицам весов и векторам смещений, необходимо применить функцию init. Сопутствующие функции: INITWB, INITLAY, INIT. MIDPOINT Инициализация матрицы средних значений Синтаксис: W = midpoint(S, PR) Описание: Функция W = midpoint (S, PR) присваивает элементам матрицы весов слоя средние значения элементов вектора входа и имеет следующие входные и выходные аргументы. Входные аргументы: S - число нейронов в слое; PR - матрица размера Rx2, задающая диапазоны изменения элементов входного вектора [Рт/П Ртах]. Выходной аргумент: W - матрица весов размера SxR с элементами столбцов, равными (Pmj„+Pmax)/2. П. Формирование моделей нейронных сетей 315
Пример: Присвоить нулевые значения матрице весов и вектору смещения для слоя с пятью нейрона, ми и вектором входа, элементы которого принимают значения в диапазонах [01], [-2 2]. W = midpoint(5,[0 1; -2 2]) W = 5.0000е-001 О 5.0000е-001 О 5.0000е-001 О 5.0000е-001 О 5.0000е-001 0 Применение функции: Функция инициализации midpoint используется при создании сетей с помощью метода newp, атакже при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть кзаданию функции инициализации midpoint, необходимо: • установить свойство сети netinitFcn равным 'initlay'. Это автоматически установит свойство net.initParam равным пустой матрице [ ], так как функция initlay не имеет параметров инициализации; • установить значение свойства net.layers{i} .initFcn равным 'initwb'; • установить значения свойств neUnputWeights{i, j} .initFcn, net.layerWeights{i, j}.initFcn равными midpoint. Для того чтобы фактически инициализировать сеть, т. е. присвоить нулевые значения матрицам весов и векторам смещений, необходимо применить функцию init. Сопутствующие функции: INITWB, INITLAY, INIT. RANDS I Инициализация случайных весов/смещений Синтаксис: W = rands(S.PR) М = rands(S.R) v = rands(S) Описание: Функции семейства rands предназначены для инициализации случайных массивов весов и смещений. Функция W = randsfS, PR) имеет 2 входных аргумента: S - число нейронов; PR - массив минимальных и максимальных значений вектора входа размера Rx2. Выходом является случайная матрица весов размера SxR с элементами из диапазона [-11]. Функция М = rands(S, R) использует в качестве второго аргумента параметр R, соответствующий числу элементов вектора входа. Выходом также является случайная матрица весов размера SxR с элементами из диапазона [-1 1 ]. 316 Нейронные сети. MATLAB 6
функция v = rands(S) возвращает случайный вектор размера Sxl с элементами из диапазона^ 1]. Пример: Сформируем с помощью функции rands различные массивы случайных величин: W = rands(4,[0 1; -2 2]) М = rands(2,3) v = W = М = = rands(4) 0.9003 -0.5377 0.2137 «0.0280 0.6428 -0.1106 -0.6475 -0.1886 0.8709 0.8338 0.7826 0.5242 -0.0871 -0.9630 0.2309 0.5839 0.8436 0.4764 Применение функции: Для того чтобы подготовить сеть к заданию функции инициализации rands, необходимо: • установить свойство сети net.initFcn равным 'initlay'. Это автоматически установит свойство net.initParam равным пустой матрице [ ], так как функция initlay не имеет параметров инициализации; • установить значение свойства net.layers {i}. initFcn равным 'i nitwb'; • установить значения свойств net.inputWeights{ i, j} .initFcn, net.layerWeights{i, j} .initFcn равными rands. Для того чтобы фактически инициализировать сеть, т. ё. присвоить случайные значения матрицам весов и векторам смещений, необходимо применить функцию init. Сопутствующие функции: RANDNR, RANDNC, INITWB, INITLAY, INIT. RANDNC Инициализация случайной матрицы с нормированными столбцами Синтаксис: W = randnc{S,PR) W = randnc(S.R) Описание: Функции семейства randnc аналогичны функциям rands, но предназначены только для инициализации весов. К ним возможны 2 формы обращения, которые возвращают случайную матрицу весов размера SxR с нормированными столбцами. //. Формирование моделей нейронных сетей 317
Пример: Сформируем случайный массив из четырех нормированных трехэлементных столбцов* '\ М = randnc(3,4) -M М = '-£ -0.6007 -0.4715 -0.2724 0.5596 V -0.7628 -0.6967 -0.9172 0.7819 -0.2395 0.5406 -0.2907 0.2747 .; Сопутствующие функции: RANDNR, RANDS. Ч RANDNR Инициализация случайной матрицы . с нормированными строками ; Синтаксис: W = randnr(S.PR) W = randnr(S.R) Описание: Функции семейства randnr аналогичны функциям rands, но предназначены только для инициализации весов. К ним возможны 2 формы обращения, которые возвращают случайную матрицу весов размера SxR с нормированными строками. Пример: Создадим случайную матрицу из трех нормированных четырехэлементных строк: .. W = randnr(3/4) W = 0.9713 0.0800-0.1838 -0.1282 0.8228 0.0338 0.1797 0.5381 -0.3042 -0.5725 0.5436 0.5331 Сопутствующие функг{ии: RANDNC, RANDS. || INITCON Функция инициализации равных смещений' '■-■$ Синтаксис: b = initcon(S.PR) Описание: Функция initcon является функцией инициализации смещений, которая инициализи-" рует смещения для сети с функцией настройки learncon. . ■„ Функция b = initcon(S, PR) присваивает значения вектору смещения и имеет следующие входные и выходные аргументы. Входные аргументы:, S - число нейронов в слое; PR - матрица размера Rx2, задающая диапазоны изменения элементов входного вектора, по умолчанию [1 1]'. 318 Нейронные сети. MATLAB 6.
Выходной аргумент: b - вектор смещений размера Sx 1. Функция initcon может также быть использована для инициализации весов, но применение ее для этой цели не рекомендуется. Пример: Начальные значения смещений рассчитаем для слоя с пятью нейронами: b = initcon{5) b* = 1.3591е+001 1.3591e+001 1.3591e+001 1.359Xe+001 1.3591e+001 Применение функции: Функция инициализации initcon используется при создании сетей с помощью метода newe, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к заданию функции инициализации midpoint, необходимо: • установить свойство сети net.initFcn равным 'initlay'. Это автоматически установит свойство net.initParam равным пустой матрице [ ], так как функция initlay не имеет параметров инициализации; • установить значение свойства net.layers{i}.initFcn равным 'initwb'; • установить свойство net.biases {i} .initFcn на 'initcon1. Для того чтобы фактически инициализировать сеть, необходимо применить функцию init Алгоритм: Функция learncon модифицирует смещения так, чтобы значение каждого смещения b(i) являлось функцией среднего значения выхода для нейрона с номером i. Начальные значения смещений устанавливаются равными fc(i) = ехр(1)х5. Сопутствующие функции: INITWB, INITLAY, INIT, LEARNCON. REVERT Возвращение к ранее установленным значениям весов и смещений Синтаксис: "•:■ net = revert(net) Описание: Функция net = revert(net) возвращает веса и смещения к значениям, соответствующим последней процедуре инициализации. Если же изменениям подвергались связи между нейронами или изменялось их количество, то функция revert не может восстановить прежних значений и присваивает весам и смещениям нулевые значения. Сопутствующие функции: INIT, SIM, ADAPT, TRAIN. 11. Формирование моделей нейронных сетей 319
11.5. Функции адаптации и обучения Функции адаптации Метод адаптации. В качестве метода адаптации сетей в ППП NNT применяется функция adapt, которая позволяет установить функции адаптации сети и настройки се параметров' присваивая свойствам net.adaptFcn и net.adaptParam требуемые значения. ADAPT Адаптация параметров сети Синтаксис: [net.Y.E.Pf.Af] = adapt(net,P,T,Pi,Ai) Описание: Функция [net, Y, Е, Pf, AfJ = adapt(net, P, Т, Pi, Ai) является методом для объектов класса network object, который реализует режим адаптации нейронной сети. Эта функция характеризуется следующими входными и выходными аргументами. Входные аргументы: net - имя нейронной сети; Р - массив входов; Т - вектор целей, по умолчанию нулевой вектор; Pi - начальные условия на линиях задержки входов, по умолчанию нулевой вектор; Ai - начальные условия на линиях задержки слоев, по умолчанию нулевой вектор. Выходные аргументы: net - структура объекта network object после адаптации; Y - массив выходов; Е - массив ошибок; Pf - начальные условия на линиях задержки входов после адаптации; Af - начальные условия на линиях задержки слоев после адаптации. Заметим, что входной аргумент Т используется только при наличии целевых выходов. Аргументы Pi и Pf используются только в случае динамических сетей, имеющих линии задержки на входах или в слоях. Входные аргументы Р и Т могут иметь 2 формата: формат cell array и double array. Формат cell array наиболее прост для понимания и соответствует последовательному представлению данных. Последовательное представление данных. Каждую строку массива ячеек можно рассматривать как временную последовательность, и тогда описание многомерной сети может быть выполнено следующим образом: Р - массив ячеек размера NixTS, каждый элемент которого P{i, ts} - числовой массив размера RixQ; Т - массив ячеек размера NtxTS, каждый элемент которого P{i, ts} - числовой массив размера VixQ; Pi -массив ячеек размера NixID, каждый элемент которого Pi{i, k} - числовой массив размера RixQ; 320 Нейронные сети. MATLAB б
Ai - массив ячеек размера NlxLD, каждый элемент которого Ai {i, k} - числовой массив размера SixQ; Y - массив ячеек размера NoxTS, каждый элемент которого Y{i, ts} - числовой массив размера UixQ; Ff - массив ячеек размера NixID, каждый элемент которого Pf{i, k} - числовой массив размера RixQ; Af- массив ячеек размера NlxLD, каждый элемент которого Af{i, k} - числовой массив размера SixQ. Параметры описания массивов ячеек и их связь с параметрами сети показаны в следующей таблице. Параметр описания Ni N1 No Nt ID TS Q LD Ri Si Vi Ui Параметр сети nelnumlnputs net.numLayers net.numOutputs netrtumTargets netrtumlnputDelays net.numLayerDelays net.inputs{i}.size net.layers{i}.size rtet.targets{i}.size rtet.outputs{i}.size Назначение Количество векторов входа Количество слоев Количество выходов Количество целевых выходов Максимальное значение задержки на входе Число шагов по времени Количество реализаций для фиксированного момента времени Максимальные значения задержек для слоев Количество элементов /-го вектора входа Количество нейронов i-ro слоя Количество элементов i-ro вектора цели Количество элементов i-ro вектора выхода Столбцы массивов начальных условий Pi, Pf, Ai, Af упорядочены следующим образом: Pi{i, k} - значение начального условия для линии задержки /-го входа в момент времени ts = к - ID; Pf{i, к} - значение начального условия для линии задержки /-го входа в момент времени ts = TS + k - Ю; Ai {i, k} - значение начального условия для линии задержки /-го слоя в момент времени ts = k - LD; Af {i, к} - значение начального условия для линии задержки /-го слоя в момент времени ts = TS + k - LD. Групповое представление данных можно использовать только при адаптации статических сетей (TS = 1). При этом следует помнить, что'при переходе от формата последовательного представления данных cell array к формату группового представления double array массив ячеек, содержащий, например, Ni числовых массивов размера RixQ, преобразуется в Ni единственный числовой массив размера £ R; xQ. 1=1 J J. Формирование моделей нейронных сетей 321
Следующая таблица поясняет связь этих форм представления. Аргумент Р Т Pi А; Y Pf Af Формат Cell array Sizc(P) Их] N.xl NLxID NjxLD N0xl NjxID N^LD Size(P{I,l}) RixQ VixQ RsxQ SixQ UixQ Ri><Q SixQ Double array Sizc(P) i"=] Z^xg £K(.x(/£>*0 i=l £5fx(LD*0 1=1 f=i t.R,x{ID*Q) iS;x(LD*Q) Алгоритм: Метод adapt вызывает функцию адаптации, заданную свойством net.adaptFcn со значениями параметров адаптации, заданными свойством net.adaptParam. Заданную входную последовательность длиной TS циклов сеть обрабатывает следующим способом: на каждом шаге адаптации сети представляется 1 вектор последовательности и обновляются веса и смещения. Таким образом, при проходе одной последовательности параметры сети обновляются TS раз. Сопутствующие функции: SIM, INIT, TRAIN. Переопределяемые методы: network\sim network\init network\train ADAPTWB I Функция установки режима адаптации Синтаксис: [net,Ac,EI] = adaptwb(netlPd,TI,Ai,Q,TS) info = adaptwb(code) 322 Нейронные сети. MATLAB 6
Описание: Функция [net, Ac, El] = adaptwb(net, Pd, Tl, Ai, Q, TS) устанавливает режим адаптации, при котором веса и смещения каждого слоя могут быть настроены с использованием собственной функции настройки. Функция adaptwb имеет следующие входные и выходные аргументы. Входные аргументы: pel - исходная нейронная сеть; Pd - вектор максимальных задержек по слоям; TI - вектор целей для слоя; Ai - начальные условия на линиях задержки; Q - количество реализаций для фиксированного момента времени; TS - число шагов по времени. Выходные аргументы: net - структура объекта network object после адаптации; Ас - массив выходов слоя; Е1 - массив ошибок для слоя. Входные и выходные массивы характеризуются следующими размерами: Pd - массив ячеек размера IDxNixTS, каждый элемент которого Pd{i, j, ts} - числовой массив размера ZijxQ; Tl - массив ячеек размера NlxTS, каждый элемент которого Tl{i, ts} - числовой массив размера VixQ, возможно пустой []; Ai - массив ячеек размера NlxLD, каждый элемент которого Ai {i, k} - числовой массив размера SixQ; Ас ~ массив ячеек размера Nlx(LD-KTS), каждый элемент которого Ac {i, k} - числовой массив размера SixQ; El - массив ячеек размера NlxTS, каждый элемент которого El{i, k} - числовой массив размера VixQ, возможно пустой [}. Параметры описания массивов ячеек и их связь с параметрами сети представлены в следующей таблице. Параметр описания Параметр сети Назначение Ni N1 No Nt ID LD Ri Si Vi _ netnumlnputs Количество векторов входа net.numLayers Количество слоев netnumOutputs Количество выходов netnumTargets Количество целевых выходов netnumlnputDelays Максимальное значение задержки на входе netnumLayerDelays Максимальные значения задержек для слоев net.inputs{i}.size net.layers{i}.size net. targe ts{i} .size Количество элементов i-ro вектора входа Количество нейронов i-ro слоя Количество элементов /-го вектора цели Число шагов по времени //. Формирование моделей нейронных сетей 323
Q Я] Количество реализаций для фиксированного момента времени Произведение длины вектора входа слоя /" на максимальное значение задержки от слоя / к слою у. Ri * length(net.inputWeights{i, j}.delays) %■£, -Ь Функция адаптации adaptwb имеет параметр net.adaptParam.passes, который определяв ет количество проходов обучающей последовательности в процессе адаптации, по умо л- \ чанию 1. :.'=' Функция info=adaptwb(code) возвращает информацию о параметрах адаптации, соответствующую следующим значениям аргумента code: 'pnames' - имена параметров адаптации; 'pdefaults' - значения параметров адаптации по умолчанию. Применение функции: Функция адаптации adaptwb используется при создании сетей с помощью методов newp,. newlin, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к адаптации параметров слоев, необходимо: • установить свойство сети netadaptFcn равным 'adaptwb1. Это автоматически установит свойство net.adaptParam равным значению по умолчанию; "'''■■ • установить значения свойств net.layerWeights{i,j}.learnFcn, net.biases{i}.learnFcn соответствующими выбранным функциям настройки. Для того чтобы фактически адаптировать сеть, необходимо: • выполнить инициализацию сети; • присвоить значения параметрам адаптации, т. е. свойствам net.adaptParam; .,.;-. • применить функцию adapt. Алгоритм: Веса и смещения слоя изменяются в соответствии с заданной функцией настройки . на каждом шаге адаптации. » Сопутствующие функции: NEWP, NEWLIN, TRAIN. - v В состав 12-го выпуска программных продуктов фирмы MathWorks включена новая ; обучающая функция trains, которая реализует адаптивное обучение с последовательным ' представлением входов и предназначена для того, чтобы в дальнейшем заменить функ- ; цию адаптации adaptwb, которая отнесена к категории устаревших (obsolete). Это означает, что при использовании метода adapt теперь следует устанавливать свойство сети ; netadaptFcn равным 'trains'. Если же используется метод train, то следует установить свой-;: ство сети net.trainFcn равным 'trains'. Фактически это означает, что процедуры адаптации - выводятся из употребления и заменяются процедурами обучения. Однако для сохранения?, преемственности с предшествующими версиями ППП NNT допустимо использовать', и метод адаптации. 324 Нейронные сети. MATLAB6 *
TRAINS Адаптивное обучение с последовательным представлением входов Синтаксис: [net,TR(Ac,EI] = trains{net1Pd1TI,Ai,Q,TS1WJTV) info = trains(code) Описание: Функция trains не вызывается непосредственно. К ней обращаются методы adapt и train, когда свойства net.adaptFcn или net.trainFcn соответствуют значению 'trains'. Функция trains настраивает веса и смещения на каждом шаге адаптивного обучения. При этом реализуется последовательное представление входов. Функция [net, TR, Ac, El] = trains(net Pd, TI, Ai, Q, TS, VV, TV) имеет следующие входные и выходные аргументы. Входные аргументы: net - исходная нейронная сеть; Pd - вектор максимальных задержек по слоям; Т1 - вектор целей для слоя; Ai - начальные условия на линиях задержки; Q - количество реализаций для фиксированного момента времени; TS — число шагов по времени; VV - структура, описывающая контрольное множество; TV - структура, описывающая тестовое множество. Выходные аргументы: net - структура объекта network object после адаптации; TR - характеристики процедуры обучения: TR.timesteps - длина последней выборки; TR.perf- значения функции качества на последнем цикле обучения; Ас - массив выходов слоя для последнего цикла; EI - массив ошибок для слоя для последнего цикла. Входные и выходные массивы характеризуются следующими размерами: Pd - массив ячеек размера IDxNixTS, каждый элемент которого Pd{ i, j, ts} - числовой массив размера ZijxQ; TI - массив ячеек размера NlxTS, каждый элемент которого Tl{i, ts} - числовой массив размера VixQ, возможно пустой []; Ai - массив ячеек размера NlxLD, каждый элемент которого Ai{i, к} - числовой массив размера SixQ; Ас - массив ячеек размера Nlx(LD-t-TS), каждый элемент которого Ac {i, k} - числовой массив размера SixQ; El - массив ячеек размера NlxTS, каждый элемент которого El {i, к} - числовой масг сив размера VixQ, возможно пустой []. Параметры описания массивов ячеек и их связь с параметрами сети представлены в следующей таблице. Л. Формирование моделей нейронных сетей 325
Параметр описания Ni " Ni " No — ■■-- ID LD Ri Si Vi TS Q Zij Параметр сети net.numlnputs net.numLayers. net.numOutputs net.numTargets net.numlnputDelays net.numLayerDelays net.inputs{i}.size net.layers{i}.size net.targets{i}.size Назначение Количество векторов входа Количество слоев Количество выходов Количество целевых выходов Максимальное значение задержки на входе Максимальные значения задержек для слоев Количество элементов i-ro вектора входа Количество нейронов i-ro слоя Количество элементов /-го вектора цели Число шагов по времени Количество реализаций для фиксированного момента времени Произведение длины вектора входа слоя i на максимальное значение задержки от слоя i к слою./: Ri * length(net.inputWeights{i, j}.delays) Функция адаптивного обучения trains имеет параметр net.trainParam.passes, который определяет количество проходов обучающей последовательности в процессе адаптации, по умолчанию 1. Функция trains не использует для оценки представительности выборки контрольного и тестового подмножеств, поэтому входные аргументы VV и TV игнорируются. Функция info = trains(code) возвращает информацию о параметрах адаптивного обучения, соответствующую следующим значениям аргумента code: 'pnames' - имена параметров адаптивного обучения; 'pdefaults' - значения параметров адаптивного обучения, принимаемые по умолчанию. Применение функции: Чтобы сформировать нейронную есть, используя функцию адаптивного обучения trains, следует: • установить свойство net.adaptFcn равным 'trains'. Это автоматически установит сво й- ство net.adaptParam равным значению по умолчанию; • установить значения свойств nct.layerWeights{i, j}.learnFcn, net.biases{i}.learnFcn соответствующими выбранным функциям настройки. Для того чтобы фактически выполнить адаптивное обучение сети, необходимо: • установить желаемые значения параметров настройки весов и смещений; • вызвать функцию adapt Алгоритм: Элементы матриц весов и векторов смещения изменяются в соответствии с заданной функцией настройки на каждом шаге адаптивного обучения. 326 Нейронные сети. MATLAB б
Пример: Создать нейронную сеть на основе персептрона с вектором входа из двух элементов со значениями из диапазона [-2 2] и выполнить адаптивное обучение, используя функцию trains. Формирование персептрона: net = newp{[-2 2;-2 2],1); Формирование векторов входа и цели: Р = {[2;2] [1,-2] [-2;2] [-1;1]); Т = {[О] [1] [0] [1]); Адаптивное обучение с использованием трех циклов: net.adaptFen = "trains'; net.adaptParam.passes =3; [net,a,e]=adapt(net,P,T); a a = 0 1 n 0 1 Выход сети после адаптивного обучения полностью совпадает с вектором целей. Сформировать линейную динамическую нейронную сеть с одним выходом, линией задержки на входе [0 1], диапазоном изменения элементов входа [-1 1] и адаптивно обучить ее за 80 проходов с параметром скорости обучения 0.01. Формирование сети: net = newlin([-l 1],1, (0 13,0.01); Формирование векторов входа и цели: Р1 ■ {0 -1 11 О -1 1 0 0 1J; Т1 = {о -1 о 2 1 -1 о 1 о lb- Адаптивное обучение: net.trainFcn='trains•; net.trainParam.passes ~ 80; [net,TR]=train(net,Pl#Tl); Выполним моделирование сети при заданном входе: Y ш sim(net,Pl); Y = [Y{:)] Y = 0.0201 -0.9411 0.0282 1.9344 0.9732 -0.9411 0.0282 0.9732 0.0201 0.9813 Результат моделирования близок к вектору целей. При этом среднеквадратичная ошибка составляет Е = mse(Y-[Tl{:}]) Е = 0.0015 Сопутствующие функции: NEWP, NEWLIN, TRAIN, TRAINB, TRAINC, TRAINR. 11. Формирование моделей нейронных сетей 327
Функции обучения Метод обучения. В качестве метода обучения сетей в ППП NMT версии 4 применяется - функция train, которая позволяет установить процедуры обучения сети и настройки ее параметров, присваивая свойствам neurainFcn и net.trainParam требуемые значения. TRAIN Обучение нейронной сети Синтаксис: [net, TR] = train(net,P,T,Pi1Ai) [net. TR] = tra[n(net,P,T1Pi,Ai1VV,TV) Описание: Функция [net, TR] = train(net, P, T, Pi, Ai) является методом для объектов класса network object, который реализует режим обучения нейронной сети. Эта функция характеризуется следующими входными и выходными аргументами. Входные аргументы: net - имя нейронной сети; Р - массив входов; Т - вектор целей, по умолчанию нулевой вектор; Pi - начальные условия на линиях задержки входов, по умолчанию нулевой вектор; Ai - начальные условия на линиях задержки слоев, по умолчанию нулевой вектор. Выходные аргументы: net - структура объекта network object после обучения; TR - характеристики процедуры обучения: TR.timesteps - длина последней выборки; TR.pcrf - значения функции качества на последнем цикле обучения. Заметим, что входной аргумент Т используется только при наличии целевых выходов. Аргументы Pi и Pf используются только в случае динамических сетей, имеющих линии задержки на входах или в слоях. Входные аргументы Р и Т могут иметь 2 формата: cell array и double array. Формат cell array ; наиболее прост для понимания и соответствует последовательному представлению данных. ; Последовательное представление данных. Каждую строку массива ячеек можно рассмат- . ривать как временную последовательность, и тогда описание многомерной сети может '■ быть представлено следующим образом: ■ Р - массив ячеек размера NixTS, каждый элемент которого Р {i, ts} - числовой массив : размера RixQ; \ Т - массив ячеек размера NtxTS, каждый элемент которого Т{ i, ts} - числовой массив j размера VixQ; Pi -массив ячеек размера NixID, каждый элемент которого Pi {i, k} - числовой массив размера RixQ; Ai - массив ячеек размера NlxLD, каждый элемент которого Ai {i, k} - числовой массив размера SixQ; 328 Нейронные сети. MATLAB б
Y - массив ячеек размера NoxTS, каждый элемент которого Y {i, ts} - числовой массив размера UixQ; Pf - массив ячеек размера NixID, каждый элемент которого Pf{i, k} - числовой массив размера RixQ; Af - массив ячеек размера NIxLD, каждый элемент которого Af{i, k} - числовой массив размера SixQ. Параметры описания массивов ячеек и их связь с параметрами сети представлены в следующей таблице. Параметр описания Ni N1 No Nt ID TS Q LD Ri Si Vi Ui Параметр сети netnurnlnputs net.num Layers netnumOutputs net.numTargets netnumlnputDelays net.n um LayerDelays net.inputs{i}.size net.layers{i}.size net. targetsft}. size net.outputs{i}.size Назначение Количество векторов входа Количество слоев Количество выходов Количество целевых выходов Максимальное значение задержки на входе Число шагов по времени Количество реализаций для фиксированного момента времени Максимальные значения задержек для слоев Количество элементов j'-ro вектора входа Количество нейронов /-го слоя Количество элементов /-го вектора цели Количество элементов /-го вектора выхода Столбцы массивов начальных условий Pi, Pf, Ai, Af упорядочены в соответствии со следующими условиями: Pi {i, k} - значение начального условия для линии задержки i-го входа в момент времени ts = к - ID; Pf {i, к} - значение начального условия для линии задержки /-го входа в момент времени ts = TS + k - ID; . - Ai {i, k} - значение начального условия для линии задержки г-го слоя в момент времени ts = k ~ LD; Af {i, к} - значение начального условия для линии задержки /-го слоя в момент времени ts = TS + k - LD. Групповое представление данных можно использовать только при обучении статич еских сетей (TS = 1). При этом следует помнить, что при переходе от формата послсдовательн о- го представления данных cell array к формату группового представления double array массив ячеек, содержащий, например, Ni числовых массивов размера RixQ, преобразуется К- в единственный числовой массив размера £ /?( xQ. Следующая таблица поясняет связь этих форм представления. / /. Формирование моделей нейронных сетей 329
Аргумент Р Т Pi Aj Формат Cell array Sizc(P) N;Xl N,xl NjxID NjxLD Sizc(P{I,l}) RjxQ VixQ RixQ SixQ Double array Sizc(P) I^xe 'V, (=1 1=1 Функция [net, TR] = trainfnet, P, T, Pi, Ai, VV, TV) позволяет использовать в процессе обучения контрольные и тестовые подмножества для оценки представительности используемых обучающих выборок. Эти подмножества описываются массивами структур со следующими полями: VV.P, TV.P - контрольное и тестовое подмножества векторов входов; VV.T, TV.T - контрольное и тестовое подмножества векторов целей; VV.Pi, TV.Pi - начальные значения задержек на входе сети для контрольного и тестового подмножеств, по умолчанию нулевые; VV.Ai, TV.Ai - начальные значения задержек на слоях для контрольного и тестового подмножеств, по умолчанию нулевые. Алгоритм: Метод train вызывает функцию обучения, заданную свойством nettrainFcn со значениями параметров обучения, заданными свойством nettrainParam. Обычно цикл обучения определяется как предъявление сети всех векторов входа. Затем выполняется настройка параметров сети. Обучение продолжается до тех пор, пока не будет выполнено заданное число циклов обучения, не будет достигнуто допустимое значение критерия качества обучения или выполнено любое другое условие остановки для выбранной функции обучения. Сопутствующие функции: SIM, INIT, ADAPT. Представление входных данных. Для задания способа представления входных данных в ПГШ NNT версии 4 включены функции trainb, trainc, trainr и trains. Эти функции должны быть заданы как значения свойства net.trainFcn. Для каждой из этих функций требуется задать желаемую функцию настройки параметров, присваивая соответствующие значения свойствам net.inputWcights{i, jJ.IearnFcn, net.layerWeights{i, jJ.learaFcn, net.biases{i}.lcamFcn. 330 Нейронные сети. MATLAB 6
TRAINB Групповое обучение Синтаксис: [net.TR.Ac.EI] = trainb(net,Pd>Tl1Ai1Q,TS,W,TV) info = tratnb(code) Описание: Функция trainb не вызывается непосредственно. К ней обращается метод train, когда свойство net.trainFcn соответствует значению 'trainb'. Функция trainb настраивает веса и смещения при каждом предъявлении сети входной последовательности. Функция [net, TR, Ac, El] = trainb(net Pd, TI, Ai, Q, TS, VV, TV) имеет следующие входные и выходные аргументы. Входные аргументы: net - исходная нейронная сеть; Pd - вектор максимальных задержек по слоям; TI - вектор целей для слоя; Ai - начальные условия на линиях задержки; Q - количество реализаций для фиксированного момента времени; TS - число шагов по времени; VV - структура, описывающая контрольное множество; TV - структура, описывающая тестовое множество. Выходные аргументы: net - структура объекта network object после адаптации; TR - характеристики процедуры обучения: TR.epoch - вектор, определяющий циклы обучения; TR.perf - значения функции качества по циклам обучения; TR.vperf - значения контрольной функции по циклам обучения; TR.tperf - значения тестовой функции по циклам обучения; Ас - массив выходов слоя для последнего цикла; Е1 - массив ошибок слоя для последнего цикла. Входные и выходные массивы характеризуются следующими размерами: Pd - массив ячеек размера IDxNixTS, каждый элемент которого Pd{ i, j, ts} - числовой массив размера ZijxQ; TI - массив ячеек размера NlxTS, каждый элемент которого TI {i, ts} - числовой массив размера VixQ, возможно пустой []; Ai - массив ячеек размера NIxLD, каждый элемент которого Ai {i, k} - числовой массив размера SixQ; Ас - массив ячеек размера Nlx(LD+TS), каждый элемент которого Ac {i, k} - числовой массив размера SixQ; EI - массив ячеек размера NlxTS, каждый элемент которого El (i, k} - числовой массив размера VixQ, возможно пустой []. Параметры описания массивов ячеек и их связь с параметрами сети представлены в следующей таблице. И. Формирование моделей нейронных сетей 331
Параметр описания Ni N1 Nt ID LD Ri Si Vi TS Q Zij Параметр сети net. num inputs net.numLayers net.numTargets net.numlnputDelays net.numLayerDeiays net.inputs{i}.size net.layers{i}.size net.targets{ij.size Назначение Количество векторов входа Количество слоев Количество целевых выходов Максимальное значение задержки на входе Максимальные значения задержек для слоев Количество элементов /-го вектора входа Количество нейронов i-го слоя Количество элементов /-го вектора цели Число шагов по времени Количество реализаций для фиксированного момента времени Произведение длины вектора входа слоя / на максимальное значение задержки от слоя / к слою./: Ri * lcngth(nct.inputWeights{i, j}.delays) Если входные аргументы VV или TV не пустые ([ ]), то они должны быть массивами структур: VV.PD, TV.PD - контрольное и тестовое подмножества векторов входов после линии задержки, по умолчанию нулевые; VV.TI, TV.T1 - контрольное и тестовое подмножества векторов целей слоя; V V. Ai, TV. Ai - контрольное и тестовое подмножества начальных условий на входе; VV.Q, TV.Q - число выборок контрольного и тестового подмножеств; VV.TS, TV.TS - длина выборок контрольного и тестового подмножеств. Контрольные и тестовые подмножества используются для предотвращения явления переобучения. Процедура обучения прекращается при достижении следующих значений параметров функции trainb: Параметр nettrainParam.epochs nettrainParam.goal net.trainParam.max_fail net.trainParam.show net.trainParam.time Назначение Максимальное число циклов обучения, по умолчанию 100 Предельное значение показателя качества обучения, по умолчанию 0 Максимально допустимый уровень превышения ошибки контрольного подмножества по сравнению с обучающим, по умолчанию 5 Интервал вывода данных, по умолчанию 25 циклов, отмена вывода- NaN. Максимальное время обучения в секундах, по умолчанию Inf Функция info = trainb(code) возвращает информацию о параметрах группового обучения, соответствующую следующим значениям аргумента code: 'pnames' - имена параметров группового обучения; 'pdefaults' - значения параметров группового обучения, принимаемые по умолчанию. 332 Нейронные сети. MATLAB 6
Применение функции: Чтобы сформировать нейронную есть, используя функцию обучения trainb, следует: • установить свойство net.trainFcn равным 'trainb'. Это автоматически установит свойство ncUrainParam равным значению по умолчанию; • установить значения свойств net.inputWeights {i, j} .leamFcn, net.layerWeights {i, j} .lcarnFcn, nct.biases{i}.leamFcn соответствующими выбранным функциям настройки. Для того чтобы фактически выполнить групповое обучение сети, необходимо: • установить желаемые значения параметров настройки весов и смещений; • установить желаемые значения свойств net.trainParam; • вызвать функцию train. Алгоритм: Элементы матриц весов и векторов смещения изменяются в соответствии с заданной функцией настройки на каждом цикле обучения. Обучение прекращается, когда выполняется одно из следующих условий: • достигнуто максимальное число циклов обучения; • значение функции качества стало меньше предельного; • превышено максимальное время, отпущенное на обучение; • ошибка контрольного подмножества превысила ошибку обучающего более чем в max_fail раз. Пример: Сформировать динамическую линейную нейронную сеть с одним выходом, линией задержки на входе [0 1], диапазоном изменения элементов входа [-1 1] и адаптивно обучить ее за 200 циклов с параметром скорости обучения 0.01. Формирование сети: net = newlin([-l 1Ы, [О 1],0.01); Формирование векторов входа и цели: Р1 = {0 -1 1 1 0 -1 1 О О 1}; Т1 = {0 -1 0 2 1 -1 0 1 0 1}; Групповое обучение: net♦trainFcn»'trainb'; net.trainParam.epochs = 200; [net,TR]=train(net,Pl,Tl); % Рис.11.42 На рис. 11.42 представлена зависимость показателя качества в течение 200 циклов обучения. //. Формирование моделей нейронных сетей 333
Tchccih l.SI3Wft7, пгвдельнмй i Ш fHsilt niiilHIli'inilliHSslilUliifsltlli-ilHr !=!!!!!!!!!? Щ?|циЙНН||!!'5Н!ЩНПШНЙ!!!Г ^!1!П!1Ш1!!!|П!1ННЦ||11Н!!111?!1!!11=;1:Р!!!1Г ii::;:e:::|i:::;J!ii:;:Mt:;:i|>^i!:j::tlHi:::3p:; ^НмШ|Ш1!П!П![Ш!!П!||||П!шШш!!Ш1-!Г t**"jr аз 40 eo шжтШ: Выполним моделирование сети при заданном входе: Y = sim<netrPl); Y = [Y{:}] Y = 0.0002 - -0.9994 0.0003 1.9993 -0.9994 0.0003 0.9997 0.0002 Рис. 11.42 0.9997 0.9998 Результат моделирования близок к вектору целей. При этом среднеквадратичная ошибка составляет Е = mse(Y-[Tl{:}]) Е = 1.5137е-007 ■ Сопутствующие функции: NEWP, NEWLIN, TRAIN. TRAINC Обучение нейронной сети с циклическим представлением входа Синтаксис: [net.TR.Ac.EJ] = trainc(net.Pd,TI,AitQfTS,VVtTV) info = trainc(code) Описание: Функция trainc не вызывается непосредственно. К ней обращается метод train, когда свойство net.trainFcn соответствует значению 'trainc'. Функция trainc настраивает веса и смещения при каждом предъявлении сети входной последовательности в циклическом порядке. Функция [net, TR, Ac, El] = trainc(net Pd, Tl, Ai, Q, TS, VV, TV) имеет следующие входные и выходные аргументы. Входные аргументы: net - исходная нейронная сеть; Pd - вектор максимальных задержек по слоям; TI - вектор целей для слоя; Ai - начальные условия на линиях задержки; Q - количество реализаций для фиксированного момента времени; TS - число шагов по времени; VV - структура, описывающая контрольное множество; TV - структура, описывающая тестовое множество. 334 Нейронные сети. MATLAB 6
Въ&одные аргументы: net - структура объекта network object после адаптации; TR - характеристики процедуры обучения: TR.epoch - вектор, определяющий циклы обучения; TR.perf - значения функции качества по циклам обучения; Ас ~ массив выходов слоя для последнего цикла; Е1 - массив ошибок слоя для последнего цикла. Входные и выходные массивы характеризуются следующими размерами: Pd - массив ячеек размера IDxNixTS, каждый элемент которого Pd {i, j, ts} - числовой массив размера ZijxQ; TI - массив ячеек размера NlxTS, каждый элемент которого Tl {i, ts) - числовой массив размера VixQ, возможно пустой []; Ai - массив ячеек размера NlxLD, каждый элемент которого Ai {i, k} - числовой массив размера SixQ; Ас ~ массив ячеек размера Nlx(LD+TS), каждый элемент которого Ac {i, k} - числовой массив размера SixQ; El - массив ячеек размера NlxTS, каждый элемент которого El{i, k} - числовой массив размера VixQ, возможно пустой []. Параметры описания массивов ячеек и их связь с параметрами сети представлены в следующей таблице. Параметр описания Ni N1 Nt ID LD Ri Si Vi TS Q Zij Параметр сети net.numlnputs netnumLayers net.numTargets net.numlnputDelays net.num LayerDelays net.inputs{i}.size net.layers{i}.size net.targets{i}.size Назначение Количество векторов входа Количество слоев Количество целевых выходов Максимальное значение задержки на входе Максимальные значения задержек для слоев Количество элементов i-ro вектора входа Количество нейронов i-ro слоя Количество элементов i-ro вектора цели Число шагов по времени Количество реализаций для фиксированного момента времени Произведение длины вектора входа слоя i на максимальное значение задержки от слоя i к слою у. Ri * length(nct.inputWeights{i, j}.delays) Функция trainc не выполняет проверки обучающей последовательности на представительность, поэтому входные аргументы VV и TV не используются. Процедура обучения прекращается при достижении следующих значений параметров функции trainc: / /. Формирование моделей нейронных сетей 335
Параметр Назначение net.train Param.epochs Максимальное число циклов обучения, по умолчанию 100 net.train Param. goal Предельное 3i 1ача ше показателя качества обучения, по умолчанию 0 ~~ net.train Para m .show Hi ггервал вывода ;iai шых, по умолчанию 25 циклов, отмена вывода- NaN net. train Param.time Максимальное время обучения в секундах, по умолчанию Inf Функция info = trainc(code) возвращает информацию о параметрах обучения, соответствующую следующим значениям аргумента code: 'pnames' - имена параметров процедуры обучения с циклическим представлением входа; 'pdefaults' - значения параметров процедуры обучения с циклическим представлением входа, принимаемые по умолчанию. Применение функции: Чтобы сформировать нейронную сеть, используя функцию обучения trainc, следует: • установить свойство net.trainFcn равным 'trainc'. Это автоматически установит свойство nettrainParam равным значению по умолчанию; • установить значения свойств netinputWeights {i, j} .leamFcn, net.layerWeights {i, j} .learnFcn, net.biases{i} .leamFcn соответствующими выбранным функциям настройки. Для того чтобы фактически выполнить обучение сети, необходимо: • установить желаемые значения параметров настройки весов и смещений; • установить желаемые значения свойств nettrainParam; • вызвать функцию train. Алгоритм: Элементы матриц весов и векторов смещения изменяются в соответствии с заданной функцией настройки на каждом цикле обучения. Обучение прекращается, когда выполняется одно из следующих условий: • достигнуто максимальное число циклов обучения; • значение функции качества стало меньше предельного; • превышено максимальное время, отпущенное на обучение. Пример: Сформировать нейронную сеть на основе персептрона с одним выходом и вектором входа из двух элементов, принимающих значения в диапазоне [-2 2]. Формирование сети: net = newp([-2 2; -2 2],1); Формирование векторов входа и цели: Р = I 2 1-2 -1; 2-2 2 l]j Т = [ 0 1 0 1]; 336 Нейронные сети. MATLAB 6
Обучение с циклическим представлением входа: net.trainFcn=■trainc *; [net,TR]=train(net,P,T); % Рис.11.43 На рис. 11.43 представлена зависимость показателя качества обучения от количества циклов обучения. Нетрудно убедиться, что абсолютная точность достигается на третьем цикле обучения. Точность - С, предельная - О 1 0.8 О.Б 0.4 02 - °0 1 •':.-,■ 2- ,3 ' Shg Training l РИС. 11.43 Выполним моделирование сети при заданном входе: Y = sim(net, P) Y = 0 1 0 1 Полученный результат полностью совпадает с заданием. Найдем значения весов и смещения: net.XW(l,l}, net.b{l} ans = -2 -3 ans = 1 Сопутствующи е функции: N EW P, N EW LI N, TRA1N. TRAINR I Обучение нейронной сети в режиме случайного i—————J представления входа Синтаксис: [net.TR.Ac.EI] = ttainr(netlPd,TI,Ai,Q.TS,W1TV) info = trainr(code) Описание: Функция trainr не вызывается непосредственно. К ней обращается метод train, когда свойство net.trainFcn соответствует значению 'trainr'. Функция trainr настраивает веса и смещения при каждом предъявлении сети случайной входной последовательности. Функция [net, TR, Ac, El] = trainr(nel Pd, Tl, Ai, Q, TS, VV, TV) имеет следующие входные и выходные аргументы. //. Формирование моделей нейронных сетей 337
Входные аргументы: net - исходная нейронная сеть; .; Pd - вектор максимальных задержек по слоям; TI - вектор целей для слоя; Ai - начальные условия на линиях задержки; Q - количество реализаций для фиксированного момента времени; TS - число шагов по времени; VV - структура, описывающая контрольное множество; TV - структура, описывающая тестовое множество. Выходные аргументы: net - структура объекта network object после адаптации; TR - характеристики процедуры обучения: TR.epoch - вектор, определяющий циклы обучения; TR.perf-значения функции качества по циклам обучения; Ас - массив выходов слоя для последнего цикла; Е1 - массив ошибок слоя для последнего цикла. Входные и выходные массивы характеризуются следующими размерами: Pd - массив ячеек размера IDxNixTS, каждый элемент которого Pd{ i, j, ts} - числовой массив размера ZijxQ; TI - массив ячеек размера NlxTS, каждый элемент которого TI {i, ts} - числовой массив размера VixQ, возможно пустой []; Ai - массив ячеек размера NIxLD, каждый элемент которого Ai{i, k} - числовой массив размера SixQ; Ас - массив ячеек размера Nlx(LD+TS), каждый элемент которого Ac {i, к} - числовой массив размера SixQ; El - массив ячеек размера NlxTS, каждый элемент которого EI{i, k) - числовой массив размера VixQ, возможно пустой []. Входные и выходные массивы характеризуются следующими размерами: Pd - массив ячеек размера IDxNixTS, каждый элемент которого Pd{ i, j, ts} - числовой массив размера ZijxQ; TI - массив ячеек размера NlxTS, каждый элемент которого Tl{i, ts} - числовой массив размера VixQ, возможно пустой []; Ai - массив ячеек размера NlxLD, каждый элемент которого Ai {i, k} - числовой мае-, сив размера SixQ; Ас - массив ячеек размера Nlx(LD+TS), каждый элемент которого Ac{i, k} - числовой массив размера SixQ; El - массив ячеек размера NlxTS, каждый элемент которого El{i, k} - числовой массив размера VixQ, возможно пустой []. Параметры описания массивов ячеек и их связь с параметрами сети представлены в следующей таблице. 338 Нейронные сети. MATLAB б
Параметр описания Параметр сети Назначение Ni "nT net.numlnputs netnumLayers Количество векторов входа Nt net.numTargets Количество слоев Количество целевых выходов ID net.numlnputDelays Максимальное значение задержки на входе LD netnumLayerDelays Ri net.inputs{i}.size Максимальные значения задержек для слоев Количество элементов /-го вектора входа Si net.!ayers{i}.si2e Количество нейронов /-го слоя VI net.targets{i}.size Количество элементов /-го вектора цели TS Число шагов по времени Количество реализаций для фиксированного момента времени Zij Произведение длины вектора входа слоя i на максимальное значение задержки от слоя / к слою/. Ri * length(net.inputWeights{i, j}.delays) Функция trainr не выполняет проверки обучающей последов атсльности на представ^" тельность, поэтому входные аргументы VV и TV не используются. Процедура обучения прекращается при достижении следующих значений п араметров функции trainr: Параметр Назначение nettrainParam.epochs Максимальное число циклов обучения, по умолчанию 100 net.train Param .goal Предельное значение показателя качества обучения, по умолчанию 0 n ettrain Param ,sh ow Интервал вывода данных, по умолчанию 25 циклов, отмена вывода- NaN Максимальное время обучения в секундах, по умолчанию Inf ^j net.trainParam.time Функция info = trainr(code) возвращает информацию о параметрах обучения, соответствующую следующим значениям аргумента code: 'pnames' - имена параметров процедуры обучения в режиме случайного представЛ б" ния входа; 'pdefaults* - значения параметров процедуры обучения в режиме случайного представления входа, принимаемые по умолчанию. Применение функции: Чтобы сформировать нейронную сеть, используя функцию обучения trainr, следует: ■ установить свойство nettrainFcn равным 'trainr'. Это автоматически установит свойство net.trainParam равным значению по умолчанию; • установить значения свойств net.input\Veights{i, j} .IearnFcn, nct.layerWeights{i, j} .leamFcn, net.biases{i} .leamFcn соответствующими выбранным функциям настройки. 11. Формирование моделей нейронных сетей 339
Для того чтобы фактически выполнить обучение сети, необходимо: • установить желаемые значения параметров настройки весов и смещений; • установить желаемые значения свойств net.trainParam; • вызвать функцию train. Алгоритм: Элементы матриц весов и векторов смещения изменяются в соответствии с заданной функцией настройки на каждом цикле обучения. Обучение прекращается, когда выполняется одно из следующих условий: • достигнуто максимальное число циклов обучения; • значение функции качества стало меньше предельного; • превышено максимальное время, отпущенное на обучение. Пример: Сформировать самоорганизующуюся нейронную сеть для разделения векторов входа на 2 класса. Векторы входа состоят из двух элементов со значениями из диапазона [01]. Сеть имеет 2 выхода (по числу классов) и обучается с помощью функции trainr. Формирование сети: net = newc([0 1; 0 1], 2); Формирование векторов входа: Р = [.1 -8 .1 .9; .2 .9 .1 .8]; Обучение с циклическим представлением входа: net.trainFcn =■trainr■; net = train(net,P,T); Выполним моделирование сети и значения выхода преобразуем в индексы классов: Y = sim(net,F}; Ус = vec2ind(Y) Yc = 1 2 1 2 Нейронная сеть справилась с классификацией входных векторов на 2 класса, отнеся первый и третий векторы к классу 1, а второй и четвертый - к классу 2. Сопутствующие функции: N EW Р, N EW LIN, TR AIN. Функции обучения. Ниже приведены функции nnilNNT, совместимые как с 11, так и с 12 выпусками ПО MW и предназначенные для реализации конкретных алгоритмов обучения и настройки параметров сети. Все эти функции имеют одинаковый формат вызова [net,TR,Ac,EI] = <имя_функции>(МЕТ,Ра\Т11А|,С],Т8,УУ1"ГЛ/) Они имеют следующие входные и выходные аргументы. Входные аргументы: net - исходная нейронная сеть; Pd — вектор максимальных задержек по слоям; 340 Нейронные сети. MATLAB б
Tl - вектор целей для слоя; Ai - начальные условия на линиях задержки; Q - количество реализаций для фиксированного момента времени; TS - число шагов по времени; VV - структура, описывающая контрольное множество; TV - структура, описывающая тестовое множество. Выходные аргументы: net - структура объекта network object после адаптации; TR - массив записей, содержащий характеристики процедуры обучения: TR.epoch - вектор, определяющий циклы обучения; TR.perf- значения функции качества по циклам обучения; TR.vpcrf - значения контрольной функции по циклам обучения; TR.tperf- значения тестовой функции по циклам обучения; Ас - массив выходов слоя для последнего цикла; Е1 - массив ошибок слоя для последнего цикла. Входные и выходные массивы характеризуются следующими размерами: Pd - массив ячеек размера IDxNixTS, каждый элемент которого Pd{ i, j, ts} - числовой массив размера ZijxQ; TI - массив ячеек размера NlxTS, каждый элемент которого Tl{i, ts} - числовой массив размера VixQ, возможно пустой []; Ai - массив ячеек размера NlxLD, каждый элемент которого Ai {i, k} - числовой массив размера SixQ; Ас - массив ячеек размера Nlx(LD+TS), каждый элемент которого Ac {i, k} - числовой массив размера SixQ; EI - массив ячеек размера NlxTS, каждый элемент которого El {i, к} - числовой массив размера VixQ, возможно пустой []. Входные и выходные массивы характеризуются следующими размерами: Pd- массив ячеек размера IDxNixTS, каждый элемент которого Pd{ i, j, ts} -числовой массив размера ZijxQ; Tl - массив ячеек размера NlxTS, каждый элемент которого Tl {i, ts} - числовой массив размера VixQ, возможно пустой []; Ai—массив ячеек размера NlxLD, каждый элемент которого Ai {i, k} - числовой массив размера SixQ; Ас - массив ячеек размера Nlx(LD-KTS), каждый элемент которого Ac {i, k} - числовой массив размера SixQ; El - массив ячеек размера NlxTS, каждый элемент которого El{i, k} - числовой массив размера VixQ, возможно пустой []. Параметры описания массивов ячеек и их связь с параметрами сети представлены в следующей таблице. 11. Формирование моделей нейронных сетей 341
Параметр описания Ni N1 Nt ID LD Ri Si Vt TS Q Zij Параметр сети net. num Inputs net.numLayers net.numTargets net.numlnputDelays net.numLayerDelays net.inputs{i}.size net.layers{i}.size net.targets{i}.size Назначение 1 Количество векторов входа ~~~~ Количество слоев Количество целевых выходов Максимальное значение задержки на входе Максимальные значения задержек для слоев Количество элементов /-го вектора входа Количество нейронов i-го слоя Количество элементов i-го вектора цели Число шагов по времени Количество реализаций для фиксированного момента времени Произведение длины вектора входа слоя i* на максимальное значение задержки от слоя i к слою,/: Ri * length(net.inputWeights{i, j}.delays) J —"' -'.V * ' Если входные аргументы VV или TV не пустые ([ ]), то они должны быть массивами, структур: VV.PD, TV.PD - контрольное и тестовое подмножества векторов входов после линии задержки, по умолчанию нулевые; VV.T1, TV.T1 - контрольное и тестовое подмножества векторов целей слоя; VV.Ai, TV.Ai - контрольное и тестовое подмножества начальных условий на входе;' VV.Q, TV.Q - число выборок контрольного и тестового подмножеств; VV.TS, TV.TS - длина выборок контрольного и тестового подмножеств. Контрольные и тестовые подмножества используются для предотвращения явления переобучения. Функции обучения могут включать следующие параметры: Параметр n et.trainParam .epochs net.trainParam.goat net.trainParam.show nettrainParam.min_grad net.trainParam.time net.trainParam.max_fail netlrainParam.searchFcn Назначение Максимальное количество циклов (эпох) обучения, по умолчанию 100 Предельное значение критерия обучения, по умолчанию 0 Интервал вывода данных, по умолчанию 25 циклов, отмена вывода - NaN Минимальное значение градиента критерия качества, по умолчанию 1е-б Максимальное время обучения в секундах, по умолчанию Inf Максимально допустимый уровень превышения ошибки контрольного подмножества по сравнению с обучающим, по умолчанию 5 Имя функции поиска одномерного экстремума, по умолчанию 'srchbac' 342 Нейронные сети. MATLAB б
Функции поиска одномерного экстремума также включают достаточно большое количество настраиваемых параметров, приведенных в следующей таблице: Параметр net.trainParam.scalJol n et.train Param .alph a net.trainParam.beta nettrain Param.delta n et.train Param .gama net.train Param. low Jim net. train Param.up Jim net.train Param.maxstep net.trainParam.minstep n et.train Param.bmax net.train Param.mu nettrain Param .m u_dec net.trainParam.muJnc net.trainParam.mu_max nettrainParam.merrureduc net.train Param.Ir nettrainParam.lrjnc n et.train Param .lr_dec neUrainParam.deltaO net.trainParam.deltJnc net.train Param.delt_dec net.train Param.deltamax Назначение Параметр, связывающий погрешность tol с шагом delta по формуле tol = delta/scale_tol, no умолчанию 20 Коэффициент, определяющий порог уменьшения критерия качества, по умолчанию 0.001 Коэффициент, определяющий выбор шага, по умолчанию 0.1 Начальное значение шага, по умолчанию 0.01 Параметр, регулирующий изменение критерия качества, по умолчанию 0.1 Нижняя граница изменения шага, по умолчанию 0.1 Верхняя граница изменения шага, по умолчанию 0.5 Максимальное значение шага, по умолчанию 100 Минимальное значение шага, по умолчанию 1.0е-6 Максимальный размер шага, по умолчанию 26 Начальное значение Коэффициент уменьшения параметра mu, по умолчанию 0.1 Коэффициент увеличения параметра mu, по умолчанию 10 Максимальное значение параметра mu, по умолчанию 1е—10 Параметр разбиения матрицы Якоби на подматрицы, по умолчанию 1 Параметр, по умолчанию 0.01 Коэффициент увеличения скорости настройки, по умолчанию 1.05 Коэффициент уменьшения скорости настройки, по умолчанию 0.7 Начальное значение шага настройки в методе Rprop, по умолчанию 0.07 Коэффициент увеличения шага настройки в методе Rprop, по умолчанию 1.2 Коэффициент уменьшения шага настройки в методе Rprop, по умолчанию 0.5 Максимальное значение шага настройки в методе Rprop, по умолчанию 50 При описании каждой функции одномерного поиска приводится перечень используемых параметров. Кроме того, все функции возвращают информацию о параметрах обучающей функции, если используется следующий формат вызова: info = <имя_функции>(соо!е). В зависимости от значения аргумента code возвращается следующая информация: 'pnames' - имена параметров процедуры обучения; 'pdefaults' -значения параметров процедуры обучения, принимаемые по умолчанию. //. Формирование моделей нейронных сетей 343
В качестве примера, иллюстрирующего возможности обучения, рассмотрен общий пример, что позволяет сравнивать описываемые алгоритмы обучения по скорости и точности. Градиентные алгоритмы обучения TRAINGD Алгоритм градиентного спуска GD Синтаксис: [net.TR.Ac, El] = tralngd(NET,Pd,Tl1Ai1Q1TS1VV) info = traingd(code) Описание: Функция traingd обучает нейронную сеть, используя алгоритм градиентного спуска GD. Функция при своей работе использует следующие параметры: info = traingdCpdefaults1)' info = epochs: show: goal: time: 100 25 0 Inf min_grad: max_fail: searchFcn: lr: 1.0e-006 5 'srehbac' 0.01 Применение функции: Функция обучения traingd используется при создании сетей с помощью методов newff, newcf, ncwclm, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к обучению, необходимо: • установить свойство сети nettrainFcn равным 'traingd'. Это автоматически установит значения параметров обучения, соответствующие значениям свойства net.trainParam по умолчанию. Для того чтобы фактически обучить есть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения; • применить функцию train. Алгоритм: Функция traingd выполняет процедуру обучения, если функции взвешивания, накопления и активации имеют производные. Для вычисления производных критерия качества обучения (perf) по переменным веса и смещения используется метод обратного распространения ошибки. В соответствии с методом градиентного спуска вектор настраиваемых переменных получает следующие приращения: dX = lr * dperf/dX. Процедура обучения прекращается, когда выполнено одно из следующих условий: • значение функции качества стало меньше предельного; 344 Нейронные сети. MATLAB б
• градиент критерия качества стал меньше значения min_grad; • достигнуто предельное число циклов обучения; • превышено максимальное время, отпущенное на обучение; • ошибка контрольного подмножества превысила ошибку обучающего более чем в max_fail раз. Пример: Заданы следующие обучающие последовательности входов Р и целей Т: Р = [0 1 2 3 4 5]; Т = [000111]; Поскольку соответствие между входом и целью носит явно выраженный нелинейный характер, то будем использовать нейронную сеть с нелинейными сигмоидальными функциями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig, а во втором -1 нейрон с функцией активации logsig. Для обучения сети применим функцию Iraingd. Формирование сети: net = newff([0 5],[2 1],{'tansig1,"logsig"},•traingd'); Обучение сети: net.trainParam.epochs = 500; net.trainParam.goal = 0.01; [net,TR] = train(net,P,T); % Рис.11.44 На рис. 11.44 показано, как изменяется точность в процессе обучения; требуемое значение обеспечивается на 332-м цикле обучения. 0' Точность • 0.00999, предельная - D.01 ю b--.....w.:.---1...„„4--.-.-.j„„;„.l. ,o;il i i i i i i 1 0 50 100 ISO 200 250 300 aw>№e I зэгцтсаа Рис. 11.44 Выполним'моделирование сети: Y = sim(net,P} У = 0.0669 0.0962 0.1284 0.8350 0.9640 0.9657 / /. Формирование моделей нейронных сетей 345
Требуемое соответствие между входом и выходом нейронной сети обеспечивается с заданной среднеквадратичной погрешностью. Сопутствующие функции: NEWFF, NEWCF, TRAINGDM. TRAINGDA, TRAINGDX, TRAINLM. ш; ■А TRAINGDA Обучение нейронной сети методом GDA Синтаксис: [net,TR,Ac,B] = traingda(NET,Pd)TI,Ai,Q,TS,VV) info = traingda(code) Описание: Функция traingda обучает нейронную сеть, используя алгоритм градиентного спуска с выбором параметра скорости настройки GDA. Функция при своей работе использует следующие параметры: info = traingdaCpdefaults')' info = epochs: show: goal: time: min_grad: max_fail: 100 25 0 Inf 1.0e-006 5 lr: lr_inc: lr_dec: max_perf_inc: 0.01 1.05 0.7 1.04 Применение функции: Функция обучения traingda используется при создании сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к обучению, необходимо: • установить свойство сети nettrainFcn равным 'traingda'. Это автоматически установит значения параметров обучения, соответствующие значениям свойства net.trainParam по умолчанию. Для того чтобы фактически обучить сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения; • применить функцию train. Алгоритм: Функция traingda выполняет процедуру обучения, если функции взвешивания, накопления и активации имеют производные. Для вычисления производных критерия качества обучения по переменным веса и смещения используется метод обратного распространения ошибки. В соответствии с методом градиентного спуска вектор настраиваемых переменных получает следующие приращения: dX = lr*dperf/dX. 346 Нейронные сети. MATLAB б
Однако в данном случае, в отличие от алгоритма градиентного спуска, параметр скорости настройки выполняет адаптивную функцию. Он увеличивается в Irjnc раз, если критерий качества обучения сети уменьшается, и это реализуется на каждом цикле обучения. С другой стороны, если критерий качества увеличился более чем в max_perf_inc раз, то начинается коррекция параметра скорости настройки в сторону уменьшения с коэффициентом lr_dec. Процедура обучения прекращается, когда выполнено одно из следующих условий: • значение функции качества стало меньше предельного; • градиент критерия качества стал меньше значения min_grad; • достигнуто предельное число циклов обучения; • превышено максимальное время, отпущенное на обучение; • ошибка контрольного подмножества превысила ошибку обучающего более чем в max_fail раз. Пример: Заданы следующие обучающие последовательности входов Р и целей Т: Р в [012345]; Т = [000111]; Поскольку соответствие между входом и целью носит явно выраженный нелинейный характер, то будем использовать нейронную есть с нелинейными сигмоидальными функциями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig, а во втором ~ 1 нейрон с функцией активации Iogsig. Для обучения сети применим функцию traingda. Формирование сети: net - newf£{[0 5],[2 1],{•tansig','Iogsig'},•traingda'); Обучение сети: net.trainParam.epochs ~ 500; net.trainParam- goal = 0.01; [net,TR] = train(net,P,T); Ч Рис.11.45 TR = epoch: [1x94 double] perf: [1x94 double] vperf: [1x94 double] tperf: [1x94 double] lr: [1x94 double] 11. Формирование моделей нейронных сетей 347
inD Iff1 in'' ,n-' :::::?: ZZ - -Jl Точность :::;?:: 000375 :::;.:: предельная ::;;:: "•:-'- 0.01 Z Z Z£ Z - - ::.:::::?:: ....... ;-- : : ::::::■:. zlzi' :;::;: ----:- :-:■: — j. ^ : • ::::;:: : : :::з::: *i- ^S -i— llliil ■-*— ::c: \'r~ ■ : ::c: : i .:::■:::: iiz-zzziz} :^:::r:^:: ": J>- Svi; :>:::::;:: --;* ■*-■ » » fc • . ■ • • ..■ • ■ ■ ! ' ; ' ; ! i i : ; ; ; ; ! ; : ' _ i . 0 10 SioeTioiriig I 40 50 EO Циклов • 93 70 60 Рис. 11.45 На рис. 11.45 показано, как изменяется точность в процессе обучения; требуемое значение обеспечивается на 93-м цикле обучения; при этом параметр скорости настройки постоянно растет и достигает значения приблизительно 0.93 (рис. 11.46). Параметр скорости настройки щ .^0.4 .?--■.?■. . "*:v" i:o2 i_-« 1. . -«•- ^ .. 2] 40. 60; eo--: rat. Рис. 11.46 Выполним моделирование сети: Y = sim(net,p) Y = 0.0376 0.1069 0.1922 0.9121 0.9774 0.9783 Требуемое соответствие между входом и выходом нейронной сети обеспечивается с заданной среднеквадратичной погрешностью. Сопутствующие фунщии: NEWFF. NEWCF. TRA1NGD. TRA1NGDM. TRAINGDX, TRAINLM. TRAINGDM Алгоритм градиентного спуска с возмущением GDM Синтаксис: [net.TR.Ac.EI] = traingdmfNET.Pd.Tl.Ai.Q.TS.W) info = traingdm(code) 348 Нейронные сети. MATLAB 6
Описание: Функция traingdm обучает нейронную сеть, используя алгоритм градиентного спуска с возмущением GDM. Функция при своей работе использует следующие параметры: info = traingdmOpdefaults')' info = epochs: show: goal: time: min_grad: max_fail: 100 25 0 Inf 1.0e-006 5 lr: max_perf_inc: mc : 0.01 1.04 0.9 Применение функции: Функция обучения traingdm используется при создании сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к обучению, необходимо: • установить свойство сети net.trainFcn равным 'traingdm'. Это автоматически установит значения параметров обучения, соответствующие значениям свойства net.trainParam по умолчанию. Для того чтобы фактически обучить сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения; • применить функцию train. Алгоритм: Функция traingdm выполняет процедуру обучения, если функции взвешивания, накопления и активации имеют производные. Для вычисления производных критерия качества обучения по переменным веса и смещения используется метод обратного распространения ошибки. В соответствии с методом градиентного спуска с возмущением вектор настраиваемых переменных получает следующие приращения: dX = mc*dXprev + lr*mc*dperf/dX, где dXprev - вектор возмущения весов и смещений с коэффициентом тс. Процедура обучения прекращается, когда выполнено одно из следующих условий: • значение функции качества стало меньше предельного; • градиент критерия качества стал меньше значения min_grad; • достигнуто предельное число циклов обучения; • превышено максимальное время, отпущенное на обучение; • ошибка контрольного подмножества превысила ошибку обучающего более чем в max_fail раз. / /. Формирование моделей нейронных сетей 349
Пример: Заданы следующие обучающие последовательности входов Р и целей Т: Р- [0 1234 5]; Т = [000111]; Поскольку соответствие между входом и целью носит явно выраженный нелинейный характер, то будем использовать нейронную сеть с нелинейными сигмоидальными функциями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig, а во втором -1 нейрон с функцией активации logsig. Для обучения сети применим функцию traingdm и увеличим параметр скорости настройки до 0.1. Формирование сети: net = newff([0 5],[2 1],{"tansig1,'logsig1}#"traingdm1); Обучение сети: net.trainParam.epochs = 500; net.trainParam.goal = 0.01; net.trainParam.lr - 0.1; [net,TR] = train{net,P,T); % Рис.11.47 Рис. 11.47 На рис. 11.47 показано, как изменяется точность в процессе обучения; требуемое значение обеспечивается на 120-м цикле обучения. Выполним моделирование сети: Y = sim(net,P) Y = 0.0787 0.0393 0.1006 0.8696 0.8883 0.8884 Требуемое соответствие между входом и выходом нейронной сети обеспечивается с заданной среднеквадратичной погрешностью. Сопутствующие функции: NEWFF, NEWCF, TRAINGD, TRAINGDA. TRAINGDX. TRAINLM. 350 Нейронные сети. MATLAB б
TRAINGDX | Обучение нейронной сети методом GDX Синтаксис: [netfTR,Ac,EI] = traingdx(NET,Pd,TllAi,Q,TS,VV) info = traingdx{code) Описание: Функция traingdx обучает нейронную сеть, используя алгоритм градиентного спуска с возмущением и адаптацией параметра скорости настройки GDX. Функция при своей работе использует следующие параметры: info - traingdxfpdefaults')' info = epochs: show: goal: time: min_grad: max_fail: 100 25 0 Inf l.Oe-006 5 lr: lr_inc: lr_dec: max_perf_inc: гас: 0.01 1.05 0.7 1.04 0.9 Применение функции: Функция обучения traingdx используется при создании сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к обучению, необходимо: • установить свойство сети neLtrainFcn равным 'traingdx'. Это автоматически установит значения параметров обучения, соответствующие значениям свойства net.trainParam по умолчанию. Для того чтобы фактически обучить сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения; • применить функцию train. Алгоритм: Функция traingdx выполняет процедуру обучения, если функции взвешивания, накопления и активации имеют производные. Для вычисления производных критерия качества обучения по переменным веса и смещения используется метод обратного распространения ошибки. В соответствии с методом градиентного спуска с возмущением вектор настраиваемых переменных получает следующие приращения: dX = mc*dXprev + lr*mc*dperf/dX, где dXprev - вектор возмущения весов и смещений с коэффициентом тс. Однако в данном случае, в отличие от алгоритма traingdm, параметр скорости настройки выполняет адаптивную функцию. Он увеличивается в lrjnc раз, если критерий качества обучения сети уменьшается, и это реализуется на каждом цикле обучения. / /. Формирование моделей нейронных сетей 351
ш С другой стороны, если критерий качества увеличился более чем в max_perf_inc раз,^ то начинается коррекция параметра скорости настройки в сторону уменьшения с коэффиг циентом lr_dec. ',: Обучение прекращается, когда выполнено одно из следующих условий: • значение функции качества стало меньше предельного; • градиент критерия качества стал меньше значения min_grad; , *: • достигнуто предельное число циклов обучения; • превышено максимальное время, отпущенное на обучение; • ошибка контрольного подмножества превысила ошибку обучающего более чем в max_fail раз. Пример: Заданы следующие обучающие последовательности входов Р и целей Т: Р= [012 3 4 5]; Т а '[О 0 0 1 1 1]; Поскольку соответствие между входом и целью носит явно выраженный нелинейный характер, то будем использовать нейронную сеть с нелинейными сигмоидальными функ-;' циями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig, а во втором -1 нейрон с функцией активации logsig. Для обучения сети применим функцию traingdx. Формирование сети: net s newf f ([0 5] , [2 1] , { ' tansig', 'logsig! }', ' traingdx') ; Обучение сети: net.trainParam.epochs = 500; net.trainParam.goal = 0.01; [net,TR] = train (net, P,T); % Рис.11.48 ' TR = epoch: [1x106 double] perf: [1x106 double] vperf: [1x106 doublel tperf: [1x106 double] lr: [1x106 double] ~:'" '-'J ,- 352 Нейронные сети. MATLAB 6V ;r'r 1
ттШШШШШШШШШШ Рис. 11.48 На рис. 11.48 показано, как изменяется точность в процессе обучения; требуемое значение обеспечивается на 105-м цикле обучения; при этом параметр скорости настройки постоянно растет и достигает значения приблизительно 1.7 (рис. 11.49). Рис. 11.49 Выполним моделирование сети: Y ~ sim(net,P) Y = 0.0787 0.0393 0.1006 0.8696 0.8883 0.8884 Требуемое соответствие между входом и выходом нейронной сети обеспечивается с заданной среднеквадратичной погрешностью. Сопутствующие функции: NEWFF, NEWCF, TRAINGD, TRAINGDM, TRAINGDA, TRAINLM. TRAINRP | Алгоритм обучения Rprop Синтаксис: [net,TR,Ac,EI]=trai^(NETt,PdtTI,AiATS,VV) info = trainrp(code) !;■#> 11. Формирование моделей нейронных сетей 353
Описание: Функция trainrp обучает нейронную сеть, используя пороговый алгоритм обратного^!! распространения ошибки. Функция при своей работе использует следующие параметры: info = train rpCpdefaults')' уЦ info = epochs: show: goal: time: min_grad: max_fail: 100 .25 0 Inf 1.0e-006 5 delt inc: delt_dec: deltaO: deltamax: 1.2 0.5 0.07 . 50 Применение функции: - Функция обучения trainrp используется при создании сетей с помощью методов newffj newcf,. newelm, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к обучению, необходимо: _ •.;: • установить свойство сети neLtrainFcn равным 'trainrp'. Это автоматически установите значения параметров обучения, соответствующие значениям свойства net-trainParam"'; по умолчанию. Для того чтобы фактически обучить сеть, необходимо: ':-' • инициализировать нейронную сеть; ■ присвоить, если это необходимо, требуемые значения параметрам обучения; ■; • применить функцию train. Л Алгоритм: Функция trainrp выполняет процедуру обучения, если функции взвешивания, накопления и активации имеют производные. Для вычисления производных критерия качества, обучения по переменным веса и смещения используется метод обратного распространен ния ошибки. В соответствии с пороговым алгоритмом обратного распространения вектор., настраиваемых переменных получает следующие приращения: dX я deltaX.*sign(gX), где вектору deltaX присваиваются начальные значения deltaO, а вектор gX- градиент критерия, качества. На каждой итерации элементы deltaX изменяются. Если некоторый элемент вектора: gX изменяет знак при переходе к следующей итерации, то соответствующий элемент вектораг; deltaX умножается на коэффициент deltajdec. Если элемент вектора gX сохраняет знак, то соой, ветствующий элемент вектора deltaX умножается на коэффициент delta_inc [36]. Процедура обучения прекращается, когда выполнено одно из следующих условий:, • значение функции качества стало меньше предельного; v ■ • градиент критерия качества стал меньше значения min_grad; • достигнуто предельное число циклов обучения; • превышено максимальное время, отпущенное на обучение; •/}_ 1 с зад Сопу 354 Нейронные сети. МАТЬАВЩ 77. й
• ошибка контрольного подмножества превысила ошибку обучающего более чем в max_fail раз. Пример: Заданы следующие обучающие последовательности входов Р и целей Т: Р = [012345]; Т = [0 0 0 1 1 1]; Поскольку соответствие между входом и целью носит явно выраженный нелинейный характер, то будем использовать нейронную сеть с нелинейными сигмоидальными функциями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig, а во втором-1 нейрон с функцией активации logsig. Для обучения сети применим функцию trainrp. Формирование сети: net = new£f([0 5], [2 1],{'tansig','logsig'},'trainrp'); Обучение сети: net.trainParamTepochs = 50; net.trainParam.show ~ 10; net.trainParam.goal = 0.01; [net,TR] = train(net,P,T); % Рис.11.50 На рис. 11.50 показано, как изменяется точность в процессе обучения; требуемое значение обеспечивается на 10-м цикле обучения. Выполним моделирование сети: Y = sim(net,P) Y= 0.0696 0.0704 0.1339 0.8934 0.9390 0.9399 Требуемое соответствие между входом и выходом нейронной сети обеспечивается с заданной среднеквадратичной погрешностью. Сопутствующие функции: NEWFF, NEWCF, TRAINGDM, TRAINGDA, TRAINGDX, TRAINLM, TRAJNCGP, TRAINCGF, TRAJNCGB, TRAINSCG, TRAINOSS, TRAINBFG. 77. Формирование моделей нейронных сетей 355
Алгоритмы метода сопряженных градиентов TRAINCGF Алгоритм Флетчера - Ривса CGF>^j| Синтаксис: *' ^ [net.TR.Ac.El] = traincgf (NET.Pd.TI.Ai.Q.TS.W) ^| info s traincgf(code) ; ^ Описание: --| Функция traihcgf обучает нейронную сеть, используя метод сопряженного градиента^ с обратным распространением ошибки в модификации Флетчера - Ривса. ^£ j Функция при своей работе использует следующие параметры: ['л% info = traincgfpdefaults1)' info = epochs: show: goal: time: min_grad: max fail: searchFcn: 100 25 0 Inf 1.0e-006 5 1srchbac' scale_tol: alpha: beta: delta: garaa: low_ lim-: up_lim: 20 0.001 0.1 0.01 0-1 0.1 0.5 maxstep: minstep: bmax: ■100 1.0 e-0'06 26 Применение функции: Функция обучения traincgf используется при создании сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к обучению, необходимо: • установить свойство сети neLtrainFcn равным 'traincgf. Это автоматически установит значения параметров обучения, соответствующие значениям свойства net.tramParam по умолчанию. Для того чтобы фактически обучить сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения; • применить функцию train. Алгоритм: Функция traincgf выполняет процедуру обучения, если функции взвешивания, накопления и активации имеют производные. Для вычисления производных критерия качества, обучения по переменным веса и смещения используется метод обратного распростране-' ния ошибки. В соответствии с алгоритмом метода сопряженных градиентов вектор на-„ страиваемых переменных получает следующие приращения: X = X + a*dX, П х; Ц в с 356 Нейронные сети. MATLAB 6
где dX - направление поиска. Параметр а выбирается так, чтобы минимизировать критерий качества обучения в направлении поиска. Функция одномерного поиска searchFcn используется для вычисления минимума. Начальное направление поиска задается вектором, противоположным градиенту критерия качества. При успешных итерациях направление поиска определяется на основе нового значения градиента с учетом прежнего направления поиска согласно формуле dX = -gX + dX_old*Z, где gX - вектор градиента; параметр Z может быть вычислен отдельными различными I способами. Для метода сопряженного градиента в модификации Флетчера - Ривса он рассчитывается согласно формуле [41] Z ~ Normnew_sqr/norm_sqr, где normnew_sqr - квадрат нормы текущего градиента; norm_sqr- квадрат нормы предыдущего градиента. Обучение прекращается, когда выполнено одно из следующих условий: • значение функции качества стало меньше предельного; • градиент критерия качества стал меньше значения min_grad; • достигнуто предельное число циклов обучения; • превышено максимальное время, отпущенное на обучение; • ошибка контрольного подмножества превысила ошибку обучающего более чем в max fail раз. Пример: Заданы следующие обучающие последовательности входов Р и целей Т: Р« [0 1234 5]; Т = [0 0 0 111]; Поскольку соответствие между входом и целью носит явно выраженный нелинейный характер, то будем использовать нейронную сеть с нелинейными сигмоидальными функциями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig, а во втором -1 нейрон с функцией активации logsig. Для обучения сети применим функцию traincgf. Формирование сети: net = newff{[0 5],[2 1],{'tansig','logsig'}>'traincgf■); Обучение сети: net.trainParam.epochs =50; net.trainParam.snow = 10; net.trainParam.goal = 0.001; [net,TR] = train(net,P,T); Ч Рис.11.51 На рис. 11.51 показано, как изменяется точность в процессе обучения; требуемое значение обеспечивается на 6-м цикле обучения. П. Формирование моделей нейронных сетей 357
Ь Т'- L? с 'r^^'M°?i?^!3-^^*^peww?J Ь$$^'*ъ$Ф$У$Щ '№ тш!жштттшшт sn»,T»rwa Выполним моделирование сети: Y = sim(net,P) Y = 0.0005 0.0005 " Рис. 11.51 0.0007 0.9862 0.9964 0.9964 33 Требуемое соответствие между входом и выходом нейронной сети обеспечивается^ с заданной среднеквадратичной погрешностью равной 0.001, т. е. с точностью на порядок большей, чем в предшествующих примерах. Сопутствующие функции: NEWFF, NEWCF, TRAINGDM, TRAINGDA, TRAINGDX, TRAINLM/ TRAINCGP, TRAINCGB, TRAINSCG, TRAINCGP, TRAINOSS, TRAINBFG- ■% TRAINCGP Алгоритм Полака - Рибейры CGP '■'. Синтаксис: .; ^ tnet,TR,Ac,EI] = traincgp(NET,PdITIIAi,Q1TS,VV) .} info == traincgp(code) Описание: Функция traincgp обучает нейронную сеть, используя метод сопряженного градиента с- i обратным распространением ошибки в модификации Полака - Рибейры CGP. Функция при своей работе использует следующие параметры: info = traincgp'pdefaults')' info = epochs: show: goal: time: min_grad: max_fail; searchFcn: 100 25 0 Inf 1.0e-006 5 1srchbac' scale_tol: alpha: beta: delta: gama: low_lim: up_lira: 20 0.001 0.1 0.01 0.1 " 0.1 0.5 maxstep: minstep: bmax: 100 1.0 e-006 26 358 Нейронные сети. MATLAB 6r
> Применение функции: '■■'■ Функция обучения traincgp используется при создании сетей с помощью методов !г newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем. .; Для того чтобы подготовить сеть к обучению, необходимо: • установить свойство сети net.trainFcn равным 'traincgp'. Это автоматически установит ■ • значения параметров обучения, соответствующие значениям свойства nettrainParam \.-.. по умолчанию. Для того чтобы фактически обучить сеть, необходимо: • инициализировать нейронную сеть; ■;• # присвоить, если это необходимо, требуемые значения параметрам обучения; • применить функцию train. к- ;*■ - Алгоритм: Функция traincgp выполняет процедуру обучения, если функции взвешивания, накоп- ■ - ления и активации имеют производные. Для вычисления производных критерия качества >' обучения по переменным веса и смещения используется метод обратного распростране- , ния ошибки. В соответствии с алгоритмом метода сопряженных градиентов вектор на- ". страиваемых переменных получает следующие приращения: X = X + a*dX, где dX - направление поиска. Параметр а выбирается так, чтобы минимизировать критерий качества обучения в направлении поиска. Функция одномерного поиска searchFcn используется для вычисления минимума. Начальное направление поиска задается вектором, противоположным градиенту критерия качества. При успешных итерациях направление поиска определяется на основе нового значения градиента с учетом прежнего направления поиска согласно формуле dX = -gX + dX_old*Z. где gX - вектор градиента; параметр Z может быть вычислен отдельными различными способами. Для метода сопряженного градиента в модификации Полака-Рибейры он рассчитывается согласно формуле [41] Z = ((gX - gX_old)'*gX)/norm_sqr, где gX_old - вектор градиента на предыдущей итерации; norai_sqr- квадрат нормы вектора градиента. Обучение прекращается, когда выполнено одно из следующих условий: • значение функции качества стало меньше предельного; • градиент критерия качества стал меньше значения min_grad; • достигнуто предельное число циклов обучения; • превышено максимальное время„отпущенное на обучение; • ошибка контрольного подмножества превысила ошибку обучающего более чем ■ в max_fail раз. / / Формирование моделей нейронных сетей 359
Пример: Заданы следующие обучающие последовательности входов Р и целей Т: Р = [0 1 2 3 4 51; Т - [000111]; ■щ: cw т 1 о( Поскольку соответствие между входом и целью носит явно выраженный нелинейный^ характер, то будем использовать нейронную сеть с нелинейными сигмоидальными функ- й! ; @т циями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала* в первом слое используем 2 нейрона с функцией активации tansig, а во втором-1 нейрон с функцией активации logsig. Для обучения сети применим функцию traincgp. Формирование сети: net =newff([0 5J,[2 1], {'tansig', 'logsig'}/ 'traincgp'); ''■ Обучение сети: net.trainParam. epochs = 50; net. trainPar am. show =10; net.trainParam.goal = 0.001; [net,TR] = train(net,P,T); % Рис.11.52 На рис. 11.52 показано, как изменяется точность в процессе обучения; требуемое значение обеспечивается на 13-м цикле обучения. .1 Пр. j nev noj Рис. 11.52 :; ,: .". Выполним моделирование сети: Y = sim(net,P) Y = 0.0000 0.0000 0.0000 0.9491 • 0.9883 0.9891 - Требуемое соответствие между входом и выходом нейронной сети обеспечивается: с заданной среднеквадратичной погрешностью, равной 0.001. Сопутствующие функции: NEWFF, NEWCF, TRAINGDM, TRAINGDA, TRAINGDX, TRAINLM, TRAINRP, TRAINCGF, TRA1NCGB, TRAINSCG, TRAINOSS. TRAINBFG. 360 Нейронные сети. MATLAB 6 . Am ле* об} HHJ стр где pni исг 77
TRAINCGB Алгоритм обучения CGB :" Синтаксис: ;" [net,TR,Ac,EI] = traincgbtNET.Pd.TI.Ai.Q.TS.VV) info = traincgb(code) , Описание: ■; Функция traincgb обучает нейронную сеть, используя метод сопряженного градиента . с обратным распространением ошибки и рестартами в модификации Пауэлла - Биеле CGB. Функция при своей работе использует следующие параметры: info = traincgb'pdefaults')' info = epochs: show: goal: time: min_grad: max_fail: searchFcn: 100 25 . 0 inf 1.0e-006 5 1srchbac' scale_tol: alpha: beta: delta: gama: low_lim: up_lim: 20 0.001 0.1 0.01 0.1 0.1 0.5 maxstep: minstep: bmax: 100 1.0 e-006 26 Применение функции: Функция обучения traincgb используется при создании сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к обучению, необходимо: • установить свойство сети nettrainFcn равным 'traincgb'. Это автоматически установит значения параметров обучения, соответствующие значениям свойства net.trainParam по умолчанию. Для того чтобы фактически обучить сеть, необходимо: • инициализировать нейронную сеть; :;^, • присвоить, если это необходимо, требуемые значения параметрам обучения; • применить функцию train. Алгоритм: Функция traincgb выполняет процедуру обучения, если функции взвешивания^ накопления и активации имеют производные. Для вычисления производных критерия качества обучения по переменным веса и смещения используется метод обратного распространения ошибки. В соответствии с алгоритмом метода сопряженных градиентов вектор настраиваемых переменных получает следующие приращения: '; 1Г X = X + a*dX, ■■';■■ где dX - направление поиска; параметр а выбирается так, чтобы минимизировать критерий качества обучения в направлении поиска. Функция одномерного поиска searchFcn используется для вычисления минимума. Начальное направление поиска задается векто- 11. Формирование моделей нейронных сетей 361
ром, противоположным градиенту критерия качества. При успешных итерациях направ ление поиска определяется на основе нового значения градиента с учетом прежнего ШШ$ правления поиска согласно формуле ,Л^ШГ dX = -gX + dX old'Z, .'"ГЗЫ где gX - вектор градиента; параметр Z может быть вычислен различными способами?;?*^ Метод сопряженного градиента в модификации Пауэлла - Биеле реализует стратегвдо?й$Н рестартов для выбора правильного направления движения к минимуму [34]. ; ЩМ Обучение прекращается, когда выполнено одно из следующих условий: л' */.4м • значение функции качества стало меньше предельного; ~^Ы& • градиент критерия качества стал меньше значения min_grad; '&YM • достигнуто предельное число циклов обучения; , -<■'** • превышено максимальное время, отпущенное на обучение; '^«k • ошибка контрольного подмножества превысила ошибку обучающего более чем^1 в max_fail раз. . '$щ Пример: Заданы следующие обучающие последовательности входов Р и целей Т: 'r.'S Р = [0 1 2 3 4 5]; Т = [0 00111]; ГМ Поскольку соответствие между входом и целью носит явно выраженный нелинейный ] характер, то будем использовать нейронную сеть с нелинейными сигаоидальными функ.-.,0 циями активации. Выберем двухслойную нейронную сеть с прямой передачей сигналам : в первом слое используем 2 нейрона с функцией активации tansig, а во вт.ором-1 нейрон; * с функцией активации logsig. Для обучения сети применим функцию traincgb. ■"'; Формирование сети: ' ■'•"• net = newff{[0 5] , [2 1],{'tansig','logsig'},'traincgb1); Обучение сети: . net.trainParam.epochs =50; net.trainParam.show =10; net.trainParam.goal = 0.001; [net,TR] = train{net,P,T); % Рис.11.53 На рис. 11.53 показано, как изменяется точность в процессе обучения; требуемое и значение обеспечивается на 5-м цикле обучения. 362 Нейронные сети. MATLAB б..
■Й1* ■i^-=>s^ г-=: -^^-- ■ - - •'-—>— -"■'■■ - ---Ч1!т1::^1У Ш1 !ПЁ^!ПИ!!!НПЩ!!!М!=!!^!=!Щ Рис. 11.53 Выполним моделирование сети: Y = siia(net,P) Y = 0.0034 0.0034 0.0038 0.9983 0.9999 0.9999 Требуемое соответствие между входом и выходом нейронной сети обеспечивается с заданной среднеквадратичной погрешностью, равной 0.001.' Сопутствующие функции: NEWFF, NEWCF, TRAINGDM, TRAINGDA, TRAINGDX, TRA1NLM. TRAINCGP, TRAINCGF, TRAINCGB, TRAINSCG, TRAINOSS, TRAINBFG. TRAINSCG Алгоритм обучения SCG Синтаксис: [net,TR,Ac,B] = trainscg(net1Pd,TI,Ai)Q)TS,VV) info - trainscg(code) Описание: Функция trainscg обучает нейронную сеть, используя комбинацию метода сопряженного градиента с квазиньютоновым подходом в модификации Моллера SCG. Функция при своей работе использует следующие параметры: info = trainscg'pdefaults')' info = epochs: Show: ■ goal: time: min_grad: max_fail: 100 25 ■ 0 Inf 1.0e-006 5 s igma:: lambda: - 5.0e~5 5.0e-7 //. Формирование моделей нейронных сетей 363
Применение функции; J$ Функция обучения trainscg используется при создании сетей с помощью метода^ newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми^ пользователем. й.'% Для того чтобы подготовить сеть к обучению, необходимо: "^\щ • ' установить свойство сети net.trainFcn равным 'trainscg'. Это автоматически установит^ значения параметров обучения, соответствующие значениям свойства net.trainParamlll по умолчанию. Для того чтобы фактически обучить сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения; • применить функцию train. Алгоритм: Функция trainscg выполняет процедуру обучения, если функции взвешивания, накоп- ■ ления и активации имеют производные. Для вычисления производных критерия качества обучения по переменным веса и смещения используется метод обратного распространен' ния ошибки. Этот алгоритм реализует упрощенную по сравнению с функциями traincgp, traincgf, traincgb стратегию метода сопряженных градиентов, предложенную Моллером [29].. Обучение прекращается, когда выполнено одно из следующих условий: ' • значение функции качества стало меньше предельного; • градиент критерия качества стал меньше значения min_grad; • достигнуто предельное число циклов обучения; • превышено максимальное время, отпущенное на обучение; • ошибка контрольного подмножества превысила ошибку обучающего более чем; в max_fail раз. Пример: :: Заданы следующие обучающие последовательности входов Р и целей Т: Р = [0 1 2 3 4 5]; Т = [0 0 0 1 1 1]; Поскольку соответствие между входом и целью носит явно выраженный нелинейный. характер, то будем использовать нейронную сеть с нелинейными сигмоидальными функциями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig, а во втором-1 нейрон с функцией активации logsig. Для обучения сети применим функцию trainscg. Формирование сети: net = newff{[0 5],[2 1],{'tansig1,'logsig1},'trainscg'); * 364 Нейронные сети. MATLAB 6
Обучение сети: net.trainFaram.epochs = 50; net.trainParam.show = 10; net.trainParam.goal = 0.001; [net,TR] = train(net,P,T); % Рис.11.54 На рис. 11.54 показано, как изменяется точность в процессе обучения; требуемое значение обеспечивается на 14-м цикле обучения. Выполним моделирование сети: Y = sim(net,P) Y = 0.0053 0.0061 0.0522 0-9629 0.9899 0.9906 Требуемое соответствие между входом и выходом нейронной сети обеспечивается с заданной среднеквадратичной погрешностью, равной 0.001. Сопутствующие функции: NEWFF, NEWCF, TRAINGDM, TRAINGDA, TRAINGDX, TRAINLM, TRAINRP, TRAINCGF, TRAINCGB, TRAINBFG, TRAINCGF; TRAINOSS. Квазинъютоновы алгоритмы обучения TRAINBFG ~~j Алгоритм обучения BFGS Синтаксис: /■■. [net JR.Ac.El] = trainbfg(NET,Pd JI,Ai ATS.W.TV) info = trainbfg(code) Описание: Функция trainbfg обучает нейронную сеть, используя квазиньютонов алгоритм Брой- дена, Флетчера, Гольдфарба и Шано (BFGS). Функция при своей работе использует следующие параметры: info = trainbfg('pdefau)ts')' //. Формирование моделей нейронных сетей 365
info = epochs: show: goal: time: min_grad: max_fail: searchFcn: 100 25 0 ' Inf l.Oe-006 5 'srchbac' scale tol: alpha: beta: delta: gama: low_lim: up_lim: 20 0.001 0.1 0.01 0.1 0.1 0.5 maxstep: minstep: bmax: 100 1.0 e-006 26 ■•■■A ' Применение функции: Функция обучения trainbfg используется при создании сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к обучению, необходимо: • установить свойство сети net.trainFcn равным 'trainbfg'. Это автоматически установит значения параметров обучения, соответствующие значениям свойства net.trainParam по умолчанию. Для того чтобы фактически обучить сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения; • применить функцию train. Алгоритм: Функция trainbfg выполняет процедуру обучения, если функции взвешивания, накопления и активации имеют производные. Для вычисления производных критерия качества обучения по переменным веса и смещения используется метод обратного распространения ошибки. В соответствии с квазиньютоновым алгоритмом BFGS вектор настраиваемых переменных получает следующие приращения: X = X + a*dX, где dX - направление поиска; параметр а выбирается так, чтобы минимизировать критерий качества обучения в направлении поиска. Функция одномерного поиска searchFcn используется для вычисления минимума. Начальное направление поиска задается вектором, противоположным градиенту критерия качества. При успешных итерациях направление поиска определяется на основе нового значения градиента и с учетом приближенного значения гессиана согласно формуле[13] dX = -H\gX, где gX - вектор градиента; Н - приближенная оценка гессиана. Обучение прекращается, когда выполнено одно из следующих условий: • значение функции качества стало меньше предельного; • градиент критерия качества стал меньше значения min_grad; • достигнуто предельное число циклов обучения; • превышено максимальное время, отпущенное на обучение; • ошибка контрольного подмножества превысила ошибку обучающего более чем в max_fail раз. :1 366 Нейронные сети. MATLAB б
Пример: Заданы следующие обучающие последовательности входов Р и целей Т: Р» [012 34 5]; Т = [000111]; Поскольку соответствие между входом и целью носит явно выраженный нелинейный характер, то будем использовать нейронную сеть с нелинейными сигмоидальными функциями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig, а во втором -1 нейрон с функцией активации Iogsig. Для обучения сети применим функцию trainbfg. Формирование сети: net = newff{[0 5],[2 1],{'tansig','Iogsig'},'trainbfg'); Обучение сети: net.trainParam.epochs = 50; net.trainParam.show =10; net.trainParam.goal = 0.0001; [net,TR] = train{net,P,T); % Рис.11.55 На рис. 11.55 показано, как изменяется точность в процессе обучения; требуемое значение достигается на 14-м цикле обучения и составляет 7.5е-7. mm Щт ЩШЩШШрШЩППЩ1 iilllllllilillliilinillHllIllli !:П:::м?:::::1::::?::?:^:?::'::;П?ь::^::!?::: ПШ HU щ^щ^щ^щ^щ^^^^^ mm iff Рис. П.55 Выполним моделирование сети: У = sim(net,P); У = 0.0000 0.0000 0.0021 1.0000 0.9999 0.9998 Соответствие между входом и выходом реализуется с очень высокой точностью. Сопутствующие функции: NEWFF, NEWCF, TRA1NGDM, TRA1NGDA, TRAINGDX, TRAINLM, TRAINRP, TRAINCGF, TRAINCGB, TRAINSCG, TRAINCGP, TRAINOSS. 11. Формирование моделей нейронных сетей 367
TRAINOSS Алгоритм обучения Синтаксис: [net.TR.Ac.EQ = trainossfNET.Pd.Tl.Ai.Q.TS.VV) info - trainoss(code) Описание: ..-.,.. >. ;: . Функция trainoss обучает нейронную сетью, используя однршаговый алгоритм метода! секущейOSS.-.;.,-.; .-.._ ,.....-...> _--•..',-,-, -.--v.. .;. ..: .-■ ./ •■■...- .*■.cfj Функция при своей работе использует следующие параметры: info = traihoss('pdefaults')' "''.,' info. = .;.... j,.. ,'. ;. .....-- . ., ; ,,...-,.-■ .. >:'Шш;п epochs: show: goal: time: ,'■ min_grad: max_fail: searchFcn: 100 25 - i 0 Inf - 1.0e-006 .5 ., 'srchbac'.. scale_tol: alpha': beta:- delta: gama: low_lim:- up_lim: 20 " o.ooi -0.1 - 0.01 •0.1. .0.1- 0.5., . maxstep: minstep:' ; -bmax :■---'■'"■' - - : ."■.-'. 100 1.0 e-6^ . 26 i--' ■•г.'- ::.•. -..:.-- Применение функции: Функция обучения traihoss используется при создании сетей с помощью методов newff, newcf, newelm, атакже при формировании сетей с атрибутами, огфеделяемыми пользователем.:.; Для того чтобы подготовить сеть к обучению, необходимо:, • установить свойство сети het.trainFcn равным 'trainoss'. Это автоматически установит; значения параметров обучения, соответствующие значениям свойства hettrainParam ■ '. по умолчанию: ; '. .."-■-'■' ;; .'■i-'r-:f.--''-\.'-:~ ' .' .'""'- '< - Для того чтобы фактически обучить,сеть| необходимо: : ::,.;. • инициализировать нейронную сеть; _. _;.;". •_ присвоить, если это необходимо, требуемые значения параметрам обучения; • применить функцию train. '"_ У'.'. .:_..-•' -_'.' -.'■-, . . Алгоритм: '..-.'" ..."'.. У, . ;\'.У L'. ,У~ ...'.. Функция trainbfg выполняет процедуру обучения, если функции взвешивания, накоп-' ления и активаций имеют производные. Для вычисления производных критерия качества обучения по переменным веса и смещения используется метод обратного распространения ошибки. В соответствии с квазиньютоновым алгоритмом BFGS вектор настраиваемых переменных'получает следующие приращения: :'i ' -'■''- ..-.,-.,.. '..-;-:; X=-X',+ a*dX; '■: •■' :.У. .-, .; ,.j;:.-. ■,.. -/,.., у; . ,;Ц-;С_ ;/, -.. . ,., ■;-->;.„, .. .: -.- У- - где dX.^" направление поиска; параметр а выбирается так, чтобы минимизировать крите-: рий качества,обучения в.направлении поиска. Функция одномерного поиска searchFcn используется для вычисленйя'мйнимума. Начальное направление поиска задается вектором, противоположным градиенту критерия качества. При успешных итерациях направление поиска определяется на основе нового значения градиента и значений градиентов на предыдущих шагах согласно формуле [1] ■-'_■' 368- '.;.'■ : v Нейронные сети: MATLAB 6
ЗД|р| -Ms aewft;; ."елем.; кшит^£, ^aramV акоп-' рите-:',^|.: AFc'ri .'■" «кто- ' прав- ентов АВ6. ...;. dX=-gX + Ac*X_step + Bc*dgX, ^ **.■-,-■.'-^\}■-,:/.■■=■ --;: где gX ~ вектор градиента; X_step - приращение. весов на предыдущей итерации; dgX - изменение градиента на последней итерации. " -.';.-: \; Обучение прекращается, когда выполнено одно из следующих условий: ■'.• значение функции качестве сталоменьше предельного; -:" -■■'"''" • .. градиент критерия качества стал меньше значения mnugrad; ..■.==-;■.. • ; достигнуто пред'ельноёчисло циклов обучения; ;^tV';": л ■ • превышено максимальное время, отпущенное на обучение; ., • " о1Ш1бкакошрольногоподмн6жёствапревь1Силао1Ш Пример: .;■■.... .;.;:= ,-:. .■-.."■ .:..-.. -.■.-. л ■" ;. .--..= ;■..-.. ..; ... ....=■■■-'."', Заданы следующие обучающие последовательности входов Р и целей Т: Р я [О 1 2 3.4 5]; '?'' :'~ ;:->rv:; -':*' Т « [О О 0 1 11]; Поскольку соответствие между входом и целью носит явно выраженный нелинейный характер, то будем использовать нейронную сеть с нелинейными сигмоидальными функциями активации. Выберем двухслойную нейронную сеть.с прямой.передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig, аво втором-1 нейрон с функцией активации logsig. Для обучения сети применим функцию trairioss. Формирование сети:-:'-. -•-"-:"-; ' .- ..'=." . ..""".. net = newff([d 53, t2 1], {'tansig', 'logsig.'}, •trainees'); Обучение сети:.'.- '.,, ■;'.[ ".-.'-■-.:%:'.. '.' \ ^ , /. net. trainParam. epochs j= 50; ч'"-."- .:/ ..'.i! .':-..;- '-•''■ ": \ net.trainParam.show ;= 10; :..■ ">■ . --l:;-'~. net.trainParam.goal = 0.0001;'- "V'-«.'."="--u: "■']'-''' ':'_ *,--;'-' [net#TR]"= train(net,P,T); % Pxcc.llw5.6~ ." - -~ .. : . ?.. i-*™!.S?,Wi. "В si>a e^ 4 T"--!-- ------- !■-" r-- ШШ1 " Рис. .11.56 На рис. 11.56 показано, как изменяется точность в процессе обучения; требуемое значение обеспечивается наi29-M цикле обучения; :. 11. Формирование моделей нейронных сетей 369
Выполним моделирование сети: Y = sim(net,P> Y = 0.0093 0.0090 0.0127 0.9856 0.9989 0.9990 Требуемое соответствие между входом и выходом нейронной сети обеспечивается с заданной среднеквадратичной погрешностью, равной 0.0001. Сопутствующие функции: NEWFF, NEWCF, TRAINGDM, TRA1NGDA, TRAINGDX, TRAINLM, TRA1NRP, TRAINCGF, TRAINCGB, TRAINSCG, TRAINCGP, TRAINBFg! TRAINLM Алгоритм Левенберга - Марквардта LM Синтаксис: [net.TR.Ac.EI] = trainlm(NET,Pd,TI,Ai,Q,TS,VV) info - trainlm(code) Описание: Функция trainlm обучает нейронную сеть, используя алгоритм Левенберга - Марквардта LM. Функция при своей работе использует следующие параметры: info = trainlm('pdefaults')' info = epochs: show: goal: time: min_grad: max_fail: 100 25 0 Inf 1.0e~006 5 lr: mc: rnem_reduc: mu: mu_dec: murine: 0.01 0.9 1 0.001 0.1 10 rau_max: l.OelO . Применение функции: Функция обучения trainlm используется при создании сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к обучению, необходимо: • установить свойство сети nct.trainFcn равным 'trainlm'. Это автоматически установит значения параметров обучения, соответствующие значениям свойства net.trainParam по умолчанию. Для того чтобы фактически обучить сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения; • применить функцию train. 370 Нейронные сети. MATLAB б
Алгоритм: Функция trainlm выполняет процедуру обучения, если функции взвешивания, накопления и активации имеют производные. Для вычисления якобиана критерия качества обучения по переменным веса и смещения используется метод обратного распространения ошибки. Каждая настраиваемая переменная корректируется в соответствии с методом Левснбсрга - Марквардта: Ji = jX*jX; Je = jX*E; dX = -Gi +1 * niu)\je, где Е ~ матрица ошибок; I - единичная матрица. Параметр адаптации mu возрастает с коэффициентом mujnc до тех пор, пока изменение весов и смещений dX не приведет к уменьшению критерия качества; после этого коэффициент mu_inc переключается на mu_dec. Параметр mem_reduc позволяет находить компромисс между объемами оперативной памяти и быстродействием, необходимыми для вычисления якобиана. Когда параметр rnem_rcduc равен 1, обеспечивается максимальное быстродействие, но и требуются большие объемы памяти. Если увеличить значение mem_rcduc вдвое, то потребная память также уменьшится примерно вдвое, но скорость вычислений несколько замедлится. Чем больше значение memjreduc, тем меньше требования к памяти, но время вычислений существенно увеличивается. Обучение прекращается, когда выполнено одно из следующих условий: • значение функции качества стало меньше предельного; • градиент критерия качества стал меньше значения min_grad; • достигнуто предельное число циклов обучения; • превышено максимальное время, отпущенное на обучение; • ошибка контрольного подмножества превысила ошибку обучающего более чем в max_fail раз. Пример: Заданы следующие обучающие последовательности входов Р и целей Т: Р = [012345]; Т = [000111]; Поскольку соответствие между входом и целью носит явно выраженный нелинейный характерно будем использовать нейронную сеть с нелинейными сигмоидальными функциями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig, а во втором— 1 нейрон с функцией активации logsig. Для обучения сети применим функцию trainlm. Формирование сети: net = newf£([0 5],[2 1],{'tansig','logsig'},'trainlm'); Обучение сети: net.trainParam. epochs «50; net.trainParam. show =10; 11. Формирование моделей нейронных сетей 371
net.fcrainParam.goal = 0.0001; [net,TR] = train(net,P,T); % Рис.11.57 TR = epoch: [0 1 2 3 4 5 6 7 8 9 10 11 12 13] perf: [1x14 double] vperf: [1x14 double] tperf: [1x14 double] mu: [1x14 double] На рис. 11.57 показано, как изменяется точность в процессе обучения; требуемое значение обеспечивается на 13-м цикле обучения. . Точность - 6 Ое-005, предельная - 0.0001 ю" ю-1 10f* < щтш1ттйтт\тттт !!!11П:|!П!!!1ё!1П1!!|!11НН1'ИШШ1НН!ЦиГ ■ i « ■ Y :lllllllilllilllllllllllllilllllii^lilllilili^|lillilll' ,. .„ ,. , .4..-V , =НПП: = ПШ = ꧧП=^=Ш:Пз!ШЁ=:рйЁЁЁ^Н: « • ^L • ; ; ; \ :iiiiiii|iiiiiiipiii»iiisiiiiiiiHmiipiiHiiiinil * ■■;■: -.',■::. Ж ■..•V . Рис. 11.57 Данный алгоритм имеет адаптивный параметр mu, изменение которого показано на рис. 11.58. \ 1 1 \\ V 1 1 1 k I j j 1 1 1 j i i Рис. 11.58 Из анализа этого рисунка следует, что на первых трех циклах обучения фактически реализуется градиентный метод, а затем метод Ньютона с аппроксимацией гессиана. 372 Нейронные сети. MATLAB 6
Выполним моделирование сети: Y = sim(net,P) Y = 0.0012 0.0012 0.0049 0.9889 0.9897 0.9897 Требуемое соответствие между входом и выходом нейронной сети обеспечивается с заданной среднеквадратичной погрешностью, равной 0.0001. Сопутствующие функции: NEWFF, NEWCF, TRAINGD, TRAINGDM, TRAINGDA, TRA1NGDX. TRAINBR Алгоритм обучения BR Синтаксис: [net,TR,Ac,El] = trainbrfnet.Pd.TI.Ai ATS.W) info = trainbr(code) Описание: Функция trainbr обучает нейронную сеть, используя алгоритм Левенберга-Марк- вардта, дополненный регуляризацией по Байесу BR. Такие сети находят широкое применение при решении задач аппроксимации нелинейных зависимостей. Функция при своей работе использует следующие параметры: info ~ trainbr('pdefaults')1 info = epochs: Show: goal: time: min_grad: max„fail: 100 25 0 Inf 1.0e-006 5 mem_reduc: mu: mu„dec: murine: mujnax: 1 0.005 0.1 10 1.0e+010 Применение функции: Функция обучения trainbr используется при создании сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к обучению, необходимо: • установить свойство сети net.trainFcn равным 'trainbr'. Это автоматически установит значения параметров обучения, соответствующие значениям свойства net.trainParam по умолчанию. Для того чтобы фактически обучить сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения; • применить функцию train. Алгоритм: Функция trainbr выполняет процедуру обучения, если функции взвешивания, накопления и активации имеют производные. В отличие от всех ранее описанных процедур эта ] 1. Формирование моделей нейронных сетей 373
функция использует метод регуляризации, что позволяет успешно справиться с проблемой переобучения. Для этого осуществляется минимизация комбинированного функционала качества обучения, который учитывает не только сумму квадратов ошибок обучения, но квадраты весов. Эта стратегия регуляризации, называемая регуляризацией по методу Байсса, подробно рассмотрена в работах [11, 23]. При реализации функции trainbr эта стратегия встроена в алгоритм Лсвенберга - Марквардта. Для вычисления якобиана функционала качества по переменным веса и смещения используется метод обратного распространения ошибки. Каждая настраиваемая переменная корректируется в соответствии с методом Левенберга - Марквардта: jj = jX*jX; je = jX*E; dX = -{jj +1 * mu)\je, где E - матрица ошибок; I - единичная матрица. Параметр адаптации mu возрастает с коэффициентом murine до тех пор, пока изменение весов и смещений dX не приведет к уменьшению критерия качества; после этого коэффициент mu_inc переключается на mu_dec. Параметр mem__rcduc позволяет находить компромисс между объемами оперативной памяти и быстродействием, необходимыми для вычисления якобиана. Когда параметр mem_reduc равен 1, обеспечивается максимальное быстродействие, но и требуются большие объемы памяти. Если увеличить значение mem_reduc вдвое, то потребная память также уменьшится примерно вдвое, но скорость вычислений несколько замедлится. Чем больше значение mem_reduc, тем меньше требования к памяти, но время вычислений существенно увеличивается. Обучение прекращается, когда выполнено одно из следующих условий: • значение функции качества стало меньше предельного; • градиент критерия качества стал меньше значения min_grad; • достигнуто предельное число циклов обучения; • превышено максимальное время, отпущенное на обучение; • ошибка контрольного подмножества превысила ошибку обучающего более чем в max_fail раз. Пример: Рассмотрим задачу аппроксимации синусоидальной функции, которая зашумлена нормально распределенным шумом. Р = [-1:.05:1]; Т = sin(2*pi*P) + 0.1*randn(size<P)); Сформируем для решения этой задачи двухслойную нейронную сеть прямой передачи' сигнала. Вход сети принимает значения в диапазоне от -1 до 1. Первый слой имеет 20 нейронов с функцией активации tansig, второй слой имеет 1 нейрон с функцией активации- purelin. В качестве обучающей используем функцию trainbr. Формирование сети: net = newff([-l 1], £20,1J,{'tansig','purelin'J,'trainbr'); 374 Нейронные сети. MATLAB 6
Обучение сети (рис. 11.59): net.fcrainParam.epochs =50; net-trainParam.show = 10; net = train(net,P,T); % Рис.11.59 Ze? = 0.167972 . Hi I,- :') :■■■ ,!■: M V V Оптимальное количество параметров = 15 >' " ■:. Рис. 11.59 Количество настраиваемых параметров на 50 циклах обучения стабилизировалось и равно 15. Выполним моделирование сети и построим графики исследуемых функций. Y = sim(net,P); plot(P,Y,P,T,■+•) % Рис.11.60 i- -у т т •'-.. .1 ... -1.5 Г~ " 1 ' "Г- I "- ■!- -— '•,+ '• '• : : +t "+■ ; ■ : +' +*' i t : I 1 .+ * i \\ ; 1 i+ 1 " ("** "I " у ". " ' : : : + : i i iit+;,+ ! 1 1 1 1 1 1 ! 1 h-.—:-— *V: ~4~- il" ; + L.... ! ЕЫХСД I + вход 1 ; ; + : + :+ :>~ f4f ; « ':■ •r V -У. ■'-OS,'sQ£"- -0.4 -0.2 . 0 0.2...0Л .0.6 0,8..-;"1 Рис. 11.60 Из анализа рис. П.60 следует, что выход сети сглаживает входные данные и обеспечивает оптимальную структуру сети по числу настраиваемых параметров, не допуская в ней явления переобучения. Сопутствующие функции: NEWFF, NEWCF, TRAINGDM, TRAINGDA, TRAINGDX, TRAINLM, TRAINRP. TRAINCGF, TRAINCGB, TRAINSCG. TRAINCGP, TRAINOSS. //. Формирование моделей нейронных сетей 375
11.5.1. Функции оценки качества обучения Процесс обучения нейронных сетей связан с такой настройкой се весов и смещений чтобы минимизировать некоторый функционал, зависящий от ошибок сети, т. с. разности между желаемым и реальным сигналами на ее выходе. В качестве таких функционалов в ППП NNT используются: сумма квадратов ошибок SSE^er; (11.6) 1=1 средняя квадратичная ошибка 1 jV MSE = — Уе,2; (П.7) комбинированная ошибка ?Р MSEREG^Yet+±^-tx2r, (П.8) средняя абсолютная ошибка АИ£=™У|в|- (11.9) Для вычисления этих функционалов качества и предназначены соответствующие функции пакета, рассматриваемые ниже. Все эти функции и их производные имеют одинаковый формат вызова pert - <имя_функции>(Е,Х,рр) dPerf_dE = с!<имя_функции>(,е'1Е1Х,ре111рр) perf = <имя_функции>(Е,пе1,рр) dPerf_dX = скимя_функции>('х\Е,Х,ре17,рр) Входные аргументы: Е - матрица или массив ячеек вектора ошибки; X - вектор весов и смещений; рр - параметр функционала; net - нейронная сеть в виде объекта network object; 'е', 'х' - аргументы операции дифференцирования; perf- критерий качества обучения. Выходные аргументы: perf- критерий качества обучения; ■ dPerf_dE - производная критерия качества по вектору ошибки; dPerf_dX - производная критерия качества по вектору параметров. Входной аргумент Е может иметь 2 формата: cell array и double array. В формате cell array массив Е имеет следующие размеры: Е- массив ячеек размера NtxTS, каждый элемент которого E(i, ts} -числовой массив размера VYxQ, где Nt - количество целевых выходов; TS - число шагов по времени; Q - количество реализаций для фиксированного момента времени; V7 — количество элементов f-ro вектора цели. 376 Нейронные сети. MATLAB б
В формате double array Nt числовых массивов Е размера VixQ преобразуются в един- Л', ственный числовой массив размера V */ xQ. 1=1 Кроме того, все функции возвращают информацию о параметрах функции критерия качества, если используется следующий формат вызова: info = <имя__функции>(сос!е). В зависимости от значения аргумента code возвращается следующая информация: 'name' - полное название функции критерия качества; 'deriv' - имя производной функции критерия качества; 'pnames' - имена параметров функции критерия качества; 'pdefaults' -значения параметров функции критерия качества, принимаемые по умолчанию. SSE, DSSE | Критерий суммы квадратов ошибок Синтаксис: pert = sse(E,X,pp). dPerf_dE = dssefe'.E.X.perf.pp) perf = sseJE.net.pp) dFerLdX = dssef'x'.E.X.perf.pp) info = sse(code) Описание: Функции perf = sse(E, X, pp) и perf = ssc(E, net, pp) вычисляют критерий качества обучения в виде сумм квадратов ошибок по формуле (11.6). Функции dPerfdE = dsse('e', Е, X, perf, pp) и dPerf_dX = dssc(V, E, X, perf, pp) вычисляют градиенты функционала качества по векторам ошибки, а также весов и смещений. ^Применение функции: Для того чтобы использовать функцию критерия качества sse, необходимо установить свойство net.performFcn равным 'sse'. Это автоматически установит значения параметра net.performParam равными пустому массиву [ ], поскольку данная функция не имеет таких параметров. Примеры: Получим информацию о данной функции и ее производной: sse('name'), sse('deriv'), sse('pnames*) ans = Sum squared error ans = dsse ans = {} Сформируем двухслойную нейронную сеть прямой передачи с одноэлементным входом, изменяющимся в диапазоне [-10 10], которая имеет 4 скрытых нейрона с функцией активации tansig и 1 нейрон на выходе с функцией активации purelin: net = newff{[-10 10],[4 1],{'tansig*,'purelin'}); Зададим векторы входа и целей: Р = [-10 -S 0 5 10]; Т = [ 0 0 11 1]; / /. Формирование моделей нейронных сетей 377
Промоделируем исходную нейронную сеть и вычислим ее ошибку: Y = sim{net, Р); Е = T-Y Е = -0.4714 -1.4040 -0.2399 0.6419 0.0049 Вычислим функционал качества ssc: net.performFcn = 'sse'; perf = sse(E) perf = 2.6629 Теперь вычислим градиенты функционала качества. Градиент функционала по вектору ошибки вычисляется следующим образом: dPer£_&E = dsse(*е',Е,Х) dPerf_dE = -0.9427 -2.8079 -0.4798 1.2837 0.0097 Для вычислений градиента функционала по вектору настраиваемых параметров сформируем этот вектор, который объединяет веса и смещения сети: X = [net.IWU}; net.b{l}]' X = 0.5600 -0.5600 0.5600 -0.5600 -5-6000 1.8667 1.8667 -5.6000 Градиент функционала по вектору параметров dPerf„dX = dsse('х1,Е,Х) dPerf_dX= 0 0 0 0 0 0 Этот градиент равен нулевому вектору, поскольку функционал качества не зависит явным образом от параметров сети. MSE, DMSE Критерий средней квадратичной ошибки Синтаксис: perf = mse(E,X,pp) dPerf_dE = dmseCe'.E.X.perf.pp) perf = mse(E,net,pp) dPertdX = dmsef'x'.E.X.perf.pp) info = mse(code) Описание: Функции perf = mse(E, X, pp) и perf = mse(E, net, pp) вычисляют критерий качества обучения в виде средней суммы квадратов ошибок по формуле (11.7). Функции dPerf_dE = dmse('e', E, X, perf, pp) и dPerf_dX=dmse('x', E, X, perf, pp) вычисляют градиенты функционала качества по векторам ошибки, а также весов и смещений. Применение функции: Функция критерия качества mse используется при создании сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы использовать функцию критерия качества mse, необходимо установить свойство net.performFcn равным 'mse'. Это автоматически установит значения параметра net.perforrnParam равными пустому массиву [ ], поскольку данная функция не имеет таких параметров. 378 Нейронные сети. MATLAB 6
Пример: Получим информацию о данной функции и ее производной: mse{'name'), mse(*deriv'), mse(■pnaraes■) ans = Mean squared error ans = dmse ans = {} Сформируем двухслойную нейронную сеть прямой передачи с одноэлементным входом, изменяющимся в диапазоне [-1010], которая имеет 4 скрытых нейрона с функцией активации tansig и 1 нейрон на выходе с функцией активации purclin: net = newff([-10 10],[4 1],{'tansig','purelin'}); Зададим векторы входа и целей: Р = [-10 -5 0 5 10]; Т = [ О 0 11 1]; Промоделируем исходную нейронную сеть и вычислим ее ошибку: У = sim(net, P); В = T-Y Е = -0.4714 -1.4040 -0.2399 0.6419 0.0049 Вычислим функционал качества mse: net.performFcn = 'mse'; perf = mse(E) perf = 0.5326 Теперь вычислим градиенты функционала качества. Градиент функционала по вектору ошибки вычисляется следующим образом: dPerf_dE = dmse(telrblfX) dPerf_dE = -0.1885 -0.5616 -0.0960 0.2567 0.0019 Для вычислений градиента функционала по вектору настраиваемых параметров сформируем этот вектор, который объединяет веса и смещения сети: X = [net.IWU); net.bCl}]' X = 0.5600 -0.5600 0.5600 -0.5600 -5.6000 1.8667 1.8667 -5.6000 Градиент функционала по вектору параметров dPerf„dX = dmse('x',Е,Х) dPerf_dX= 0 0 0 0 0 0 Этот градиент равен нулевому вектору, поскольку функционал качества не зависит явным образом от параметров сети. Сопутствующие функции: MSEREG. МАЕ. MSEREG, DMSEREG I Комбинированный критерий качества Синтаксис: pert = mse(E,X,pp) dPerf„dE = dmseregCe'.E.X.perf.PP) perf = mse(E,net,pp) dPerLdX = dmsereg('x\E,X,perf,PP) info = mse(code) //. Формирование моделей нейронных сетей 379
Описание: Функции pcrf= mscrcg(E, X, рр) и pcrf= mscreg(E, net, pp) вычисляют комбинированный критерий качества обучения по формуле (11.8). Функции dPerfjdE=dmsercg('c\ E, X, pcrf, рр) и dPcrf_dX= dmsercg('x', E, X, perf, pp) вычисляют градиенты функционала качества по векторам ошибки, а также весов и смещений. Применение функции: Функция критерия качества msereg используется при создании сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы использовать функцию критерия качества msereg, необходимо установить свойство nct.pcrformFcn равным 'msereg'. Это автоматически установит значения параметра net.performParam равными значениям по умолчанию. Пример: Получим информацию о данной функции и ее производной: msereg {' name •), msereg (' deriv') / msereg (' pnames'), msereg (■ pdef ault s •) ans = Mean squared error with regularization ans = dmsereg ans = 'ratio' ans = ratio: 0.9000 Это единственный функционал качества, который состоит из двух слагаемых: среднеквадратичной ошибки с весом ratio и штрафной функции, оцениваемой суммой квадратов весов и смещений с весом 1-ratio. Сформируем двухслойную нейронную сеть прямой передачи с одноэлементным входом, изменяющимся в диапазоне [-10 10], которая имеет 4 скрытых нейрона с функцией активации tansig и 1 нейрон на выходе с функцией активации purelin: net = newff([-10 10],[4 1],{'tansig','purelin'>); Зададим векторы входа и целей: Р = [-10 -5 О 5 10]; Т = [ 0 0 11 1]; Промоделируем исходную нейронную сеть и вычислим ее ошибку: У = sim(net, P); Е = T-Y Е = -0.4714 -1.4040 -0.2399 0.6419 0.0049 Вычислим функционал качества msereg: net.performFcn = 'msereg'; net.performParam.ratio = 0.9; perf = msereg(E,net) perf = 0.5326 Теперь вычислим градиенты функционала качества. Градиент функционала по вектору ошибки вычисляется следующим образом: dPerf_dE = dmsereg('е*,Е,Х) dPer£„dE =■- -0.1885 -0.5616 -0.0960 0.2567 0.0019 380 Нейронные сети. MATLAB 6
Для вычислений градиента функционала по вектору настраиваемых параметров сформируем этот вектор, который объединяет веса и смещения сети: X = [net.IW{l}; net.b{l}]' X = 0.5600 -0.5600 0.5600 -0.5600 -5.6000 1.8667 1.8667 -5.6000 Градиент функционала по вектору параметров dPerf_dX = dmsereg{'х',E,X,perf,net.performParam) dPerf_dX = -0.0140 0.0140 -0.0140 0.0140 0.1400 -0.0467 -0.0467 0.1400 Этот градиент не равен нулевому вектору, поскольку функционал качества зависит явным образом от параметров сети. Сопутствующие функции: MSE, МАЕ. МАЕ, DMAE | Критерий средней абсолютной ошибки Синтаксис: pert = mae(E,X,pp) dPerf_dE = dmae('e',E,X,perf,pp) perf = mae(E,net,pp) dPerf_dX - dmae('x',E,X,perftpp) info = mae(code) Описание: Функции perf = mae(E, X, pp) и perf = mae(E, net, pp) вычисляют критерий качества обучения в виде средней суммы абсолютных ошибок по формуле (11.9). Функции dPerfjlE = dmae('e', E, X, perf, pp) и dPerfjdX=dmaeC/x', E, X, perf, pp) вычисляют градиенты функционала качества по векторам ошибки, а также весов и смещений. Применение функции: Функция критерия качества тае используется при создании сетей с помощью методов newff, newcf, newelra, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы использовать функцию критерия качества тае, необходимо установить свойство nct.performFcn равным 'тае'. Это автоматически установит значения параметра net.performParam равными пустому массиву [ ], поскольку данная функция не имеет таких параметров. Пример: Получим информацию о данной функции и ее производной: тае{'паше'), тае('deriv'), тае{"pnames') ans = Mean absolute error ans = draae ans = {} Сформируем двухслойную нейронную сеть прямой передачи с одноэлементным входом, изменяющимся в диапазоне [-10 10], которая имеет 4 скрытых нейрона с функцией активации tansig и 1 нейрон на выходе с функцией активации pure!in: net = newff([-10 101,[4 1],{'tansig1,'purelin*}); /У. Формирование моделей нейронных сетей 381
Зададим векторы входа и целей: Р = [-10 -5 0 5 10]; Т = [ 0 0 11 1] ; Промоделируем исходную нейронную есть и вычислим ее ошибку: Y = sim(net, P); Е = T-Y Е = -0.4714 -1.4040 -0.2399 0.6419 0.0049 Вычислим функционал качества тае: net.performFcii = 'тае'; perf = тае(Е) perf = 0.5524 Теперь вычислим градиенты функционала качества. Градиент функционала по вектору ошибки вычисляется следующим образом: dPerf_dE = dmaeCe-ЛЕ}ГХ); [dFerf_dE{:}] ans =-1-1-111 Для вычислений, градиента функционала по вектору настраиваемых параметров сформируем вектор, который объединяет веса и смещения сети: X = [net.IW{l}; net.b{l}]■ X = 0.5600 -0.5600 0.5600 -0.5600 -5.6000 1.8667 1.8667 -5.6000 Градиент функционала по вектору параметров dPerf_dX = dmae('x',{E},{X}) dFerf_dX = 0 Сопутствующие функции: MSE, MSEREG. 11.6. Функции настройки параметров Функции настройки параметров нейронной сети предназначены для вычисления приращений весов и смещений при обучении или адаптации сети. Входные и выходные аргументы для всех функций настройки параметров одинаковы и приведены в начале данного раздела. Входные аргументы: W - матрица весов размера SxR; b - вектор смещений размера Sx 1; Р - вектор из единиц размера lxQ; Z - взвешенный вектор входа размера SxQ; N - матрица векторов входа нейрона размера SxQ; А - векторы выхода размера SxQ; Т - векторы целей слоя размера SxQ; Е - векторы ошибок слоя размера SxQ; gW - градиент функционала по настраиваемым параметрам размера SxQ; gA -градиент функционала по выходу сети размера SxQ; 382 Нейронные сети. MATLAB 6
D - матрица расстояний между нейронами размера SxS; LP - параметры процедуры настройки, при их отсутствии LP = [ ]; Is - начальный вектор настраиваемых параметров (по умолчанию пустой массив). Выходные аргументы: d\V - матрица приращений весов размера SxR; db ~ вектор приращений смещений размера Sx 1; LS - новый вектор настраиваемых параметров. Кроме того, все функции возвращают информацию о параметрах функций настройки, если используется следующий формат вызова: info = <имя_функции>(с^е). В зависимости от значения аргумента code возвращается следующая информация: 'pnames' - имена параметров процедуры настройки; 'pdcfaults' - значения параметров процедуры настройки, принимаемые по умолчанию; 'needg' - возвращается 1, если процедура использовала значения градиентов gW или gA. Функция настройки параметров персептрона Синтаксис: [dW.LS] = learnp(W,P,Z,N AT\E.gW,gA,D,LP,ls) [db.LS] = learnp(blones(1,Q),Z,N,A,T)E,gW,gA,D,LP,ls) info = learnp (code) Описание: Функция learnp предназначена для настройки весов и смещений персептрона. Эта функция не имеет параметров настройки. Применение функции: Функция настройки параметров сети learnp используется при создании сетей с помощью метода newp, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к настройке, необходимо: • установить свойство сети nettrainFcn равным 'tramb'. Это автоматически установит значения параметров обучения, соответствующие функции trainb; • установить свойство сети net.adaptFcn равным 'trains'. Это автоматически установит значения параметров адаптации, соответствующие функции trains; • установить свойства net.mputWeights{ij}.learnFcn, nct.layerWeights{ij}.leamFcn, net.biases{i}.learnFcn равными 'learnp'. Для того чтобы фактически обучить или адаптировать сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения; • применить функцию train или adapt. 77. Формирование моделей нейронных сетей 383 | LEARNP
Пример: Определим сеть со случайными векторами входа р и ошибки е: р = rand(2,1); е = rand(3,1); Вызов функции lcarnp можно организовать следующим образом, поскольку не все входные аргументы требуются для вызова этой функции: aw = learnp([],p, [] ,П ЛЬП.е, [] , [Ь [],[],[]) т = 0.5766 0.1403 0.4617 0.1123 0.8468 0.2060 Алгоритм: Функция leamp рассчитывает приращения весов dW в соответствии со следующим обучающим правилом персептрона [Ros]: ~Р*, е = -1; dw = - 0, е=0; . Р'. е = 1. Эти выражения можно представить в следующей обобщенной форме: dw = е * р'. Сопутствующие функции: LEARNPN. NEWP. ADAPTWB, TRAINWB, ADAPT. TRAIN. LEARNPN I - Нормированная функция настройки параметров персептрона Синтаксис: [dW.LS] = leampn(W,P,Z,N AT.E.gW.gA.D.LP.Is) [db.LS] = ]earnp(b1ones(l,Q),Z,N,ApT1E,gW,gA,D,LP,ls) info = learnpn (code) Описание: Функция learnpn предназначена для настройки весов и смещений персептрона. Эта функция не имеет параметров настройки. Применение функции: Функция настройки параметров сети learnpn используется при создании сетей с помощью метода newp, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к настройке, необходимо: • установить свойство сети net.trainFcn равным 'trainb'. Это автоматически установит значения параметров обучения, соответствующие функции trainb; 384 Нейронные сети. MATLAB 6
• установить свойство сети net.adaptFcn равным 'trains'. Это автоматически установит значения параметров адаптации, соответствующие функции trains; • установить свойства net.inputWeights{ij}.learnFcn, net.layerWeights{ij}.leamFcn, net.biases{i}.learnFcn равными 'leampn1. Для того чтобы фактически обучить или адаптировать сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения или адаптации; • применить функцию train или adapt. Пример: Определим сеть со случайными векторами входа р и ошибки е: р = rand(2,l); в = rand(3,1); Вызов функции leampn можно организовать следующим образом, поскольку не все входные аргументы требуются для вызова этой функции: aw = leampn([],p, [] ,[]#[]# [be, [], П Л] ЛЬ []) dW = 0.4122 0.1003 0.3301 0.0803 0.6055 0.1473 Алгоритм: Функция leampn рассчитывает приращения весов dW в соответствии со следующим обучающим правилом: рп = р/(я?гг(1 + р(1)Л2 +...+ р(Я)л2); {-рп\ е = -1; 0, е ~ 0; рп', е = 1. Эти выражения можно представить в обобщенной форме: dw =е*рп\ Сопутствующие функции: LEA'RNP, NEWP, ADAPT, TRAIN. LEARNWH Функция настройки методом Видроу - Хоффа Синтаксис: [dW.LS] = learnwh(W1P,Z,NAT,E,gW,gA1D,LP1ls) [db.LS] = learnwh(b,ones(1 ,Q)1Z,N,A,T,E,gW,gA,D1LP,ts) info = learnwh (code) Описание: Функция leanrwh предназначена для настройки параметров нейронных сетей по методу Видроу - Хоффа. Параметры процедуры leamwh представлены в следующей таблице. П. Формирование моделей нейронных сетей 385
Параметр UP.fr Назначение Скорость настройки, по умолчанию 0.01 Применение функции: Функция настройки параметров сети learnwh используется при создании линейных нейронных сетей с помощью метода newlin, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к настройке, необходимо: • установить свойство сети net.trainFcn равным 'trainb'. Это автоматически установит значения параметров обучения, соответствующие функции trainb; • установить свойство сети net.adaptFcn равным 'trains'. Это автоматически установит значения параметров адаптации, соответствующие функции trains; • установить свойства net.inputWeights{ij}.leamFcn, net.layerWeights{ij}.learnFcn, net.biases{i}.leamFcnравными 'learnwh'. Для того чтобы фактически обучить или адаптировать сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения или адаптации; • применить функцию train или adapt. Пример: Определим сеть со случайными векторами входа р и ошибки е с двухэлементным входом и тремя нейронами и параметром скорости настройки 1п р = rand(2,l); в = rand(3,1); lp.lr = 0.5; Вызов функции leamwh можно организовать следующим образом, поскольку не все входные аргументы требуются для вызова этой функции: AW = learnwh ([], р, [] Л] ЛЬГЬе, [],ПЛЫР, П ) dW = 0.2883 0.0701 0.2309 0.0562 0.4234 0.1030 Алгоритм: Функция learnwh рассчитывает приращения весов dW в соответствии с обучающим | правилом Видроу - Хоффа [44,45] в зависимости от нормированного вектора входа рп, ошибки е и параметра скорости настройки 1п pn~p/(sqrt(l + р(1)л2 + ...+ p(R)*2); dw = Jr*e*pn'. Сопутствующие функции: MAXL1NLR, NEWLIN, ADAPT, TRAIN. 386 Нейронные сети. MATLAB 6 \
LEARNGD I Функция настройки методом градиентного спуска Синтаксис: [dW.LS] = learngd(W,P,Z1N,A1T,E,gW)gAtD,LP,ls) [db.LS] = leamgd(b,ones(1lQ),Z,NlAlTlE,gW,gA,D,LP,ls) info = leamgd(code) Описание: Функция learngd предназначена для настройки весов и смещений сети методом градиентного спуска. Параметры процедуры learngd представлены в следующей таблице. Параметр LP.Ir Назначение Скорость настройки, по умолчанию 0.01 Применение функции: Функция настройки параметров сети leamgd используется при создании линейных нейронных сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к настройке, необходимо: • установить свойство сети netadaptFcn равным 'trains'. Это автоматически установит значения параметров адаптации, соответствующие функции trains; • установить свойства net.mputWeights{i,j}.learnFcn, net.layerWeights{i,j}.leamFcn, net.biases{i}.learnFcn равными 'learngd'. Для того чтобы фактически адаптировать сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам адаптации; • применить функцию adapt. Пример: Допустим, что на некотором шаге настройки слоя с тремя нейронами и двухэлементным входом известен случайный вектор градиента gW, а параметр скорости настройки задан равным 0.5: gW = rand(3#2); lp.lr = 0.5; Тогда вызов функции leamgd можно организовать следующим образом, поскольку не все входные аргументы требуются для вызова этой функции: aw = learngd( [], [J, [] , [] . П , П . П ,gW, [] , [] ,1р, []) dW = 0.4751 0.2430 0.1156 0.4456 0.3034 0.3810 //. Формирование моделей нейронных сетей 387
Алгоритм: Функция Icarngd рассчитывает приращение веса dW в зависимости, от градиента функционала качества по вектору весов gW и параметра скорости настройки 1г в соответствии с методом градиентного спуска: dW = lr*g\V. Сопутствующие функции: LEARNGDM, NEWFF, NEWCF, ADAPT, TRAIN. LEARNGDM I Функция настройки методом градиентного ' ' "' ' спуска с возмущением Синтаксис: IdW.LS] = learngdm(W,P,Z,N AT,E,gWtgA,D.LP,ls) [db.LS] = learngdm(b,ones(1 .QJ.Z.N AT.E.gW.gA.D.LP.ls) info = learngdm(code) Описание: Функция learngdm предназначена для расчета приращений весов и смещений нейронной сети методом градиентного спуска с возмущением. Параметры процедуры learngdm представлены в следующей таблице. Параметр LP.Ir LP.mc Назначение Скорость настройки, по умолчанию 0.01 Параметр возмущения, по умолчанию 0.9 Применение функции: Функция настройки параметров сети learngdm используется при создании линейных нейронных сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к настройке, необходимо: • установить свойство сети net.adaptFcn равным 'trains'. Это автоматически установит значения параметров адаптации, соответствующие функции trains; • .установить свойства net.inputWeights{ij}.leamFcn, net.layerWeights{ij}.learnFcn, netbiases{i} .learnFcn равными 'learngdm'. Для того чтобы фактически адаптировать сеть, необходимо: • инициализировать нейронную сеть; • присвоить, есди это необходимо, требуемые значения параметрам адаптации; j • применить функцию adapt. ] Пример: 1 Допустим, что на некотором шаге настройки слоя с тремя нейронами и двухэлементным входом известен случайный вектор градиента gW, а параметры скорости настройки и возмущения заданы равными 0.6 и 0.8 соответственно: 388 Нейронные сети. MATLAB 6
ки gW = rand(3,2); lp.lr = 0.6; lp.mc = 0.8; Тогда вызов функции leamgdm можно организовать следующим образом, поскольку не все входные аргументы требуются для вызова этой функции: Is = []; [dw,ls] = learngdm<[] ,[ЬП , [J ЛЬП , N,gW, [] ,[],lp,ls) dW = 0.2739 0.2668 0.0111 0.3693 0.4928 0.4752 Is = dw: [3x2 double] ls.dw ans = 0.2739 0.2668 0.0111 0.3693 0.4928 0.4752 Функция leamgdm возвращает матрицу приращения весов и сохраняет эту матрицу для следующего шага настройки. Алгоритм: Функция learn gdm рассчитывает приращение веса dW в зависимости от градиента функционала качества gW по вектору весов, параметров скорости настройки 1г и возмущения тс в соответствии с методом градиентного спуска с возмущением: dW = mc*dWprev + (l-mc)*lr*gW. Предыдущее приращение веса dWprev считывается из переменной ls.dw. Сопутствующие функции: LEARNGD, NEWFF, NEWCF, ADAPT, TRAIN. LEARNLV1 Функция настройки весов LVQ-сети по правилу LVQ1 Синтаксис: [dW.LS] = learnlv1(W,P,Z,N,A,T,E,gW,gA,D,LP,ls) info = learnlvl (code) Описание: Функция learnlvl предназначена для настройки весов LVQ-сети по правилу LVQ1. Параметры процедуры learnlvl представлены в следующей таблице. Параметр LP.Ir Назначение Скорость настройки, по умолчанию 0.01 / /. Формирование моделей нейронных сетей 389
Применение функции: Функция настройки параметров сети leamlvl используется при создании линейных нейронных сетей с помощью метода newlvq, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к настройке, необходимо: • установить свойство сети net.trainFcn равным 'trainr'. Это автоматически установит значения параметров обучения, соответствующие функции trainr; • установить свойство сети net.adaptFcn равным 'trains'. Это автоматически установит значения параметров адаптации, соответствующие функции trains; • установить свойства net.inputWeights{ij}.leamFcn, net.IayerWeights{ij}.learaFcn равными 'learnlvl'. Для того чтобы фактически обучить или адаптировать сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения или адаптации; • применить функцию train или adapt. Пример: Определим слой нейронной сети с двухэлементным входом и тремя нейронами со случайными массивами входа р, весов w и выхода а; зададим также градиент функционала по выходу gA и параметр скорости настройки 1п р = rand{2,l); w = ranu(3,2); а = compet(negdist(w,p)); gA = [-1;1;1]; lp.lr = 0.5; Вызов функции leamlvl можно организовать следующим образом, поскольку не все входные аргументы требуются для вызова этой функции: aw к learnlvl <w,p, [J, [],а, [],[], [l,gA, [],lp, M ) dw = О О О О -0.0294 -0.1063 Алгоритм: Функция learnlvl рассчитывает приращение весов dW в зависимости от градиента функционала качества gW по вектору выхода и параметра скорости настройки 1г в соответствии с правилом LVQ1, но только для тех нейронов, выход которых a(i) равен 1: /r*(p~wO\:), gA0>0; dw(7,:)~\ [-/r*(p-w(z,:), gA(0=l. Сопутствующие функции: LEARNLV2, ADAPT, TRAIN. 390 Нейронные сети. MATLAB 6
LEARNLV2 I Функция настройки весов LVQ-сети . по правилу LVQ2 1 Синтаксис: | [dW.LS] = learnlv2(WlP,Z,NlA,T,E,gW1gA.D1LP,ls) info = Iearnlv2 (code) Описание: Функция leamlv2 предназначена для настройки весов LVQ-сети по правилу LVQ2. Параметры процедуры learnlv2 представлены в следующей таблице. Параметр LP.Ir LP.window Назначение Скорость настройки, по умолчанию 0.01 Параметр окна, по умолчанию 0.25 Применение функции: Функция настройки параметров сети learnlv2 используется при создании линейных нейронных сетей с помощью метода newlvq, а также при формировании сетей с атрибутами, определяемыми пользователем. Эта функция применяется только после того, как сеть настроена с помощью правила LVQ1. Для того чтобы подготовить сеть к настройке, необходимо: • установить свойство сети nettrainFcn равным 'trainr1. Это автоматически установит значения параметров обучения, соответствующие функции trainr; • установить свойство сети net.adaptFcn равным 'trains'. Это автоматически установит значения параметров адаптации, соответствующие функции trains; • установить свойства net.inputWeights{i,j}.learnFcn, net.layerWeights{i,j}.learnFcn равными 'leamlv2\ Для того чтобы фактически обучить или адаптировать сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения или адаптации; • применить функцию train или adapt. Пример: Определим слой нейронной сети с двухэлементным входом и тремя нейронами со случайными массивами входа р, весов w и выхода а; зададим также градиент функционала по выходу gA и параметр скорости настройки 1г: р - rand(2,l); w = rand(3,2); n = negdist(w,p); а = compet(n) ; gA = [~1;1;1]; lp.lr = 0.5; lp.window = 0.25; ■ 1 J. Формирование моделей нейронных сетей 391
Вызов функции learnlv2 можно организовать следующим образом, поскольку не все - '■ входные аргументы требуются для вызова этой функции: aw = learnlv2(w,p, [Ьп,а, [],[], [],gAf [l,lp,[]) dW = О О О О о о Алгоритм: Функция learnlv2 рассчитывает приращение весов dW в зависимости от градиента функционала качества gW по вектору выхода и параметра скорости настройки 1г в соответствии с правилом LVQ2.1 [24]. Это правило реализует следующую процедуру. -. Необходимо выбрать нейрон kl в качестве победителя и нейрон к2 в качестве проигравшего. Если один из них принадлежит к требуемому классу, а другой - нет, то первому присваивается индекс j, а второму - индекс L Затем вычисляется расстояние di вектора входа до нейрона ki и dj до нейрона к/. Если выполняется условие • / d; dj I - window mm(—, —) > , dj d[ 1 + window то нейрон к/ приближается, а нейрон ki удаляется от вектора входа согласно следующим соотношениям: [dw(i,:) = -/f*(p'-w(i,:)); [dw(i,:) = +/r*(p,-w(i,:)). Сопутствующие функции: LEARNLV1, ADAPT, TRAIN. LEARNK Функция настройки весов для слоя Кохонена Синтаксис: [dW.LS] = [earnk(W,P,Z,N AT,E,gW,gA,D1LP,ls) info = learnk(code) Описание: Функция learnk предназначена для настройки весов слоя Кохонена. Параметры процедуры learnk представлены в следующей таблице. Параметр LP.lr Назначение Скорость настройки, по умолчанию 0.01 Применение функции: Функция настройки параметров сети learnk используется при создании слоев Кохонена с помощью метода newc, а также при формировании сетей с атрибутами, определяемыми пользователем. 392 Нейронные сети. MATLAB 6
Для того чтобы подготовить сеть к настройке, необходимо: , установить свойство сети net.trainFcn равным 'trainr1. Это автоматически установит значения параметров обучения, соответствующие функции trainr; , установить свойство сети net.adaptFcn равным 'trains'. Это автоматически установит значения параметров адаптации, соответствующие функции trains; • установить свойства net.inputWeights{ij}.learnFcn, net.layerWeights{ij}.learnFcn равными 'leamk'. Для того чтобы фактически обучить или адаптировать сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения или адаптации; • применить функцию train или adapt. Пример: Определим слой Кохонена сети с двухэлементным входом и тремя нейронами со случайными массивами входа р, весов w и выхода а; зададим также параметр скорости настройки 1г: р = rand(2/1); а = rand(3,1); w = rand(3,2); lp.lr = 0.5; Вызов функции leamk можно организовать следующим образом, поскольку не все входные аргументы требуются для вызова этой функции: dW = learnk(w,p, [], [] ,а, [], [], U Л1 Л] ,1р, [] ) dw = 0.0940 -0.2951 0.2468 -0.1068 0.4658 -0.1921 Алгоритм: Функция learnlv2 рассчитывает приращение весов dW в зависимости от градиента функционала качества gW по вектору выхода и параметра скорости настройки 1г в соответствии с правилом LVQ2.1 [24]. Функция learnk рассчитывает приращение весов dW в зависимости от вектора входа р, выхода а, весов w и параметра скорости настройки 1г в соответствии с правилом Кохонена [24]: f/r*(p-w), аФО; 0, а = 0. Сопутствующие функции: LEARNIS, LEARNOS, ADAPT. TRAIN. П. Формирование моделей нейронных сетей 393
1 LEARNCON Функция настройки смещений для слоя Кохонена Синтаксис: [db.LS] = learncon(b,P,Z,N,A,T,E,gW,gA1D,LP,ls) info = learncon(code) Описание: Функция learacon предназначена для настройки смещений слоя Кохонена по правилу справедливых смещений. Параметры процедуры learncon представлены в следующей таблице. Параметр LP.fr Назначение Скорость настройки, по умолчанию 0.001 Применение функции: Функция настройки параметров сети learncon используется при создании слоев Кохонена с помощью метода newc, а также при формировании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к настройке, необходимо: • установить свойство сети net.trainFcn равным 'trainr'. Это автоматически установит значения параметров обучения, соответствующие функции trainr; • установить свойство сети net.adaptFcn равным 'trains\ Это автоматически установит значения параметров адаптации, соответствующие функции trains; • установить свойства netbiases{i} .learaFcn равными 'learncon'. Для того чтобы фактически обучить или адаптировать сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения или адаптации; • применить функцию train или adapt. Пример: Определим слой Кохонена сети с двухэлементным входом и тремя нейронами со случайными массивами выхода а, вектора смещений Ь; зададим также параметр скорости настройки 1г: а = rand(3,l); Ь = rand{3,1); lp.lr = 0.5; Вызов функции learnk можно организовать следующим образом, поскольку не все входные аргументы требуются для вызова этой функции: <ЗЪ = 1еагпсоп(Ъ, [3,[], П ,»ЛЬ П , U , ГЫ.ЫР, П ) db = 0.1590 0.3076 0.5565 394 Нейронные сети. MATLAB 6
Алгоритм: Функция leamcon реализует правило настройки с учетом нечувствительности части нейронов, называемых мертвыми; суть этого правила заключается в следующем. В начале процедуры настройки всем нейронам конкурирующего слоя присваивается одинаковый параметр активности со = 1/N, где N - количество нейронов в слое. В процессе настройки функция leamcon корректирует этот параметр таким образом, чтобы его значения для активных нейронов становились больше, а для неактивных нейронов меньше согласно формуле с* = (1 -lr) * c*_i + lr*a. М-функция leamcon использует следующую формулу для расчета приращений вектора смещений: АЬ = ехр(1 - log(c)) - b. Параметр скорости настройки 1г по умолчанию равен 0.001, и его величина на порядок меньше соответствующего значения для функции learnk. Сопутствующие функции: LEARNK, LEARNOS, ADAPT, TRAIN. LEARNIS I Функция настройки по вектору входа Синтаксис: [dW.LS] = Iearnis(WtP,Z,N,A,T,E,gW1gA,D,LP,ls) info = learnis(code) Описание: Функция learnis предназначена для настройки весов слоя Кохонена по вектору входа (правило Гроссберга) и является альтернативой функции настройки learnk. Параметры процедуры leamis представлены в следующей таблице. Параметр LP.lr Назначение Скорость настройки, по умолчанию 0.5 Применение функции: Функция настройки параметров сети learnis используется при создании слоев Кохонена с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к настройке, необходимо: • установить свойство сети net.trainFcn равным 'trainr'. Это автоматически установит значения параметров обучения, соответствующие функции trainr; • установить свойство сети net.adaptFcn равным 'trains'. Это автоматически установит значения параметров адаптации, соответствующие функции trains; • установить свойства net.inputWeights{i,j}.learnFcn, net.layerWeights{ij}.learnFcn равными 'leamis'. Для того чтобы фактически обучить или адаптировать сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения или адаптации; • применить функцию train или adapt. /Л Формирование моделей нейронных сетей 395
Пример: Определим слой Кохонена с двухэлементным входом и тремя нейронами со случайными массивами входа р, весов w и выхода а; зададим также параметр скорости настройки 1г: р = rand(2,1) ; а = rand(3,l); w = rand(3r2); lp.lr = 0.5; Вызов функции learnis можно организовать следующим образом, поскольку не все' входные аргументы требуются для вызова этой функции: UW = learnis(w,p, [] , []#а, [] ,[]»[]» П Л1,1рЛ]> aw = 0.0571 -0.1791 0.1200 -0.0519 0.4152 -0.1713 Алгоритм: Функция learnis рассчитывает изменение вектора весов dw для данного нейрона в зависимости от векторов входа р, выхода а, весов w и параметра скорости настройки 1г в соответствии с правилом Гроссберга настройки по вектору входа [14]: dw = lr*a*(p'-w). Сопутствующие функции: LEARNK, LEARNOS, ADAPT, TRAIN. LEARNOS I Функция настройки по вектору выхода Синтаксис: [dW.LS] = Iearnos(W1P,Z,N1A,T,E,gW,gA1D,LP.Is) info = learnos(code) Описание: Функция learnos предназначена для настройки весов слоя Кохонена по вектору выхода (правило Гроссберга) и является альтернативой функции настройки learnis. Параметры процедуры learnos представлены в следующей таблице. Параметр LP.tr Назначение Скорость настройки, по умолчанию 0.5 Применение функции: Функция настройки параметров сети learnos используется при создании слоев Кохонена с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к настройке, необходимо: • установить свойство сети net.trainFcn равным 'trainr1. Это автоматически установит значения параметров обучения, соответствующие функции trainr; 396 Нейронные сети. МАТ1ЛВ 6
• установить свойство сети net.adaptFcn равным 'trains'. Это автоматически установит значения параметров адаптации, соответствующие функции trains; • установить свойства nct.inputWeights{ij}.learnFcn, riet.layerWeights{ij}.learnFcn равными 'leamos'. Для того чтобы фактически обучить или адаптировать сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения или адаптации; • применить функцию train или adapt. Пример: Определим слой Кохонена с двухэлементным входом и тремя нейронами со случайными массивами входа р, весов w и выхода а; зададим также параметр скорости настройки In р = razid(2,l); а = rand(3,l); w = rand(3,2); lp.lr = 0.5; Вызов функции leamos можно организовать следующим образом, поскольку не все входные аргументы требуются для вызова этой функции: dW = learnos<w,p, П ,[],а, [],[] ЛЫ1ЛЫР, С]) aw = -0.0738 -0.0248 0.0140 0.0048 0.4146 0.0319 Алгоритм: Функция learnos рассчитывает изменение весов dW для слоя Кохонена в зависимости от векторов входа р, выхода а, весов w и параметра скорости настройки 1г в соответствии с правилом Гроссберга настройки по вектору выхода [14]: dw = lr * (а - w) * р". Сопутствующие функции: LEARNIS, LEARNK, ADAPT, TRAIN. LEARNSOM I Функция настройки весов карты Кохонена Синтаксис: [dW.LS] = learnsom(W,P,Z,N,A1T.E,gW,gA,D,LP,ls) info = learnsom (code) Описание: . Функция leanrnsom предназначена для настройки весов карты Кохонена Параметры процедуры learnos представлены в следующей таблице. Л. Формирование моделей нейронных сетей 397
■ Параметр ■ -. ''-л- LP.orderjr1*';- - LP.brderisteps • LP.tuneJr ■ ' LP.tune^nd "■.-•';■ •: ■r: --.■•':■ г,[•.s•'.-:r- -!■:v:- ,". ■ Назначение, ■' ■.•'-.--■..-.- '.'-- r ■ Скорость настройки на этапе упорядочения, по умолчанию 0.9 '"'.'-' Число шагов на этапе упорядочения, по умолчанию 1000 '■"-- Скорость настройки на этапе подстройки, по умолчанию 0.02 ' Размер окрестности нейрона-победителя, по умолчанию-1: ; "Ш Прщенежё функции;^. ■.^■:-:- •■-■-,■.■-.• V = ; — '■.*-■;■ ■■ .;,-"'.-v;v::-: ■.-'-' ч >-•-,г ■*-v-"- *; -, Функция настройки параметров сети leanrnsom используется при созданий слоев Кохонена с помощью метода newsom, а также при формировании сетей с атрибутами?^ определяемыми пользователем. .. Для того чтобы подготовить сеть к настройке, необходимо:/ ., -.-; Щ • '" установить свойство сети nettrairiFcn' равным'trainr'. Это автоматически установи^ значенияпарамётро^обучёнйя, соответствующими фунедий Irairir;''' '"',"" " \--Щ ~- •'■■-■ установить свойство сети netadapiFcn равным 'trains':-Это автоматически установитйЦ . значения параметров адаптации, соответствующими функции"trains;1 '.„. ,Щ • :■ установить свойства net.inputWeights{ij}.leamFcn,.. netlayerWeights{ij}.leamFcn^ i . ... paBHHMH.-'IeanmsomV. .у ;..-";;.■ \„ ..,-., .-.у .-.- .. ... - ■-,..., ,- --. ""*" Для того чтобы фактически обучить или адаптировать сеть, необходимо: ■". • инициализироватьнейреннуюхеть;'- :'-; .,: ..":■; ;...М;-..,4;"л,..;-- - :-:;> •. присвоить, если это необходимо, требуемые значения параметрам обучения или:^ адаптации; : ... .-"'. '.У.-'.у''-'"" '.'-.,-," ,,. Щ$ • применить функцию train или adapt г.-':!"' '■:-: 2.' -Ф Примеры: ''.:■■ ■ ■ .". ■'"-' ■'■."" ' _:: ""■}"~" -$$ \ Определим карту Кохонена с расположением нейронов на гексагональной сетке раз-- ~Щ мера 2x3, а также расстояния между ними; зададим случайные ^ассивы'входар, вькода ay-Jj и весов ,w, а также параметры процедуры настройки:г '"""".' 'V"'. 'У;': V ■ ■ -£я р = rand (2, и;, ■■.'•■.■ '■'"■"..'- ■_- ''.*'"'1V; '''■';;'/.'.'!_ .; *■ . а я rand(6>l); / ;'.v^ - --, уд . л:....ул -■-■■-■ -.--. . ■--. s -■■'-,■ ^-...- = w = rand{6,2); - . ■ - ров = hextop(2,3); - - d=* llnkdist(pos)';''~:-'!ч- ■••'* ^>:' *"('*■ :' . ■_.:'.. ":К.'.■;;■';-г.\>Л lp.order_lr. = 0.9; , у -.'■ '""" " ---■.■ lp.ordar_stepe = 1000; ,_■-.. ■. lp.tune_lr'= 0.02; -_;., ,-■ ;_„■; .. ■ ..,-,,.-.■ ;■ у ..,-; 1: ... '.. -,/,- -ti ... ,-.. ■ :r.':;__ 'Ip.tUne^nd а 1; "У '-'-'~l-\ '■"■ ■ ; '"\.",. '"..'. '}''■'■■'. ■ ц , Вызов функции learnsom можно организовать следующим образом, поскольку не все .'J*. входные аргументы требуются для вызова этой функции: .--.'. .1 ■' 'is -'п, .;......%;.;.^j..,,,,., ',.;уЛ;: ;.f" .'-v.;•..-.. -:-/., -.ч-—'..--^-----" WW, la] в. learnsom (w,p, [ J, [] ,a> ПM ],[],[], d, lp. Is) 398 Нейронные, сети. MATLAB 6
ж[^" ^Щ"^ 1||г';У - ■&Щ'' ?Щё /■• ^ffl .-'■-• '~?*Ш "■" ;Ш •, ^ч? ^""' ш dW = 0.2217 -v :; 0/8432.- 0.6194'^ ■0.2836.. 0.0469 ■:- ■■/;^/'0:3'090'! Is'-= ..,'.. : »«."■■■ •■'". step; 'nd_max;. A'nvnniiriiiiy'- .'■ --.Х-.'' 0.0945- " !-'0":29I2"':;-".-'-;': • -1:3035 : -- .-1.2292 ;.:;.... -0.2965 ,- .";' ■v-o;$65Y '■ -.^' '-'J- -':-■ ■--'"-:■■"«.*"■-"-■•" l'- ;."-.■ ■':-■.-=-. X;..^.*><* "Vi'Vi'jL'-u '-Г"*:; ■: V !:='■"=■;■■; -'-!„, v. ;- :'.' ■ '■ A-: '■ ..-■-. •■ >' '/■■'■'•-■ 4 :!:'";!">У'. V ' '. У,-:. Ц»'--"оф-Й.- :*Л ;-: .::< -/::•.;;■>:-. :./.•■; :"•■''■ '•■.■.-'•.;<.-■'..■- I 1 ФункцияЪапшпвь^^ ; массива параметров боседотва^-ипфамегграскоро'ста настройки /г: - - . :. ""W=/r*A2*(p,-w)'\._.;";■ ";^;J'"x^'-^A'"3>i;v\V^^W.! v S " ЭлешЙш^ ности нейрона-победителя i, вычисляются следую1ВДрбра^р^:^,..;;.^г/-•. &;.,■-!;, -^ • , ■- :': ■•' ■"•"■"■[и «(«,«)-u"■■"''"f ':". " "'...■'-,■;,.-. - '; ■ .-•^■-i': • м^-размер окрестности нейрона-победителя. 1 ч;.1 ;: •.;.,.....;,■. ПроцессобучешикаргаКохбненав^^ ^Наэтихэтапахкорректируютсяпараметр^^с Параметр к изменяется от 3Ha4etooideV_lr до Ше^, а размер окрестаости ^-отма^си- мального до значения, равного 1у .>,;.-•'. i-. Al \V-.T -'.;.; 'д.1 v;-;"'"-;Л"~'4,:. ■-. ! ;"': -V -.-■.- Сопутствующие функции:. ADAPT, TRAIN; ,.: . . .. ;,:",-. \ ■■ -''"'■";";-; ■ . функция настройки по ЬравилуХебба [LEARNH Синтаксис: — '•■ -. ■-..-. -. -,'\'.' V ■" ."•- '"_ ■". '.' ®«:-;V # Описание: .;.. ......... .'. S: .../,"•',. . функхиЫеапЛпредн^^ вилуХебба.. ;. '>-..*-•;_ о., ".', s ■ -■--,;i "" «" « "i"-*"i '5 ^n-,-.^'--" .-•^'Параметрыпроцедуре 1ё^11редставленыв'следующеитаблице.,__;.^..;- ..,.^ Параметр LP.lr Назначение? Скорость" настройки,по'умолчанию0.5/...''-■"■-.' | И\Формиррртие моделей нейронных сетей 399
Применение функции: Функция настройки параметров сети learnh используется при создании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к настройке, необходимо: • установить свойство сети nct.trainFcn равным 'trainf. Это автоматически установит значения параметров обучения, соответствующие функции trainr; • установить свойство сети net.adaptFcn равным 'trains'. Это автоматически установит значения параметров адаптации, соответствующие функции trains; • установить свойства net.inputWeights{ij}.leamFcn, net.layerWeights{ij}.learnFcn равными 'learnh'. Для того чтобы фактически обучить или адаптировать сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения или адаптации; • применить функцию train или adapt. Пример: Определим нейронную сеть с двухэлементным входом и тремя нейронами со случайными массивами входа р и выхода а; зададим также параметр скорости настройки 1г: р = rand(2,l); а - rand(3,1); lp.lr = 0.5; Вызов функции leamh можно организовать следующим образом, поскольку не все входные аргументы требуются для вызова этой функции: aw = learnh([],p, [],[],а, [] ЛЬЕЬ П, СЫрЛ] ) aw = 0.2883 0.0701 0.2309 0.0562 0.4234. 0.1030 Алгоритм: Функция leamh рассчитывает приращения весов dW в зависимости от векторов входа р, выхода а и параметра скорости настройки 1г в соответствии с обучающим правилом Хебба [19]: dW = lr*a*p\ Сопутствующие функции: LEABNHD, ADAPT, TRAIN. MAXLINLR Максимальное значение параметра скорости настройки для линейной сети Синтаксис: lr = maxIinlr(P) lr = maxlinlr(P,'bias') 400 Нейронные сети. MATLAB б
Описание: Функция maxlinlr применяется для расчета максимального значения параметра скорости настройки для линейной сети. Функция lr = maxlinlr(P) возвращает максимальный параметр скорости настройки для линейной сети без смещения, которая обучается только по векторам, входящим в массив векторов входа Р размера RxQ. Функция 1г=maxlinlrfP, 'bias') возвращает максимальный параметр скорости настройки для линейной сети со смещением. Пример: Зададим числовой массив входа, состоящий из четырех двухэлементных векторов, и вычислим максимальные значения параметра скорости настройки для линейной сети без смещения и со смещением: Р « [ 12-4 7; 0.1 3 10 6]; lr = maxlinlr(P) % Без смещения 1г = 0.0069 lr = maxlinlr(Р,'bias') % Со смещением lr = 0.0067 Сопутствующие функции: LEARNWH. LEARNHD I Функция настройки по правилу Хебба с затуханием Синтаксис: [dW.LS] = learnhd(W,P,Z,N1A1TtE,gW.gA1D1LP1LS) info - learnhd(code) Описание: Функция learnhd предназначена для настройки весов нейронной сети по методу Хеоба с затуханием. Параметры процедуры learnhd представлены в следующей таблице. Параметр LP.Ir LP.dr Назначение Скорость настройки, по умолчанию 0.5 Параметр затухания, по умолчанию 0.01 Применение функции: Функция настройки параметров сети learnhd используется при создании сетей с атрибутами, определяемыми пользователем. Для того чтобы подготовить сеть к настройке, необходимо: • установить свойство сети nettrainFcn равным 'trainr'. Это автоматически установит значения параметров обучения, соответствующие функции trainr; • установить свойство сети net.adaptFcn равным 'trains1. Это автоматически установит значения параметров адаптации, соответствующие функции trains; • установить свойства net.inputWeights{ij}.learnFcn, net.layerWeights{ij}-leamFcn равными 'learnhd'. ^ 11. Формирование моделей нейронных сетей ^01
Для того чтобы фактически обучить или адаптировать сеть, необходимо: • инициализировать нейронную сеть; • присвоить, если это необходимо, требуемые значения параметрам обучения или адаптации; • применить функцию train или adapt. Пример: Определим сеть со случайными входом р, выходом а и весами w для слоя с двухэлементным входом и тремя нейронами; зададим также параметры скорости настройки 1г и затухание dr. р = rand(2,1); а = rand{3,1); w = raxid(3,2) ; Ip.lr = 0.5; lp.dr = 0.05; Вызов функции lcarnhd можно организовать следующим образом, поскольку не все входные аргументы требуются для вызова этой функции: dW = learxibd(w,p, ПЛЬа, [ЬПЛЬП, П,1рЛ]) aw = -0.0237 -0.0327 0.2734 0.1787 0.1234 0.0812 Алгоритм: Функция learnhd рассчитывает приращения весов dW в зависимости от векторов входа р, выхода а, весов w, а также параметра скорости настройки 1г и параметра затухания dr в соответствии с обучающим правилом Хебба с затуханием [19]: dW = lr * а * (p'-w) - dr * w. Сопутствующие функции: LEARNH, ADAPT, TRAIN. 11.6.1. Функции одномерного поиска Функции поиска одномерного экстремума используются при расчете весов и смещений в процессе обучения с применением методов сопряженного градиентам квазиньютоновых методов. Рассмотренные алгоритмы обучения и настройки ~ это стратегии, которые обеспечивают минимизацию некоторого функционала качества. В процессе работы этих алгоритмов, как правило, возникает задача одномерного поиска минимума вдоль заданного направления. Это могут быть направления антиградиента или сопряженные направления. В рамках ППП Neural Network Toolbox используется 5 функций одномерного поиска. При работе того или иного алгоритма они задаются параметром srchFcn, который определяет имя функции поиска. Для многих процедур эта функция задается по умолчанию, но она может быть изменена по желанию пользователя при определении процедуры обучения или функции настройки. 402 Нейронные сети. MATLAB б
Аргументы входов и выходов для всех функций одномерного поиска одинаковы и имеют следующие значения. Входные аргументы: net - нейронная сеть; X - вектор текущих параметров сети; Pd - векторы входа с учетом запаздывания; Т1 - векторы целей для слоя; Ai - начальные значения на ЛЗ; Q - количество реализаций векторов входа; TS - шаг по времени; dX ~ вектор приращений настраиваемых параметров; gX - вектор градиента функционала по настраиваемым параметрам; реп* -значение функционала качества для текущего вектора настраиваемых параметров X; dperf - производная функционала качества в текущей точке X в направлении dX; delta - начальный размер шага; tol - допустимая точность поиска экстремума; chjperf - изменение значения функционала качества на предшествующем шаге. Выходные аргументы: А - размер шага, доставляющий минимум функционалу качества; gX - градиент в точке минимума; perf - значение функционала качества в точке минимума; retcode - трехэлементный код завершения. Первые 2 элемента определяют, сколько вычислений функции потребовалось на каждом из двух этапов минимизации; третий элемент - код возврата, который фиксирует следующие события: Код возврата 0 1 2 3 Событие Нормальное завершение Использован минимальный шаг Использован максимальный шаг Условие выбора шага не выполнено delta - новое значение шага поиска; tol - обновленная допустимая точность при поиске. Используемые массивы имеют следующие размеры: Pd -массив ячеек размера NoxNixTS, каждый элемент которого Pd{i,j,ts) -числовой массив размера DijxQ; Т1 - массив ячеек размера NlxTS, каждый элемент которого TI {i,ts} - числовой массив размера VixQ; Ai - массив ячеек размера NlxLD, каждый элемент которого Ai {i,k} - числовой массив размера SixQ. Параметры описания массивов ячеек и их связь с параметрами сети представлены в следующей таблице. /Л Формирование моделей нейронных сетей 403
Параметр описания Ni __. " No "" LD _____ ___ Vi _ Параметр сети net.num inputs net.num Layers net.nurnOutputs net.nu mLaye rDelays net.inputs{i}.size netlayers{i}.size net.targets{i}.size Назначение Количество векторов входа Количество слоев Количество выходов Максимальные значения задержек для слоев Количество элементов i-ro вектора входа Количество нейронов /-го слоя Количество элементов i-го вектора цели Произведение длины вектора входа слоя i на максимальное значение задержки от слоя i к спою/. Ri * lcngth(net.inputWeighls{i, j}.delays) SRCHGOL Одномерная минимизация методом золотого сечения Синтаксис: [A,gX,perf,retcode,delta,tol] = srchgol(net,X,Pd,Ti,Ai,QITS,dX,gX1perf1dperf,delta,tolIch_perf) Описание: Функция srchgol реализует одномерный поиск минимума функционала в заданном направлении. Программа использует метод золотого сечения. Процедура srchgol имеет следующие параметры: Параметр alpha bmax scal_toi Назначение Коэффициент, определяющий порог уменьшения критерия качества Максимальный размер шага Параметр, связывающий погрешность tol с шагом delta Значения для этих параметров устанавливаются по умолчанию при выборе одной из следующих функций обучения: traincgf, traincgb, tramegp, trainbfg, trainoss. Применение функции: Функция одномерного поиска srchgol используется при обучении и настройке сетей с помощью методов newff, newcf, newelm. Для того чтобы подготовить сеть к обучению, например, с помощью функции traincgf, используя функцию srchgol, следует: • установить свойство net.trainFcn равным 'traincgf. Это автоматически установит свойство net.trainParam, соответствующее параметрам функции traincgf; • установить свойство net.trainParam.searchFcn равным 'srchgol'. 404 Нейронные сети. MATLAB 6
Пример: Заданы векторы входа р и целей t, требуется сформировать нейронную сеть, выходы которой близки к заданным целям: Р = [012345]; t« [0 00111]; Выберем архитектуру двухслойной сети с прямой передачей сигнала; зададим диапазон входов от 0 до 10, первый слой имеет 2 нейрона с функцией активации tansig, второй - J нейрон с функцией активации logsig. Используем функции обучения traincgf и поиска одномерного экстремума srehgol: net = newf£([0 10],[2 1],{"tansig","logsig1},"traincgf■); net.trainParam.searchFcn = 'srehgol'; ne t. trainParam* epochs = 50; net.trainParam.show =10; net.trainParam.goal = 0.0001; net = train(net,p,t); a = sim(net,p) a = 0.0041 0.0042 0.0133 0.9840 0.9983 0.9984 Алгоритм: Функция srehgol находит минимум функционала ошибки обучения в направлении dX, используя метод золотого сечения, реализованный в виде алгоритма, предложенного в работе [41]. Сопутствующие функции: SRCHBAC. SRCHBRE, SRCHCHA, SRCHHYB. SRCHBRE I Одномерная минимизация методом Брента Синтаксис: [A,gX,perf,retcode,delta,tol] = srchbretnet.X.Pd.TI.Ai.Q.TS.dX.gX.perf.dperf.delta.tol.chjDerf) Описание: Функция srehbre реализует одномерный поиск экстремума функционала в заданном направлении. Программа использует метод Брента, который является комбинацией метода золотого сечения и квадратичной интерполяции. Процедура srehbre имеет следующие параметры: Параметр . alpha beta bmax scaLtol Назначение Коэффициент, определяющий порог уменьшения критерия Коэффициент, определяющий выбор шага Максимальный размер шага Параметр, связывающий погрешность to! с шагом delta качества ___„ Значения для этих параметров устанавливаются по умолчанию при выборе одной из следующих функций обучения: traincgf, traincgb, traincgp, trainbfg, trainoss. П. Формирование моделей нейронных сетей 405
Применение функции: Функция одномерного поиска srehbre используется при обучении и настройке сетей с помощью методов newff, newef, newclm. Для того чтобы подготовить сеть к обучению, например, с помощью функции traincgf, используя функцию srehbre, следует: • установить свойство net.trainFcn равным 'traincgf. Это автоматически установит свойство nct.trainParam, соответствующее параметрам функции traincgf; • установить свойство nct.trainParam.scarchFcn равным 'srehbre'. Функция srehbre может использоваться с любой из перечисленных обучающих функций: traincgf, trainegb, traincgp, irainbfg, trainoss. Пример: Заданы векторы входа р и целей t, требуется сформировать нейронную сеть, выходы которой близки к заданным целям: р = [0 1 2 3 4 5]; t= [0 00111]? Выберем архитектуру двухслойной сети с прямой передачей сигнала; зададим диапазон входов от 0 до 10, первый слой имеет 2 нейрона с функцией активации tansig, второй- 1 нейрон с функцией активации logsig. Используем функции обучения traincgf и поиска одномерного экстремума srehbre: net = newff([0 10],[2 1],{'tansig',■logsig'},"traincgf•); net.trainParam. searchFcn = 'srebbre'; net.trainParam. epochs = 50; net.trainParam. show =10; net.trainParam.goal = 0.0001; net = train(net,p,t); a = sim{net,p) a = 0.0013 0.0013 0.0104 0.9954 0.9981 0.9981 Алгоритм: Функция srehbre находит минимум ошибки обучения в направлении dX, используя алгоритм Брснта, который является комбинацией метода золотого сечения и квадратичной интерполяции [4]. Сопутствующие функции: SRCHBAC, SRCHCHA. SRCHGOL, SRCHHYB. SRCHHYB I Одномерная минимизация на основе гибридного метода Синтаксис: [A,gX,perf,retcode,de[ta,tol] = srchhyb(net,XlP,T,QITS,dX,gXlperfldperf,delta,tol1ch_perf) Описание- Функция srehhyb реализует одномерный поиск минимума функционала в заданном направлении. Программа использует гибридный метод половинного деления и кубической интерполяции. 406 Нейронные сети. MATLAB 6
Процедура srehhyb имеет следующие параметры: Параметр alpha beta bmax scaie„tol Назначение Коэффициент, определяющий порог уменьшения критерия качества Коэффициент, определяющий выбор шага Максимальный размер шага Параметр, связывающий погрешность tol с шагом delta Применение функции: Функция одномерного поиска srehhyb используется при обучении и настройке сетей с помощью методов newff, newef, newclm. Для того чтобы подготовить есть к обучению, например, с помощью функции traincgf, используя функцию srehhyb, следует: • установить свойство net.trainFcn равным 'traincgf. Это автоматически установит свойство net.trainParam, соответствующее параметрам функции traincgf; • установить свойство net.trainParam.searchFcn равным 'srehhyb'. Функция srehhyb может использоваться с любой из следующих обучающих функций: traincgf, traincgb, traincgp, trainbfg, trainoss. Пример: Заданы векторы входа р и целей t, требуется сформировать нейронную сеть, выходы которой близки к заданным целям: р = [012345]; t = [0 0 0 1 1 Ц; Выберем архитектуру двухслойной сети с прямой передачей сигнала; зададим диапазон входов от 0 до 10, первый слой имеет 2 нейрона с функцией активации tansig, второй - 1 нейрон с функцией активации logsig. Используем функции обучения traincgf и поиска одномерного экстремума srehhyb: net =new£f([0 10],[2 1],{'tansig',«logsig»}.'traincgf'); net.trainParam.searchFcn = 'srehhyb'; net.trainParam.epochs = 50; i net.trainParam.show = 10; net.trainParam.goal = 0.0001; I net я train(net,prt); j a = sim(net,p) ] a = 0.0000 0.0000 0.0001 1.0000 1.0000 1.0000 Алгоритм: 1 Функция srehhyb находит минимум ошибки обучения в направлении dX, используя 1 гибридный алгоритм, который является комбинацией метода золотого сечения и кубической интерполяции [41]. Сопутствующие функции: SRCHBAC, SRCHBRE, SRCHCHA, SRCHGOL. //. Формирование моделей нейронных сетей 407
SRCHCHA I Од н ом ер пая м ии и м из ация и а основе метода Чараламбуса Синтаксис: [A,gX,perf,retcode,delta,tol] = srchcha(net,X,Pd,Tl1Ai,Q1TStclX1gX]perf,dperf,delta1tol,ch_perf) Описание: Функция srchcha реализует одномерный поиск минимума функционала в заданном направлении. Программа использует метод Чараламбуса. Процедура srchcha имеет следующие параметры: Параметр 1 III scalejol Назначение Коэффициент, определяющий порог уменьшения критерия качества Коэффициент, определяющий выбор шага Параметр, регулирующий изменение критерия качества Параметр, связывающий погрешность tol с шагом delta Применение функции: Функция одномерного поиска srchcha используется при обучении и настройке сетей с помощью методов newff, newcf, newelm. Для того чтобы подготовить сеть к обучению, например, с помощью функции traincgf, используя функцию srchcha, следует: • установить свойство nettrainFcn равным 'traincgf. Это автоматически установит свойство net.trainParam, соответствующее параметрам функции traincgf; • установить свойство net.trainParam.searchFcn равным 'srchcha'. Функция srchcha может использоваться с любой из следующих обучающих функций: traincgf, traincgb, traincgp, trainbfg, trainoss. Пример: Заданы векторы входа р и целей t, требуется сформировать нейронную сеть, выходы которой близки к заданным целям: р = [012345]; t = [О 0 0 1 1 1]; Выберем архитектуру двухслойной сети с прямой передачей сигнала; зададим диапазон входов от 0 до 10, первый слой имеет 2 нейрона с функцией активации tansig, второй- 1 нейрон с функцией активации logsig. Используем функции обучения traincgf и поиска одномерного экстремума srchcha: net = newff{[0 10], [2 1],{'tansig■,'logsig•},'traincgf *); net.trainParam.searchFcn = 'srchcha'; net.trainParam.epochs =50; net.trainParam.show = 10; net.trainParam.goal = 0.O001; net =s train (net #p,t) ; a = sim(net,p) a = 0.0020 0.0021 0.0115 0.9897 0.9972 0.9973 408 Нейронные сети. MATLAB 6
Алгоритм: Функция srchhyb находит минимум ошибки обучения в направлении dX, используя метод Чараламбуса [8]. Сопутствующие функции: SRCHBAC, SRCHBRE, SRCHGOL, SRCHHYB. SRCHBAC Одномерная минимизация на основе метода перебора с возвратами Синтаксис: [a.gX.perf.retcode.delta.tol] = srchbac(net,X,Pd,TI,AiIQ1TS,dX1gXIperf,dperfIdeltaItol,ch_perf) Описание: Функция srchbac реализует одномерный поиск минимума функционала в заданном направлении. Программа использует метод перебора с возвратами. Процедура srchbac имеет следующие параметры: Параметр alpha beta lowjim upjim maxstep minstep scale_tol Назначение Коэффициент, определяющий порог уменьшения критерия качества Коэффициент, определяющий выбор шага Нижняя граница изменения шага Верхняя граница изменения шага Максимальное значение шага Минимальное значение шага Параметр, связывающий погрешность tol с шагом delta Применение функции: Функция одномерного поиска srchbac используется при обучении и настройке сетей с помощью методов newff, newcf, newelm. Для того чтобы подготовить сеть к обучению, например, с помощью функции traincgf, используя функцию srchbac, следует: • установить свойство nettrainFcn равным 'traincgf. Это автоматически установит свойство net.trainParam, соответствующее параметрам функции traincgf; • установить свойство neUrainParam.searchFcn равным 'srchbac'. Функция srchcha может использоваться с любой из следующих обучающих функций: traincgf, traincgb, traincgp, trainbfg, trainoss. Пример: Заданы векторы входа р и целей t, требуется сформировать нейронную сеть, выходы которой близки к заданным целям: р= [0 1234 5]; t = [00011 lj; П. Формирование моделей нейронных сетей 409
Выберем архитектуру двухслойной сети с прямой передачей сигнала; зададим диапазон входов от 0 до 10, первый слой имеет 2 нейрона с функцией активации tansig, второй - 1 нейрон с функцией активации logsig. Используем функции обучения traincgf и поиска одномерного экстремума srehfaac: net = newff([0 10], [2 1],{'tansig1,'logsig'},'traincgf■); net.trainParam.searchFcn = 'srehbac'; net.trainParam»epochs = 50; net.trainParam.show = 10; net.trainParam.goal = 0.0001; net = train(net,p,t); a = sim{net,p) a = 0.0024 0.0025 0.0119 0.9851 0.9951 0.9952 Алгоритм: Функция srehbac находит минимум функционала качества обучения в направлении dX, используя алгоритм перебора с возвратами [9]. Сопутствующие функции: SRCHBRC, SRCHCHA, SRCHGOL, SRCHHYB. 11.7. Масштабирование и восстановление данных В этом разделе описаны функции масштабирования, препроцессорной обработки и восстановления данных, применяемые для повышения эффективности формирования нейронных сетей. PREMNMX Приведение данных к интервалу [-1 1] Синтаксис: [pn,minp,maxp,tn,mint,maxt] = premnmx(p,t) [pn.minp.maxp] = premnmx(p) Описание: Функция premnmx выполняет препроцессорную обработку обучающей последовательности путем приведения значений элементов векторов входа и цели к интервалу [-1 1]. Входные аргументы: р - матрица векторов входа размера RxQ; t - матрица векторов целей размера SxQ. Выходные аргументы: pn ~ матрица нормированных векторов входа размера RxQ; minp - вектор минимальных элементов входа размера Rxl; maxp - вектор максимальных элементов входа размера Rx 1; tn - матрица нормированных векторов целей размера SxQ; mint - вектор минимальных элементов векторов целей размера Sx]; maxt - вектор максимальных элементов векторов целей размера Sxl. 410 Нейронные сети. MATLAB б
Пример: Следующие команды нормализуют приведенный набор данных так, чтобы значения входа и цели попадали в интервал [-1,1]: р = £-10 -7.5 -5 -2.5 0 2.5 5 7.5 10]; t = [0 7.07 -10 -7.07 0 7.07 10 7.07 0] ; [pn, minp, maxp, tn, mint, maxt] = premnmx(p, t) pn = -1.0000 -0.7500 -0.5000 -0.2500 0 0.2500 0.5000 0.7500 1.0000 minp = -10 maxp = 10 tn = 0 0.7070 -1.0000 -0.7070 0 0.7070 1.0000 0.7070 0 mint = -10 maxt = 10 Если требуется нормировать только вектор входа, то можно использовать следующий оператор: [pn,minp,maxp] = premnmx(p); Алгоритм; Приведение данных к диапазону [-11] выполняется по формуле рп = 2 * (р - minp)/(maxp - minp) - 1. Сопутствующие функции: PRESTD. PREPCA, POSTMNMX. PRESTD Приведение данных к нормальному закону распределения Синтаксис: [pn.meanp.stdp.tn.meant.stdt] = prestd(p.t) [pn.meanp.stdp] = prestd{p) Описание: Функция prestd выполняет препроцессорную обработку обучающей последовательности путем приведения значений элементов векторов входа к нормальному закону распределения с нулевым средним и дисперсией, равной 1. Входные аргументы: р - матрица векторов входа размера RxQ; t - матрица векторов целей размера S*Q. Выходные аргументы: рп - матрица приведенных векторов входа размера RxQ; meanp - вектор средних значений векторов входа размера Rxl; stdp - вектор среднеквадратичных отклонений векторов входа размера Rxl; tn - матрица приведенных векторов целей размера S x Q; meant - вектор средних значений векторов целей размера Sxl; stdt - вектор среднеквадратичных отклонений векторов целей размера Sxl. П. Формирование моделей нейронных сетей 411
Пример: Задана следующая обучающая последовательность векторов входа и целей. Требуется выполнить се приведение к нормальному закону распределения с параметрами [0 1]. р = [-0.92 0.73 -0.47 0.74 0.29; -0.08 0.86 -0.67 -0.52 0.93]; t = [-0.08 3.4 -0.82 0.69 3-U; [pn,meanp#stdp,tn,meant,stdt] = prestd{p,t) pn = 0.2910 1.0950 -1.3389 -0.2439 meanp = 0.0740 0.1040 stdp = 0.7424 0.7543 0.8836 -0.7328 0.8971 1.0022 -1.0261 -0.8272 tn = -0.7049 1.1285 -1.0947 -0.2992 meant = 1 stdt = 1 2580 8982 ■ 0.9704 Если задана только последовательность векторов входа, то следует применить оператор [pn,meanp,stdp] = prestd(p); Алгоритм: Приведение данных к нормальному закону распределения с параметрами [0 1] выполняется по формуле рп = (р - meanp)/stdp. Сопутствующие функции: PREMNMX, PREPCA. PREPCA Выделение главных компонентов Синтаксис: [ptrans.transMat] = prepca{P,min_frac) Описание: Функция ргерса выполняет препроцессорную обработку обучающей последовательности, применяя факторный анализ. Это позволяет преобразовать входные данные так, чтобы векторы входа оказались некоррелированными. Кроме того, может быть уменьшен и размер векторов путем удержания только тех компонентов, дисперсия которых превышает некоторое заранее установленное значение min_frac. Входные аргументы: Р - матрица центрированных векторов входа размера RxQ; min„frac - нижняя граница значения дисперсии удерживаемых компонентов. Выходные аргументы: ptrans - преобразованный набор векторов входа; transMat - матрица преобразований. 412 Нейронные сети. MATLAB 6
Примеры: Зададим массив двухэлементных векторов входа и выполним их факторный анализ, удерживая только те компоненты вектора, дисперсия которых превышает 2% общей дисперсии. Сначала с помощью функции prestd приведем входные данные к нормальному закону распределения, а затем применим функцию ргерса. Р = [-1.5 -0.58 0.21 -0.96 -0.79; -2.2 -0.87 0.31 -1.4 -1.2]; [pn,meanp,stdp] = prestd(P) рп = -1.2445 0.2309 1.4978 -0.3785 -0.1058 -1.2331 0.2208 1.5108 -0.3586. -0.1399 meanp = -0.7240 -1.0720 stdp = 0.6236 0.9148 [ptrans,transMat] = prepca(pn,0.02) ptrans = 1.7519 -0.3194 -2.1274 0.5212 0.1738 transMat = -0.7071 -0.7071 Поскольку в данном примере вторая строка массива Р почти кратна первой, то в результате факторного анализа преобразованный массив содержит только одну строку. Алгоритм: Функция ргерса для выделения главных компонентов использует процедуру SVD- разложения матрицы центрированных векторов входа по сингулярным числам. Векторы входа умножаются на матрицу, строки которой являются собственными векторами ковариационной матрицы векторов входа. В результате получаем векторы входа с некоррелированными компонентами, которые упорядочены по величине дисперсий. Те компоненты, дисперсия которых не превышает заданное значение, удаляются; в результате сохраняются только главные компоненты [22]. Предполагается, что входные данные центрированы с помощью функции prestd так, что их среднее значение равно 0, а дисперсия - 1. Сопутствующие функции: PRESTD, PREMNMX. POSTMNMX Восстановление данных после масштабирования функцией premnmx Синтаксис: [p,t] = postmnmxfpn.minp.maxp.tn.mint.iTiaxt) р = postmnmx(pn,minp,maxp) Описание: Функция postmnmx выполняет постпроцессорную обработку, связанную с восстановлением данных, которые были масштабированы к диапазону [-1 I] с помощью функции premnmx. / /. Формирование моделей нейронных сетей 413
Входные аргументы: рп - матрица нормированных векторов входа размера RxQ; minp - вектор минимальных элементов исходного массива р размера Rxl; maxp - вектор максимальных элементов исходного массива р размера Rxl; tn - матрица нормированных векторов целей размера SxQ; mini - вектор минимальных элементов исходного массива t размера Sx 1; maxl - вектор максимальных элементов исходного массива t размера Sx I. Выходные аргументы: р - восстановленная матрица векторов входа размера RxQ; t - восстановленная матрица векторов целей размера SxQ. Пример: В этом примере сначала с помощью функции premnmx выполняется масштабирование обучающей последовательности к диапазону [-1 1 ], затем создается и обучается нейронная сеть прямой передачи, выполняется ее моделирование и восстановление выхода с помощью функции postmnmx. Р = [-0.92 0.73 -0.47 0.74 0.29; -0-08 0.86 -0.67 -0.52 0.93]; t = [-0.08 3.40 -0.82 0.69 3.10]; [pnf minp,maxp, tn,mint, maxt] = premnmx (P, t) ; net = newff(minmax(pn),[5 1],{'tansig * 'purelin1},■trainlm')j net = train(net,pn,tn); an = sim(net,pn) an = -0.6493 1.0000 -1.0000 -0.2844 0.8578 a = postmnmx (an, mint, maxt) a = -0.0800 3.4000 -0.8200 0.6900 3.1000 Восстановленный вектор выхода нейронной сети совпадает с исходным вектором целей. Алгоритм: Восстановление данных, масштабированных к диапазону [-11], выполняется по формуле р = 0.5*(pn + I)*(maxp - minp) + minp. Сопутствующие функции: PREMNMX, PREPCA, POSTSTD. POSTSTD I Восстановление данных после применения функции prestd Синтаксис: [p,t] = poststd{pn,meanp,stdp,tn.rneant,stdt) р = poststd(pn,meanp,stdp) Описание: Функция poststd выполняет постпроцессорную обработку, связанную с восстановлением данных, которые были масштабированы к нормальному закону распределения с параметрами [0 1 ] с помощью функции prestd. 414 Нейронные сети. MATLAB 6
1 Входные аргументы: рп - матрица масштабированных векторов входа размера RxQ; mcanp - вектор средних значений исходного массива входов размера Rx ]; stdp - вектор среднеквадратичных отклонений исходного массива входов размера Rxl; tn - матрица масштабированных векторов целей размера SxQ; mcanl - вектор средних значений массива целей размера Sxl; stdt - вектор среднеквадратичных отклонений массива целей размера Sx]. Выходные аргументы: р - восстановленная матрица векторов входа размера RxQ; t - восстановленная матрица векторов целей размера SxQ. Примеры: В этом примере сначала с помощью функции prestd выполняется масштабирование обучающей последовательности к нормальному закону распределения с параметрами [О 1], затем создается и обучается нейронная есть прямой передачи, выполняется се моделирование и восстановление выхода с помощью функции poststd. р = [-0.92 0.73 -0.47 0.74 0.29; -0.08 0.86 -0.67 -0.52 0.93]; t = [-0.08 3.40 -0.82 0.69 3.10]; £pn,meanp, stdp, tn,meant,stdt] = prestd(p, t) ; net = newf t (minmax(pn), [5 1] , { • tansig* 'purelin' >, ■ trainlm') ; net = train(net,pn,tn); an = sim(net,pn) an = -0.7049 1.1285 -1.0947 -0.2992 0.9704 a = poststd (an, meant, stdt) a = -0.0800 3.4000 -0.8200 0.6900 3.1000 Восстановленный вектор выхода нейронной сети совпадает с исходным вектором целей. Алгоритм: Восстановление данных, масштабированных к нормальному закону распределения с параметрами [0 1], выполняется по формуле р = stdp * рп + теапр. Сопутствующие функции: PREMNMX, PREPCA, POSTMNMX, PRESTD. POSTREG I Постпроцессорная обработка выхода сети ~— с расчетом линейной регрессии Синтаксис: [m,b,r] = postreg(A.T) Описание: Функция [in, b, r] = postreg(A, Т) выполняет постпроцсссорную обработку выхода нейронной сети и рассчитывает линейную регрессию между вскгорами выхода и цели. I /1. Формирование моделей нейронных сетей 415 i
Входные аргументы: A- IxQ массив выходов сети, каждый элемент которого выход сети; Т - 1 xQ массив целей, каждый элемент которого целевой вектор. Выходные аргументы: га - наклон линии регрессии; b - точка пересечения линии регрессии с осью Y; г - коэффициент регрессии. Примеры: В данном примере с помощью функции prestd нормализуется множество обучающих данных, на нормализованных данных вычисляются главные компоненты, создается и обучается сеть, затем сеть моделируется. Выход сети с помощью функции poststd денормали- зустся и вычисляется линейная регрессия между выходом (ненормализованным) сети и целями, чтобы проверить качество обучения сети. Р = Е-0.92 0.73 -0.47 0.74 0-29; -0.08 0.86 -0.67 -0.52 0.931; Т = [-0.08 3.40 -0.82 0.69 3.10]; [pn,meanp,stdp,tn,iri£ant,stdt] = prestd(P,T); [рt г ans,transMat] = prерса{pn,0.02) ; net = newff (minmax(ptrans), [5 1], {' tansig* 'purelin' }, ' trainlm") ; net = train(net,ptrans,tn); an = s±m(net,ptrans) an = -0.7049 1.1285 -1.0947 -0.2992 0.9704 a = poststd(an,meant,stdt) a = -0.0800 3.4000 -0.8200 0.6900 3.1000 [m,b,r] = postreg(a,t) Ч Рис.11.61 m = 1.0000 b = 5.6881e-0l4 x = 1.0000 В данном примере параметры линейной регрессии свидетельствуют о хорошей согласованности векторов выхода нейронной сети и цели, и это означает, что синтезированная нейронная сеть успешно реализует свою функцию. ■. Best LinearF£ A» (1) ТЦ1".16о-0«1 . 25 2 . 1.5 " 1 0.5 0 -0.5 R=l \ \ \ 'у/ к : j ' ! G Data Po'mLi Boil Linear Fil A = T Рис. 11.61 Сопутствую щие функции: Р RE MN MX, P RE PCA. 416 Нейронные сети. MATLAB 6
TRAMNMX Масштабирование текущих входов к диапазону 1-1 1] Синтаксис: pn = tramnmx(p,minp,maxp) Описание: Функция pn = tramnmxfp, minp, maxp) приводит текущие входные данные к диапазону [-1 1], если известны их минимальное и максимальное значения. Эта функция применяется, когда нейронная сеть обучена с помощью данных, нормированных функцией prcmnmx. Входные аргументы: р - матрица векторов входа размера RxQ; minp - вектор минимальных элементов входа размера Rxl; maxp - вектор максимальных элементов входа размера Rx]. Выходные аргументы: рп - матрица нормированных векторов входа размера RxQ. Пример: Следующие операторы масштабируют обучающую последовательность к диапазону [-1 1], формируют и обучают нейронную сеть прямой передачи. р = [-10 -7.5 -5 -2.5 О 2.5 5 7.5 10]; t = [0 7.07 -10 -7.07 О 7.07 10 7.07 0]; [pn,minp,maxp,tn,mint,xnaxt] = premmnx(p, t) ; net = newff {minraax(pn) , [5 1], { vtansig' *purelin'}, 'trainlm'); net = train(net,pn,tn); Если в дальнейшем к обученной сети будут приложены новые входы, то они должны быть масштабированы с помощью функции tramnmx. Выход сети должен быть восстановлен с помощью функции postmnmx. р2 = [4 -7]; pn = tramnmx(p2,minp,maxp) ; an = sim(net,pn) an = 0.9552 * 0.8589 a = postmnmx(an,mint,maxt) a = 9.5518 8.5893 Алгоритм: Масштабирование текущих данных к диапазону [-11] выполняется по формуле рп = 2 * (р - minp)/(maxp ~ minp) - 1. Сопутствующие функции: PREMNMX, PRESTD, PREPCA, TRASTD, TRAPCA. TRASTD Масштабирование текущих входов к нормальному закону распределения Синтаксис: pn = trastd(p,meanp,stdp) / /. Формирование моделей нейронных сетей 417
Описание: Функция pn = trastd(p, meanp, stdp) приводит текущие входные данные к нормальному закону распределения с параметрами [0 1], если они принадлежат к множеству с известными средним значением и среднеквадратичным отклонением. Эта функция применяется, когда нейронная сеть была обучена с помощью данных, нормированных функцией prcstd. Входные аргументы: р - матрица векторов входа размера RxQ; meanp - вектор средних значений элементов входа размера Rxl; stdp - вектор среднеквадратичных отклонений элементов входа размера Rxl. Выходные аргументы: рп - матрица нормированных векторов входа размера RxQ. Пример: Следующие операторы масштабируют обучающую последовательность к нормальному закону распределения с параметрами [0 1], формируют и обучают нейронную сеть прямой передачи. р = [-0.92 0.73 -0.47 0.74 0.29; -0.08 0.86 -0.67 -0.52 0.93]; t = [-0.08 3.4 -0.82 0.69 3.1]; [pn,meanp,stdp,tn,meant,stdt] = prestd(p,t); net = newff (minmax(pn), [5 1],{"tansig" 'purelin'},'trainlm'); net - train(net,pn,tn); Если в дальнейшем к обученной сети будут приложены новые входы, то они должны быть масштабированы с помощью функции trastd. Выход сети должен быть восстановлен с помощью функции poststd. р2 = [1.5 -0.8; 0.05 -0.3]; pn = trastd(p2,meanp,stdp); an = sim(net,pn) an = 0.8262 -1.0585 a = poststd(an,meant,stdt) a = 2.8262 -0-7512 Алгоритм: Масштабирование текущих данных к нормальному закону распределения с параметрами [0 1] выполняется по формуле рп = (р - meanp)/stdp. Сопутствующие функции: PREMNMX, PREPCA, PRESTD, TRAPCA, TRAMNMX, TRAPCA I Масштабирование текущих входов ' ' ' с учетом факторного анализа Синтаксис: Ptrans = trapca{P,TransMat) 418 Нейронные сети. MATIAB 6
Описание- Функция Ptrans = trapca(P, TransMat) преобразует текущие входные данные с учетом факторного анализа, примененного к обучающей последовательности. Эта функция применяется, когда нейронная сеть была обучена с помощью данных, предварительно обработанных функциями prestd и ргерса. Входные аргументы: Р - матрица текущих векторов входа размера RxQ; TransMat - матрица преобразования, связанная с факторным анализом. Выходные аргументы: Ptrans ~ преобразованный массив векторов входа. Пример: Следующие операторы выполняют главный факторный анализ обучающей последовательности, удерживая только те компоненты, которые имеют дисперсию, превышающую значение 0.02. Р - [-1.5 -0.58 0.21 -0.96-0.79; -2.2 -0.87 0.31 -1.40 -1.20]; t = [-0.08 3.4 -0.82 0.69 3.1]; [pn,meanp,stdp,tn,meant,stdt] = prestd(P,t); [ptrans,transMat] = prepca(pn,0.02) ptrans = 1.7519 -0.3194 -2.1274 0.5212 0.1738 transMat = -0.7071 -0.7071 net = newff{minmax(ptrans),[5 1], {•tansig• 'purelin'},'trainlm"); net «= train(net,ptrans,tn); Если в дальнейшем к сети будут приложены новые входы, то они должны быть масштабированы с помощью функций trastd и trapca. Выход сети должен быть восстановлен с помощью функции poststd: р2 = [1.50 -0.8; 0.05 -0.3]; p2n = trastd(p2,meanp,stdp) ; p2trans = trapca(p2n,transMat) p2trans = -3.3893 -0.5106 an - sim(net,p2trans) an = 0.7192 1.1292 a = poststd(an,meant,stdt) a = 2.6231 3.4013 Алгоритм: Масштабирование текущих данных с учетом факторного анализа выполняется по формуле Ptrans = TransMat * P. Сопутствующие функции: PRESTD, PREMNMX, PREPCA. TRASTD. TRAMNMX. 77- Формирование моделей нейронных сетей 419
11.8. Вспомогательные функции Ниже представлены различные утилиты, которые составляют ядро ППП Neural Network Toolbox. В первую очередь это утилиты для вычисления сигналов в различных точках нейронной сети, а также функционала качества обучения сети и связанных с ним вычислений градиента, а также функций Якоби и Гессе. Значительное место занимают реализации операций с массивами и матрицами, а также утилиты графики, позволяющие отображать входные данные, топологию сетей, строить поверхности ошибок и трсктории обучения в пространстве параметров нейронной сети. Утилиты вычислений CALCA I Расчет сигналов сети на заданном интервале времени Синтаксис: [ActN,LWZ,IWZ,BZ] = calca(net,Pd,Ai1Q,TS) Описание: Функция [Ac, N, LWZ, IWZ, BZ] = calca(net, Pd, Ai, Q, TS) вычисляет сигналы в слоях нейронной сети как реакцию на входы с учетом линий задержки. Входные аргументы: net - имя нейронной сети; Pd - выходы линий задержки; Ai - начальные условия на линиях задержки по выходам слоев; Q - количество выборок для фиксированного момента времени; TS — число шагов по времени. Выходные аргументы: Ас - массив векторов, объединяющих выходы нейронов и слоя; N - входы функций активации; LWZ - массив взвешенных выходов слоя; IWZ - массив взвешенных входов; BZ - массив смещений. Пример: Создадим линейную сеть с одним входом, изменяющимся в диапазоне от 0 до 1, тремя нейронами и линией задержки на входе с параметрами [0 2 4]; в сети используется обратная связь с линией задержки [1 2] (рис. 11.62). net = xiewlin([0 l],3,[0 2 4]); net.layerConnect(1,1) = 1; net.layerWeights{l,1}.delays = [1 2]; 420 Нейронные сети. MATLAB 6
Model 8rowsei - % untitled т\тк?„x -, *:- Heuial Welwoik - -: -~ J-.' ШШ S> Delay; 1 ■h- Delay: 2 2> IW{1,1} H- ^ dotprodi v 2> <Jotptod2 a ^ dtfprod3 ■Z- LW{1,1) i-^ puteliri Рис. 11.62 Вычислим вектор запаздывающих входов Pd, если заданы реализация вектора входа Р для восьми шагов по времени, вектор начальных условий на линии задержки входов Pi: Р = {0 0.1 0.3 0.6 0.4 0.7 0.2 0.1}; Pi = {0.2 0.3 0.4 0.1}; Рс = [Pi P]; Pd = calcpd(net,8, l,Fc) Pd(:,:,!) = [3x1 double] Pd(:,:,2) = [3x1 double] Pd(:,:,8) = [3x1 double] Сформируем вектор начальных условий на линии задержки выхода слоя для каждого из трех нейронов: Ai = {[0.5; 0.1; 0.2] [0.6; 0.5; 0.2]}; Применяя функцию calca, рассчитаем сигналы в слое на каждом временном шаге TS: [Ac,N,LWZ,IWZ,BZ] = calca{net,Pd,Ai,l,8) AC = Columns 1 through 4 [3x1 double] [3x1 double] [3x1 double] [3x1 double] [3x1 double] [3x1 double] [3x1 double] [3x1 double] Columns 9 through 10 [3x1 double] [3x1 double] N = Columns 1 through 4 [3x1 double] [3x1 double] Columns 5 through 8 [3x1 double] [3x1 double] [3x1 double] [3x1 double] LWZ(:, LWZ(:, LWZ(:, IWZ(:, IWZ(:, :,D :,2) :,8) :,U :,2) = = = = = [3x1 [3x1 [3x1 [3x1 [3x1 double] double] double] double] double] [3x1 double] [3x1 double] П. Формирование .моделей нейронных сетей 421
IWZ(:,:,3) = [3x1 double] BZ = [3x1 double] Сопутствующие функции: CALCA1. CALCPD. Расчет сигналов сети на одном шаге по времени CALCA1 Синтаксис: [Ac.N.LWZ.IWZ.BZ] = calcalfnet.Pd.Ai.Q) Описание: Функция [Ac, N, LWZ, IWZ, BZ] = calcal(net, Pd, Ai, Q) вычисляет сигналы в слоях нейронной сети как реакцию на входы с учетом линий задержки для одного шага по времени. Эта функция применяется в последовательных процедурах обучения с использованием функции trains, которые требуют вычисления реакции сети на каждом шаге по времени. Входные аргументы: net - имя нейронной сети; Pd - выходы линий задержки; Ai - начальные условия на линиях задержки по выходам слоев; Q - количество реализаций для фиксированного момента времени. Выходные аргументы: Ас - массив векторов, объединяющих выходы нейронов и слоя; N - входы функций активации; LWZ - массив взвешенных выходов слоя; IWZ - массив взвешенных входов; BZ - массив смещений. Пример: Создадим линейную сеть с одним входом, изменяющимся в диапазоне от 0 до 1, тремя нейронами и линией задержки на входе с параметрами [0 2 4]; в сети используется обратная связь с ЛЗ [1 2] (см. рис. 11.62). net = newlin([О 1],3,[0 2 4]); net.layerConiiect (1/1) - 1; net.layerWeights{1,1}.delays = [1 2 ]; Вычислим вектор запаздывающих входов Pd, если заданы реализация вектора входа Р для трех шагов по времени, вектор начальных условий на линии задержки входов Pi: Р = {0 0.1 0.3}; Pi = {0.2 0.3 0.4 0.1}; Рс ш [Pi p]; Pd = calcpd(net#3,l,Pc) Pd(: , Pd(:, Pd(: , :.U = :,2) = :,3> = [3x1 [3x1 [3x1 double] double] double] 422 Нейронные сети. MATLAB 6
Вычислим вектор запаздывающих входов Pd, если заданы реализация вектора входа Р для трех шагов по времени и вектор начальных условий на линии задержки Pi: Р = {0 0.1 0.3}; Pi = {0.2 0.3 0.4 0.1}; Запаздывающие входы (значения входов после прохождения через ЛЗ) рассчитываются с помощью функции calcpd после их объединения в вектор Рс: Рс = [Pi PI; Pd = calcpd(net, 3,l,Pc) Pd{:,:,1) = [3x1 double] Pd(:,:,2) = [3x1 double] Pd(:,:,3) = [3x1 double] Теперь можно просмотреть значения запаздывающих входов для двух первых шагов: Pd{l,l,l} ans = О 0.4000 0.20О0 Pd{l,l,2} ans = 0.1000 0.1000 0.3000 Сопутствующие функции: CALCA, CALCA1. CALCE I Расчет ошибок слоя на заданном интервале времени Синтаксис: El = calce(net,Ac,TI,TS) Описание: Функция El = calce(net, Ac, Tl, TS) рассчитывает ошибки слоя нейронной сети на интервале времени TS. Входные аргументы: net - имя нейронной сети; Т1 - массив векторов целей слоя; Ас - массив векторов, объединяющих выходы нейронов и слоя; Q - количество выборок для фиксированного момента времени. Выходные аргументы: Е1 - массив ошибок слоя на интервале времени TS. 424 Нейронные сети. MATLAB б
1 Зр Пример: Создадим линейную есть с одним входом, изменяющимся в диапазоне от 0 до 1, двумя нейронами и ЛЗ на входе с параметрами [0 2 4]; в сети используется обратная связь сЛЗ[12]. ОТ- net = newlin([0 1],2,[0 2 4]); net.layerConnect(1,1) = 1; net.layerWeight s{1,1}.delays = [12]; Вычислим вектор запаздывающих входов Pel, если заданы реализация вектора входа Р для пяти шагов по времени, вектор начальных условий на ЛЗ входов Pi: Р = {О 0.1 0.3 0.6 0.4}; Pi = {0.2 0.3 0.4 0.1}; PC = [Pi P]; OB: Pd = calcpd<net,5,l,Pc); Сформируем вектор начальных условий на ЛЗ выхода слоя для каждого из двух нейронов и рассчитаем сигналы в слое на пяти шагах по времени: Ах = {[0.5; 0.1] [0.6; 0.5]}; [Ac,N,LWZ,IWZ,BZ] = calca(net,Pd,Ai,l,5); Определим цели слоя для двух нейронов для каждого из пяти временных шагов и рассчитаем ошибки слоя: Т1 = {[0.1;0.2] [0-3;0.1], [0.5;0.6] [0.8;0-9], [0.5,-0.1]}; El = calce(net,Ac,Tl,5) El = [2x1 double] [2x1 double] [2x1 double] [2x1 double] [2x1 double] Просмотрим ошибки слоя 1 на временном шаге 2: Е1{1,2} Ш ans = 0.3000 0.1000 Сопутствующие функции: CALCA, CALCE1, CALCPD. CALCE1 I Расчет ошибок слоя на одном шаге по времени н- ' * Синтаксис: В = calcel (net.A.TI) Описание: Функция El = calce(net, Ac, T1) рассчитывает ошибки слоя нейронной сети на одном шаге по времени. Входные аргументы: net - имя нейронной сети; А - массив выходов слоя на одном шаге; Т] - массив векторов целей слоя. Выходные аргументы: Е1 - массив ошибок слоя на одном шаге по времени. 6 ; 1L Формирование моделей нейронных сетей 425 i i
Пример: Создадим линейную сеть с одним входом, изменяющимся в диапазоне от 0 до 1, двумя нейронами и ЛЗ на входе с параметрами [0 2 4]; в сети используется обратная связь сЛЗ[12]. net = newlin([0 1],2,[0 2 4]); net.layerConnect(1,1) =1; net.layerWeights{1,1).delays = [123; Вычислим вектор запаздывающих входов Pd, если заданы реализация вектора входа Р для пяти шагов по времени, вектор начальных условий на ЛЗ входов Pi: Р = {0 0.1 0.3 0.6 0.4); Pi = {0.2 0.3 0.4 0.1}; Рс = [Pi P]; Pd = calcpd(net,5,l,Pc); Сформируем вектор начальных условий на ЛЗ выхода слоя для каждого из двух нейронов и рассчитаем сигналы в слое на пяти шагах по времени: Ai = {[0.5; 0.1] [0.6; 0.5]}; [Al,Nl,LWZl,IWZl,BZl] = calcal(net,Pd(:,:,l),Ai,l) Определим цели слоя для двух нейронов для каждого из пяти временных шагов и рассчитаем ошибки слоя на первом шаге: И. = <[0.1;0.2] [0.3;0.1], [0.5;0.6] [0.8;0.9], [0.5;0.1]}; El = calcel(net,Al,Tl(:,l)) El = [2x1 double] Просмотрим ошибку слоя на первом шаге: Е1{1} ans = 0.1000 0.2000 Теперь можно вычислить новые состояния на ЛЗ, используя массивы Ai и А, и рассчитать сигналы слоя на втором шаге по времени: Ai2 = [Ai(:,2:end) Al] ; [A2,N2,LWZ2,IWZ2,BZ2] = calcal(net,Pd{:,:,2),Ai2, 1); El = calcel(net,A2,Tl(:,2)) EMI} ans = 0.3000 0.1000 Сопутствующие функции: CALCA1, CALCE, CALCPD. FORMX I Формирование объединенного вектора весов и смещений Синтаксис: X = formx(net,B,IW,LW) 426 Нейронные сети. MATLAB 6
1 .1 Описание: Функция X = formx(nct, В, IW, LW) извлекает из описания сети матрицы весов и векторы смещений и объединяет их в единый вектор. ; Входные аргументы: net - нейронная сеть; В - массив ячеек размера Nix 1, включающий векторы смещений для N1 слоев; IW - массив ячеек размера Nix 1, включающий матрицы весов входа; LW - массив ячеек размера NlxNl, состоящий из весовых матриц N1 слоев. Выходные аргументы: ', X - объединенный вектор весов и смещений. \ Примеры: Создадим однослойную сеть с тремя нейронами и двухэлементным вектором входа ■ со значениями из диапазонов [0 1] и [~1 1}: 1 net ■ new£f<[0 1; -1 l],[3]); • Выведем значения массивов весов и смещений: ] Ь = net.b ] b = [3x1 double] ; Ь{1> ;: ans = I 3.7981 I -0.9154 ! -1.6816 i xw = net.xw | iw = [3x2 double] | iw{l} | ans = -2.7464 1.9986 j 1.8307 2.2455 j -1.4865 -2.3082 i lw = net.lw i lw = {[]} j j Объединим массивы весов и смещений в общий вектор: х = formx{net,net.b#net.iw,net.lw) ; х» ans = -2.7464 1.8307 -1.4865 1.9986 2.2455 -2.3082 3.7981 -0.9154 -1.6816 . В результате сформирован единый вектор, в котором сначала расположены элементы весовой матрицы по столбцам, а затем присоединен вектор смещений. Сопутствующие функции: GETX, SETX. П. Формирование моделей нейронных сетей 427
"gETX I Извлечение объединенного вектора весов и смещений ' из описания сети Синтаксис: X = getx(net) Описание: Функция X = getx(net) извлекает объединенный вектор весов и смещений, если известен дескриптор нейронной сети net. Пример: Создадим однослойную есть с тремя нейронами и двухэлементным вектором входа со значениями из диапазонов [0 1] и [-1 1]: net = newff([0 1; -1 1],[3]>; Выведем значения массивов весов и смещений: net.iw{l,l} ans = -4.7161 0.5653 3.5899 1.6304 -0.6304 2.4043 net.b{l} ans = 4.7829 -1.7950 -2.1097 Эти же значения можно вывести в виде объединенного вектора, который содержится в описании нейронной сети: х ~ getx(net); х1 ans = -4.7161 3.5899 -0.6304 0.5653 1.6304 2.4043 4.7829 -1.7950 -2.1097 Сопутствующие функции: SETX, FORMX. Включение объединенного вектора весов и смещений в описание сети Синтаксис: net = setx(net.X) Описание: Функция net = setxfnet, X) включает объединенный вектор весов и смещений X в описание нейронной сети с дескриптором net. Пример: Создадим однослойную сеть с тремя нейронами и двухэлементным вектором входа со значениями из диапазонов [0 1] и [-1 1]: SETX 428 Нейронные сети. MATLAB 6
net = newff([0 1; -1 1], [3]) ,- net.iw net .b ans = [3x2 double] ans = [3x1 double] Сеть имеет 6 весовых коэффициентов и 3 элемента смещений, т. с. всего 9 значений. Зададим этим элементам случайные значения и включим их в описание нейронной сети: net = setx(net,rand{9,1)); Эти значения можно вывести на экран с помощью команды getx(net). Сопутствующие функции: GETX, FORMX. CALCPERF I Расчет сигналов и функционала качества слоя Синтаксис: [perf,EI,Ac,N)B2,lWZ,LWZ] = calcperf(net,X,Pd,TI Ai,Q,TS) Описание: Функция [perf, El, Ac, N, LWZ, IWZ, BZ] = calcperf(net, X, Pd, Tl, Ai, Q, TS) вычисляет функционал качества и сигналы в слое нейронной сети net. Входные аргументы: net - имя нейронной сети; X - объединенный вектор весов и смещений; Pd - массив задержанных входов; Т1 - массив векторов целей слоя; Ai - начальные условия на линиях задержки в слоях; Q - число выборок; TS - размер выборки. Выходные аргументы: perf - значение функционала качества; Е1 - массив ошибок слоя; Ас - массив векторов, объединяющих выходы нейронов и слоя; N - входы функций активации; LWZ - массив взвешенных выходов слоя; IWZ- массив взвешенных входов; BZ - массив смещений. Пример: Создадим линейную сеть с одним входом, изменяющимся в диапазоне от 0 до 1, двумя нейронами и ЛЗ на входе с параметрами [0 2 4]; в сети используется обратная связь с ЛЗ [1 2]. net = newlin([0 1],2,[О 2 4]); net.layerConnect{l,l) = 1; net.layerWeight s{1,1}.delays = [1 2]j 11. Формирование моделей нейронных сетей 429
Вычислим вектор запаздывающих входов Pd, если заданы реализация вектора входа Р для пяти шагов по времени, вектор начальных условий на ЛЗ входов Pi: Р = {0 0.1 0.3 0.6 0.4); Pi = {0.2 0.3 0.4 0.1); Рс = [Pi P]; Pd = calcpd(xiet, 5,l,Pc); Сформируем вектор начальных условий на ЛЗ выхода слоя для каждого из двух нейронов и массив векторов целей на пяти шагах по времени: Ai = {[0.5; 0.1] [0.6; 0.5]}; Tl = {[0.1;0.2] [0.3;0.1], [0.5,-0.6] С0.8;0.9], [0.5;0.Щ; Извлечем объединенный вектор весов и смещений из описания сети X = getx(net); Вычислим функционал качества и сигналы в сети [per£,ElrAc,N,BZ,IWZ,LWZ] = calcperf (net,X,Pd,Tl, Ai, 1, 5) ; Выведем значения функционала качества и массива ошибок слоя perf perf = 0.2470 cat(2, El{:}> ans = 0.1000 0.3000 0.5000 0.8000 0.5000 0.2000 0.1000 0.6000 0.9000 0.1000 Сопутствующие функции: CALCGX, CALCPD, GETX. CALCGX I Расчет градиента функционала качества I—————I п0 объединенному вектору весов и смещений Синтаксис: [gX,normgX] = calcgxCnet.X.Pd.BZ.lWZ.LWZ.N.Ac.El.perf.Q.TS) Описание: Функция [gX, norragX] = calcgx(net, X, Pd, BZ, IWZ, LWZ, N, Ac, EI, perf, Q, TS) вычисляет градиент функционала качества по объединенному вектору весов и смещений X. Если слой не имеет ЛЗ, то результатом является истинный градиент; если сеть имеет ЛЗ, то результатом является аппроксимация градиента, называемая градиентом Элмана, Входные аргументы: net - имя нейронной сети; X - объединенный вектор весов и смещений; Pd - массив задержанных входов; BZ - массив векторов смещений; IWZ - массив взвешенных входов слоя; LWZ - массив взвешенных выходов слоя; N - массив входов функций активации; Ас - массив векторов, объединяющих выходы нейронов и слоя; 430 Нейронные сети. MATLAB 6
El - массив ошибок слоя; perf- значение функционала качества; Q - число выборок; TS ~ размер выборки. Выходные аргументы: gX - градиент dPerf/dX; normgX - значение нормы градиента. Пример: Создадим линейную сеть с одним входом, изменяющимся в диапазоне от 0 до 1, двумя нейронами и ЛЗ на входе с параметрами [0 2 4]; в сети используется обратная связь сЛЗ[1 2]. net = newlin(I0 lb 2, [О 2 4]); net.1ayerConnect(1,1) = 1; net.layerWeight s{1,1}.delays = [12]; Вычислим вектор запаздывающих входов Pd, если заданы реализация вектора входа Р для пяти шагов по времени, вектор начальных условий на ЛЗ входов Pi: Р = {0 0-1 0.3 0.6 0.4}; Pi = {0.2 0.3 0.4 0.1}; Рс = [Pi PI; Pd = calcpdfnet,5,l,Pc); Сформируем вектор начальных условий на ЛЗ выхода слоя для каждого из двух нейронов и массив векторов целей на пяти шагах по времени: Ai = {[0.5; 0.1] [0.6; 0.5]}; Т1 - {[0.1;0.2] [0.3;0.1], [0.5;0.б] [0.8;0.9], [0.5,-0.1]}; Извлечем из описания сети объединенный вектор весов и смещений сети и вычислим функционал качества и сигналы сети: X = getx(net); [perf#El,Ac,N,BZ,IWZ,LWZ] = calcperf(net,X,Pd,Tl,Ai,1,5); В заключение используем функцию calcgx, чтобы вычислить градиент функционала по объединенному вектору весов и смещений: [gX,normgX] = calcgx(net,X,Pd,BZ,IWZ,LWZ,N,Ac,El,perf,1,5); gX' ans = 0.172 0.154 0.06 0.042 0.078 0.08 0.012 0.024 0.01 0.020 0.046 0.032 0.032 0.014 0.44 0.380 normgX normgX = 0.6440 Поскольку в сети присутствуют ЛЗ, то в данном случае вычисляется градиент Элмана. Сопутствующие функции: CALCJX, CALCJEJJ. Л. Формирование моделей нейронных сетей 431
CALCJX Расчет функции Якоби функционала качества относительно объединенной матрицы весов и смещений Синтаксис: jx = calcjx(net,PD,BZ,IWZ,LWZ,N,Ac,Q,TS) Описание: Функция jX = calcjxfnct, PD, BZ, IWZ, LWZ, N, Ac, Q, TS) вычисляет функцию Якоби функционала качества относительно объединенной матрицы весов и смещений. Входные аргументы: net - имя нейронной сети; PD - массив задержанных входов; BZ - массив векторов смещений; IWZ - массив взвешенных векторов входа; LWZ - массив взвешенных векторов выхода; N - массив входов функций активации; Ас - массив векторов, объединяющих выходы нейронов и слоя; Q - число выборок; TS - размер выборки. Выходные аргументы: jX - якобиан функционала качества относительно объединенной матрицы весов и смещений. Пример: Создадим линейную сеть с одним входом, изменяющимся в диапазоне от 0 до 1, двумя нейронами и ЛЗ на входе с параметрами [0 2 4]; в сети используется обратная связь сЛЗ[12]. net ~ newlin([0 1],2, [0 2 4]); net.layerConnect(1,1) = 1; net.layerWeights{1,1}.delays = [12]; Вычислим вектор запаздывающих входов Pd, если заданы реализация вектора входа Р для пяти шагов по времени, вектор начальных условий на ЛЗ входов Pi: Р = {0 0.1 0.3 0.6 0.4}; Pi = {0-2 0.3 0.4 0.1}; Рс = [Pi Р]; Pd = calcpd(net,5,l,Pc); Зададим 2 начальных значения запаздывающих выходов слоя для каждого из двух нейронов и цели слоя для двух нейронов на 5 шагов по времени: Ai = {[0.5; 0.1] [0.6; 0.5]}; Tl = {[0.1;0-2] [0.3;0.1], [0.5;0.б] [0.8;0.9], [0.5;0.1]}; Извлечем из описания сети объединенный вектор весов и смещений сети и вычислим функционал качества и сигналы сети: X = getx(net); [perf,El,Ac,N,BZ,IWZ,LWZ] = calcperf(net,X,Pu,Tl,Ai,l, 5); 432 Нейронные сети. MATLAB 6
Теперь можно применить функцию calcjx, чтобы вычислить якобиан функционала качества по объединенной матрице весов и смещений: jX = calcjx{net,Pd/BZ,IWZ,LWZ,N,Ac,l,5); -С -Г: -С -0 -с -с -1 0 с 4000 С 20СС 0 6СС0 0 5000 с 5000 0 icoo 0 0000 0 -0 -с -0 -G — G -0 -1 с с с •ассо с 2000 С 6С0О 0 SCCC 0 5000 0 1000 0 0000 ': 0 -С -0 -0 -1 LCC0 с 1СС0 0 3000 0 0 0 0 с 6С00 0 5000 0 0000 0 -с -0 -0 -0 -1 0 д осе с I0CC с -G.30 0 0 0 с 0 6000 0 5000 0 .0000 -0 -с -1 зсос 40 л 0 0 о С 0 0 0 0 г< 0 0 0 0 0000 0 -0 -0 -1 0 3000 0 с 0 4000 0 0 0 с 0 с 0 0 0 0000 -0 -0 -0 -1 6000 0 1СО0 0 1000 с 0 0 0 0 0 0 0 0 0000 0 -0 -с «с -1 0 G0C0 0 1000 с 1С00 0 0 с с 0 0 0 0 0 0000 -с -0 -1 4000 с 3000 0 0 0 0 0 0 G 0 0 0 0 0000 0 -с "0 -1 с 40СО 0 3000 0 0 0 0 0 г. 0 0 0 0 0 0000 Сопутствующие функции: CALCGX, CALCJEJJ. CALCJEJJ Расчет градиента и приближенной функции Гессе для функционала качества Синтаксис: Dejj.normje] = calcjejKnet.Pd.BZJWZ.LWZ.N.Ac.EI.Q.TS.MR) Описание: Функция [je, jy, normgX] = calcjejjCnct, PD, BZ, IWZ, LWZ, N, Ac, El, Q, TS, MR) вычисляет градиент, матрицу, аппроксимирующую гессиан, и норму градиента функционала качества. Входные аргументы: net - имя нейронной сети; PD - массив задержанных входов; BZ - массив векторов смещений; IWZ - массив взвешенных векторов входа; LWZ - массив взвешенных векторов выхода; N - массив входов функций активации; Ас - массив векторов, объединяющих выходы нейронов и слоя; Е1 - массив ошибок слоя; Q - число выборок; TS - размер выборки; MR - коэффициент экономии памяти. Выходные аргументы: " je - градиент функционала качества; jj - матрица, аппроксимирующая гессиан функционала качества; normgX - норма градиента функционала качества. П. Формирование моделей нейронных сетей 433
m Применение функции: Функция calcjejj вычисляет градиент je и матрицу jj, аппроксимирующую гессиан функционала качества, которые используются в алгоритмах минимизации функции многих переменных. Функционал качества как функция настраиваемых параметров нейронной сети и является такой многомерной функцией. Как градиент, так и матрица, аппроксимирующая гессиан функционала качества, связаны с якобианом функционала следующими соотношениями: градиент рассчитывается по формуле g = Jre. (ПЛО) а гессиан может быть приближенно вычислен как H = JrJ, (11-11) где J - матрица Якоби производных функционала качества по настраиваемым параметрам; е - вектор ошибок сети. Вычисление якобиана может потребовать больших объемов памяти для хранения матриц. Поэтому, как это часто делается при работе с матрицами, выполним ее декомпозицию, т. е. представим матрицу в виде разбиения на несколько подматриц. Если выделить 2 подматрицы; то соотношение (11.11) может быть записано в виде H = JrJ = [J, J3]= J'Jl J'Ja (11.12) _J2J, «l2"2. ' В этом случае уже не требуется хранить полную матрицу Якоби, а оценка гессиана может быть вычислена с использованием подматриц меньших размеров. Причем в процессе вычислений использованные подматрицы могут быть удалены из оперативной памяти. Разбиение матрицы на подматрицы регулирует коэффициент экономии памяти пну который указывает, на какое число подматриц разбивается исходная матрица. Если пара-.. метр mr равен 1, то используется полная матрица Якоби; если тг равен 2, то матрица Якоби разбивается по строкам на 2 подматрицы. Это экономит половину объема памяти, требуемой для вычисления полного якобиана. Пример: Создадим линейную сеть с одним входом, изменяющимся в диапазоне от 0 до 1, - двумя нейронами и ЛЗ на входе с параметрами [0 2 4]; в сети используется обратная связь с ЛЗ [1 2]. net = newlin<[0 11,2, [0 2 4]); net.layerConnect(1,1) =1; net.layerWeights{1,1}-delays =[12]; >■ \ net.iw ans = [2x3 double] net.Iw ans = [2x4 double] net.b ans = [2x1 double] Данная сеть имеет 16 настраиваемых параметров: 6 элементов весовой матрицы вхо-. да, 8 элементов весовой матрицы в обратной связи и 2 элемента вектора смещения. 434 Нейронные сети. MATLAB 6 ■:
Вычислим вектор запаздывающих входов Pd, если заданы реализация вектора входа Р для пяти шагов по времени, вектор-начальных условий на ЛЗ входов Pi: Р = {О 0.1 0.3 0.6 0.4}; Pi = {0.2 0.3 0.4 0.1}; Рс = [Pi P]; Pd = calcpd(net, 5,1,Рс); Зададим 2 начальных значения запаздывающих выходов слоя для каждого из двух нейронов и цели слоя для двух нейронов на 5 шагов по времени: Ai = {[0.5; 0.1] [0.6; 0.5]}; Т1 = {[0.1;0.2] [0.3;0.1], [0.5;0.6] [0.8;0.9], [0.5,-0.1]}; Извлечем из описания сети объединенный вектор весов и смещений сети и вычислим функционал качества и сигналы сети: X = getx(net); [per£,El,Ac,NrBZ,IWZ,LWZ] = calcperf (net,X,Pd,Tl,Ai,l, 5) ; В заключение используем функцию calcjejj, задав коэффициент экономии памяти равным 2: tic, [je, jj,normje] = calcjejj (net,Pd,BZ,IWZ,LWZ,N,Ac,El, 1,5,2); toe elapsed_time = 0.8800 je' ans = -0.860 -0.770 -0.300 -0.210 -0.390 -0.400 -0.060 -0.120 -0.050 -0.100 -0.230 -0.160 -0.160 -0.070 -2.200 -1.900 DJ jj - 0.6200 0 0.1900- 0 0.2100 0 0 0 0 0 0.0600 О 0.О500 0 1.4000 0 0 0.6200 0 0.1900 0 0.2100 0 00 0 0 0.0600 0 0.0500 0 1.4000 0.1900 0 0.2700 0 0.1200 0 0.2400 0 0.2000 0 0.2600 0 O.090O 0 0.9000 0 О 0.1900 0 0.2700 0 0.1200 0 0.24000 0.2000 0 0.2600 0 0.0900 0 0.9000 0.2100 0 0.1200 0 0.3000 0 0.1200 0 0.1000 0 0.2800 0 0.1700 0 1.0000 0 0 0.2100 0 0.1200 0 0.3000 0 0.12000 0.1000 0 0.2800 0 0.1700 О 1.0000 О' 0 0.2400 0 0.1200 0 0.3600 0 0.3000 0 0.3000 0. 0.0600 О 0.6000 О 0 0 0 0.2400 0 0.1200 0 0.3600 0 0.3000 0 0.3000 0 О.ОбОО О 0.6000 О 0 0.2000 0 0.1000" 0 0.3000.0 0.2500 0 0.2500 0 0.0500 0 0.5000 О 0 0 0 0.2000 0 0.1000 О 0.3000 0 0.2500 0 0.2500 0 0.0500 0 0.5000 0.0600 0 0.2600 0 0.2800 0 0.3000 0 0.2500 0 0.6100 0 0.3500 'о 1.1000 О О 0.0600 0 0.2600 0 0.2800 0 0.3000 0 0.2500 0 0.6100 0 0.3500 0' 1.1000 0.0500 0 0.0900 О 0.1700 О 0.0600 0 0.0500 0 0.3500 0 0.2600 0 0.6000 О О 0.0500 0 0.0900 0 0.1700 0 0.0600 0 0.0500 О 0.3500 0 0.2600 О 0.6000 1.4000 0 0.9000 О 1.0000 0 0.6000 0 0.5000 0 1.1000 0 0.6000 0 5.0000 О О 1.4000 0 0.9000 О 1.0000 0 0.6000 0 0.5000 0 1.1000 0 0.6000 0 5.0000 Результаты будут одинаковыми при любом значении коэффициента экономии памяти, однако время вычислений будет расти. Увеличим коэффициент экономии памяти до значения 4: tic, [je,jj,normje] = calcjejj(net,Pd,BZ,IWZ,LWZ,N,Ac,El,1,5,4); toe elapsed_time = 0.9900 Как и следовало ожидать, время вычислений увеличилось от 0.88 с до 0.99 с, т. е. на 12 %. Сопутствующие функции: CALCJX. //. Формирование моделей нейронных сетей 435
Операции с массивами данных Входной массив Р, соответствующий TS моментам времени, может быть представлен в виде массива ячеек Pscq, каждая из которых содержит данные для фиксированного момента времени (сечение по времени): Pseq = nPl(l), p2(I) р0(1)] [pi(2), p2(2), .... pQ(2)] ЫТЯ), p2(7S),..., pQ(7S)] }. Этот массив имеет TS ячеек, каждая из которых содержит числовой массив размера RxQ. Такое описание входного массива ячеек соответствует последовательному представлению наблюдаемых данных во времени. Если сформировать временные последовательности, то входной массив Р можно описать иначе. Тогда можно говорить о том, что на вход сети подается R реализаций из интервала времени [1 TS], которые могут быть описаны следующим числовым массивом Peon: Рсоп = [[р,(1), р,(2),..„ р,(75)]; [ргШ, Рг(2), .... p2(7S)]; IPc(l), Pq(2),.~, Pq(T5)]]. Представление входов как числового массива реализаций в формате double соответствует групповому представлению данных. CELL2MAT I Преобразование массива числовых ячеек —— в массив double Синтаксис: М = celI2mat(C) Описание: Функция М = cell2mat(C) преобразует массив числовых ячеек С={МПМ12...; М21 М22 ...;...} в числовой массив М = [М11 М12 ...; М21 М22 ...;...]. Пример: С = {[1 2] [3]; [4 5; б 7] [8; 9] } ; cellplot(C) % Рис. 11.63 Рис. 11.63 436 Нейронные сети. MATLAB 6
M = cell2mat(C) 12 3 4 5 8 6 7 9 Сопутствую щие функции: MAT2CELL COMBVEC 1 Объединение выборок разных размеров Синтаксис: Р = combvec(P1, P2,...) Описание: Функция Р = combvec(Pl, Р2,...) объединяет выборки разных размеров в единую выборку по следующему правилу. Процедура выполняется рекуррентно так, что на каждом шаге объединяются только 2 выборки. Рассмотрим первый шаг, когда объединяются массивы Р1 размера rnlxn 1 и Р2 размера ш2х«2. Тогда образуется массив вида Р1 Р1 ... Р1 р=1 Р2(1Д) Р2(2Д) ... Р2(т2,1) |_Р2(1,л2) Р2(2,л2) ... Р2(т2,л2) Этот массив имеет ml+m2 строк и nlxn2 столбцов. На следующем шаге массив Р принимается за Р1, а массив РЗ - за массив Р2 и процедура повторяется. Пример: Рассмотрим следующие 2 выборки Р1 и Р2 и рассчитаем объединенную выборку Р: Р1 = [1 2 3; 4 5 61; Р2 = [7 8; 9 10]; Р = coiribvec(Pl,P2) Р = 1 4 8 10 2 5 8 10 3 6 8 10 Добавим выборку РЗ РЗ = [4 5 6]; Р - combvec(P,P3) р = 2 5 7 3 12 3 6 4 5 6 7 8 8 8 9 10 10 10 4 4 4 4 3 12 3 6 4 5 6 7 8 8 8 9 10 10 10 5 5 5 5 3 12 3 6 4 5 6 7 8 8 8 9 10 10 10 6 6 6 6 Тот же самый результат будет получен, если применить оператор Р - coinbvec(Pl J2P3). //. Формирование моделей нейронных сетей 437
C0N2SEG, SEQ2C0N Прямое и обратное преобразования группового и последовательного представления данных Синтаксис: S s con2seq(P) P = seq2con(S) S = con2seq(P, TS) Описание: Функция S = con2scq(P) преобразует числовой массив Р размера QxTS, соответствующий групповому представлению данных, в массив.ячеек S размера lxTS, содержащих числовые массивы размера Qxl и соответствующий последовательному представлению данных. Функция S = con2seq(P, TS) преобразует массив ячеек Р размера Qxm*TS, соответствующий групповому представлению данных, в массив ячеек S размера QxTS, соответствующий последовательному представлению. При этом каждая ячейка содержит числовой массив размера 1 хт. Функция Р = seq2con(S) преобразует массив ячеек S размера QxTS, содержащих числовые массивы размера Rxm, в массив ячеек Р размера Qxl. При этом каждая ячейка содержит числовой массив размера Rxm*TS. Пример: Преобразуем числовой массив Р размера 2x3, соответствующий групповому представлению данных, в массив ячеек S размера 1x3, содержащих числовые массивы размера 2x1, соответствующий последовательному представлению данных: Р = [1 4 2; 2 5 3] S = con2seq(F) р2 = [2x1 double] [2x1 double] [2x1 double] - Преобразуем массив ячеек Р размера Qx 1, содержащих массивы размера Rxm*TS, который соответствует структуре группового представления, в массив ячеек S размера QxTS, содержащих массивы размера Rxm, который соответствует структуре последовательного представления данных: Е = { [1 2; 1 2]; [3 4; 3 4]; [5 6; 5 6] }; S = con2seq(F,2) S = [2x1 double] [2x1 double] [2x1 double] [2x1 double] [2x1 double] [2x1 double] Этому массиву соответствует следующее описание: cell2mat(S), cellplot(S) 438 Нейронные сети. MATLAB 6
Преобразуем массив ячеек S размера QxTS, содержащих числовые массивы размера Rxm, в массив ячеек Р размера Qx 1. При этом каждая ячейка содержит числовой массив размера Rxm*TS: S = {[1; И [5; 4) [1; 2]; [3; 9] [4; 1] [9; 8]} Р ~ seq2con(S) S ~ [2x1 double] [2x1 double] [2x1 double] [2x1 double] [2x1 double] [2x1 double] p = [2x3 double] [2x3 double] Сформируем числовой массив Р, соответствующий групповому представлению: Р = cell2mat(P) Р = 15 1 14 2 3 4 9 9 18 Сопутствующие функции: CONCUR. CONCUR Создание группы векторов смещений Синтаксис: В = concur(b, q) Описание: Функция В = concur(b, q) преобразует вектор смещения b размера Sx 1 или массив ячеек размера Nix 1, содержащий векторы смещения для N1 слоев сети, в массив размера Sxq или в массив ячеек размера N1x1, содержащий числовые массивы размера Sxq. Примеры: Функция concur создает 3 копии вектора смещения для данного слоя нейронной сети: Ъ = [1; 3; 2; -1] ; В = concur(b, 3) 1J. Формирование моделей нейронных сетей 439
ans = 111 3 3 3 2 2 2 -1 -1 -1 Двухслойная нейронная сеть имеет 2 вектора смещения, которые для применения функции concur необходимо объединить в вектор ячеек: Ы = [1; 3; 2; -1]; Ь2 = [3; 2; -1]; Ь = {М; Ь2) ''■; В = concur(Ь,3) Ь = [4x1 double] [3x1 double] В = [4x3 double] [3x3 double] •" Применение функции: Следующий оператор вычисляет взвешенный вход для слоя с функцией накопления netsum, двумя векторами весов и одним вектором смещения: -:■, п. = netsum{zl/ z2, b) Это соотношение реализуется, если векторы zl, z2 и имеют одинаковые размеры, например Sxq. Однако если сеть моделируется с помощью функций sim, adapt или train как отклик на q групп векторов, то массивы zl и z2 должны иметь размер Sxq. Прежде . чем объединить вектор смещения Ъ с массивами zl и z2, следует сделать q его копий: л = netsum(zl,z2,concur (b,q)) -1 Сопутствующие функции: NETSUM, NETPROD. SIM, SEQ2CON. CON2SEQ. i Прямое и обратное преобразования вектора индексов классов в матрицу связности Синтаксис: vec = ind2vec(ind) -.,. ind = vec2ind(vec) Описание: :; Функция vec = ind2vec(ind) преобразует вектор индексов классов в матрицу связности '-'''.'- с. единицами в каждом столбце, расположенными в строке, соответствующей значению . индекса. Матрица связности определена в классе разреженных матриц. Функция ind = vec2ind(vec) преобразует матрицу связности в вектор индексов классов ' '■ так, что индекс класса соответствует номеру строки. :-7. Примеры: .:'■ Преобразовать вектор индексов классов в матрицу связности. ..■ IND2VEC, VEC2IND 440 Нейронные сети. MATLAB6: г
ind =[1323], vec = ind2vec(ind), vec = full(vec) . 2 3 vec = 10 0 0 0 0 10 0 10 1 Преобразовать матрицу связности в вектор индексов классов. vec =[1000; 0 0 10; 0 10 1]; ind = vec2ind(vec) ind =13 2 3 ind = 1 vec = (1.1) (3,2) (2,3} (3,4} 3 1 1 1 1 MAT2CELL [ Преобразование числового массива в массив ячеек Синтаксис: С = mat2cell(M, mrow, ncol) Описание: Функция С = mat2cell(M, mrow, ncol) преобразует числовой массив М размера rowxcol в массив ячеек, содержащих блоки, разбиение на которые задается векторами mrow и ncol. При этом должно соблюдаться условие: sum(mrow) = row, sum(ncol) = col. Пример: Преобразовать числовой массив М размера 3x4 в массив ячеек с разбиением mrow =[2 1], ncol = [12 1]. М = [1 2 3 4; 5 6 7 8; 9 10 11 121; С = mat2cell(M,[2 1],[1 2 1]) С = [2x1 double] [2x2 double] [2x1 double] [ 9] [1x2 double] [ 12] [C{1,:},- C{2,:}] ans = 12 3 4 5 6 7 8 9 10 11 12 Сопутствующие функции: CELL2MAT. MINMAX Вычисление минимальных и максимальных элементов векторов входа Синтаксис: рг = minmax(P) Описание: Функция рг = minmax(P) вычисляет минимальные и максимальные значения элементов массива Р векторов входа pa3Mepa.RxQ и возвращает массив рг размера Rx2 минимальных и максимальных значений строк массива Р. 11. Формирование моделей нейронных сетей 441
Примеры: Р = [0 1 2; -1 -2 -0.5]; pr = minmax(P) рг = О 2.0000 -2.0000 -0.5000 NORMC, NORMR Нормировка матрицы по строкам и столбцам Синтаксис: Mr = normr(M) Мс = normc(M) Описание: Функция Mr = normr(M) нормирует длины строк матрицы М к 1. Функция Мс = normc(M) нормирует длины столбцов матрицы М к 1. Примеры: Нормировать матрицу М по строкам и столбцам. м = [1 2; 3 41 j normr (M) ans = 0.4472 0.8944 0.6000 0.8000 xiormc (M) ans = 0.3162 0.4472 0.9487 0.8944 Анализируя результаты, нетрудно убедиться, что нормированные первая строка и второй столбец одинаковы, поскольку они коллинеарны. Сопутствующие функции: PNORMC. PNORMC Псевдонормировка столбцов матрицы Синтаксис: рМ = pnormc(M,r) Описание: Функция рМ = pnormc(M, г) нормирует столбцы до заданной длины г, добавляя дополнительную строку к исходной матрице. Такая операция определена как псевдонормировка матрицы. Необходимо соблюдать условие, чтобы длина столбцов исходной матрицы не превышала г. При вызове функции с одним входным аргументом в форме рМ = pnormc(M) по умолчанию принимается, что г равно 1. 442 Нейронные сети. MATLAB 6
Пример: М = [0.1 0.6; 0.3 0.1]; рМ = pnormc(M) рМ = 0.1000 0.6000 0.3000 0.1000 0.9487 0.7937 Сопутствующие функции: NORMC, NORMR. QUANT I Округление элементов массива до ближайшего кратного базису округления Синтаксис: qP = quant(P, q) Описание: Функция qP = quant(P, q) округляет элементы массива Р до ближайшего значения, кратного базису округления q. Пример: Округлим элементы массива Р с точностью до 0.1: Р « [1.333 4.756 -3.897]; qP = quant(Р,0.1) qP = 1.3000 4.8000 -3.9000 SUMSQR Сумма квадратов элементов массива Синтаксис: s = sumsqr(M) Описание: Функция s = sumsqr(M) вычисляет сумму квадратов всех элементов массива М. Пример: М - [ 1 2 3; 4 5 6]; s = sumsqr (M) s = 91 Графические утилиты Отображение векторов в виде линий PLOTV Синтаксис: plotv(P, LineStyle) 11. Формирование моделей нейронных сетей 443
Описание: Функция plotv(P, LincSlyic) строит векторы столбцов массива входа Р размера RxQ; строковая переменная UneStyle позволяет задать тип линии согласно следующей таблице. Тип линии Непрерывная Штриховая Двойной пунктир Штрих пунктирная Значение UneStyle '-', по умолчанию ';' '-.' Число строк R массива Р должно быть не меньше чем 2; при значениях R, больших, чем 2, для построения графика используются только первые 2 строки массива Р. Пример: Е = [-0.4 0.7 0.2; -0.5 0.1 0.5]; plotv(P,•-'); % Рис.11.64 Результат построения представлен на рис. 11.64. Рис. 11.64 Сопутствующие функции: PLOTVEC. PLOTVEC Отображение векторов входа в виде маркеров Синтаксис: plotvec(P,color, Marker) piotvec(P) hh = plotvec(...) Описание: Функция plotvec(P, color, Marker) отображает векторы столбцов массива входа Р размера RxQ в виде маркеров, цвет каждого из которых задается элементами вектор-строки color; строковая переменная Marker позволяет задать тип маркера согласно следующей таблице. 444 Нейронные сети. MATLAB 6
Тип маркера Плюс Точка Звездочка Кружок Крест Квадрат Ромб Значение Marker '+', по умолчанию V 'х' 's' '& Тип маркера Пятигранник Шестигранник Стрелка вниз Стрелка вверх Стрелка влево Стрелка вправо Значение Marker 'р;_ _ \v"'~ V ■Л1 ■<' ■>' Число строк R массива Р должно быть не меньше чем 2; для отображения маркеров используются первые 2 или 3 строки массива Р. Графики строятся либо в двумерном, либо в трехмерном пространстве соответственно. Функция plotvec(P) использует тип маркера по умолчанию, а элементы вектор-строки color соответствуют номеру столбца массива Р. Функция hh = plotvec(...) возвращает вектор дескрипторов для всех маркеров. Пример: 1.0000 2.0000 0.1000 0-5000 0.5000 0.7000 Р ~{ 0.1000 -1.0000 1.0000 t = minmax(P)'; axis(t{:)') с - [12 3 4]; plotvec(P,c,'o') % Рис.11.65 Результат представлен на рис. 11.65. 0.7000 0.1000 0.5000]; Рис. 11.65 Сопутствующие функции: PLOTV. Отображение векторов входов и целей в виде маркеров PLOTPV Синтаксис: plotpv(P.T) plotpv(P,T,v) / /. Формирование моделей нейронных сетей 445
Описание: Функция plotpv(P, Т) отображает векторы столбцов массива входа Р размера RxQ и массива целей размера SxQ в виде маркеров различного типа. Число строк этих массивов R и S должно быть не более трех. Функция plotpv(P, Т, v) позволяет задать пределы построения графика: • для двумерных векторов в виде вектора [xjmin x_max y_min учпах]; • для трехмерных векторов в виде вектора [x_min x_max yjnin y_max z_min z_max]. Пример: Определим выходы и цели персептрона: Р = [0 0 11; 0 10 1; 10 0 1]; Т = [0001]; plotpv(P,T) % Рис;11.66 Результат представлен на рис. 11.66. Рис. 11.66 Сопутствующие функции: PLOTPC. PLOTPC Построение разделяющей линии или плоскости в пространстве векторов входа для персептрона Синтаксис: p[otpc(Wtb) plotpc(W,b,hh) h =plotpc(...) Описание: Функция plotpc(W, b) строит разделяющую линию или плоскость, если заданы матрица весов W размера SxR и вектор смещений размера Sx 1, причем значение R должно быть не более трех. Разделяющая линия или плоскость строятся в пространстве векторов входа, координатные оси которого предварительно формируются с помощью функции plotpv. 446 Нейронные сети. MATLAB б
Функция plotpc(W, b, hh) использует вектор hh дескрипторов графических объектов Line последних построенных линий и удаляет их перед тем, как построить новую разделяющую линию или плоскость. Функция h=p!otpc(...) возвращает вектор дескрипторов вновь созданных графических объектов Line. Примеры: Определим векторы входов и целей иотобразим их в двумерном пространстве входов: р = [0 0 1 1; 0 10 1]; Т = [0 0 0 1]; plotpv(P,T) Создадим персептрон со входами Р, зададим произвольные значения весам и смещениям и построим разделяющую линию в пространстве входов: ' net = nevip(mizimax(P),l); net.iw{l,l) = [-1.2 -1]; net.b{l} = 1.3; plotpc(net.iwfl/l}/net.b(l}) % Рис.11.67 На рис. 11.67 построено начальное положение разделяющей линии и требуется выполнить процедуру настройки параметров персептрона, чтобы правильно классифицировать векторы входа. Перейдем к построению разделяющей плоскости в трехмерном пространстве: Р = [О 0 1 1; % 0 10 1;' 10 0 1]; Т = [О 0 0 13; plotpv(PfT) Следующие функции создают персептрон со входами, соответствующими значениям вектора Р, назначают значения его весам и смещениям и строят разделяющую плоскость: 11. Формирование моделей нейронных сетей 447
net = newp(miranax(P) ,1) ; net.iw{l,l} = [-1.2 -1 -0.5]; net.b{l) = 1.3; plotpc(net.iw{l,l},net.b{l}) % Рис.11.68 Результат представлен на рис. 11.68. Еекгоры вшдое в цел^и Рис. 11.68 Анализ рис. 11.68 позволяет сделать вывод, что векторы входов и цели в начальном состоянии находятся по разные стороны от плоскости. Сопутствующие функции: PLOTPV. HINTONW | Диаграмма Хинтона для весов Синтаксис: hintonw(Wtmaxw,minw) hintonw(W) Описание: Функция hintonw(W, maxw, minw) отображает значения элементов матрицы весов W размера SxR в виде диаграммы Хинтона; при этом аргумент maxw соответствует максимальному, a minw - минимальному элементу весовой матрицы. Диаграмма Хинтона - это прямоугольная сетка, в узлах которой изображаются квадраты, площадь которых пропорциональна значению соответствующего веса; цвет квадрата соответствует знаку веса: красный (темный) для отрицательных и зеленый (светлый) для положительных весов. Функция hintonw(W) использует по умолчанию для аргумента maxw значение max(max(abs(W))), а для аргумента minw значение maxw/100. Пример: Зададим случайную матрицу весов и построим для нее диаграмму Хинтона (рис. 11.69), используя значения дополнительных аргументов по умолчанию: W = rands(4,5} 448 Нейронные сети. MATLAB б
w = 0.9003 -0.5377 0.2137 -0.0280 hintonw(W) % 0.7826 0.5242 -0-0871 -0.9630 Рис.11.69 0 -0 0 0 6428 1106 2309 .5839 0 0 -0 -0 8436 4764 6475 1886 0 0 -0 0 8709 8338 1795 7873 Рис. 11.69 Сопутствующие функции: HINTONWB. H1NTONWB Диаграмма Хинтона для весов и смещений Синтаксис: hintonwb(W,b,maxw,minw) hintonwb(W.b) Описание: Функция hintonw(W, b, maxw, minw) отображает значения элементов матрицы весов W размера SxR и вектора смещений размера Sxl в виде диаграммы Хинтона; при этом аргумент maxw соответствует максимальному, a minw—минимальному элементу весовой матрицы. Элементы вектора смещений показаны в левой части диаграммы. Функция hintonw(W, b) использует по умолчанию для аргумента maxw значение max(max(abs(W))), а для аргумента minw значение maxw/100. Пример: Зададим случайные матрицу весов и вектор смещений и построим для них диаграмму Хинтона (рис. 11.70), используя значения дополнительных аргументов по умолчанию: W = rands(4,5); Ь = rands(4,1); hintonwb(W,b) % Рис.11.70 П. Формирование моделей нейронных сетей 449
Дизгрмма Хитона для ессоб и смещений Рис. 11.70 Сопутствующие функции: HINTONW. PLOTPERF График функции качества обучения Синтаксис: plotperf(tr,goal,name,epoch) plotperf(tr) Описание: Функция plotperf(TR, goal, name, epoch) предназначена для построения графиков критерия качества обучения, предельной точности и графиков точности обучения с учетом контрольного и тестового подмножеств. Функция имеет следующие входные аргументы: TR - массив записей с характеристиками обучения, возвращаемый функцией train; goal - предельная точность, по умолчанию NaN; name - имя обучающей функции, по умолчанию''; epoch - число циклов обучения. Пример: Зададим 8 значений вектора входа Р, соответствующий им вектор целей Т, а также контрольное подмножество в виде векторов VV.P и VV.T: Р = 1:8; Т = sin(P); W.P = Р; W.T = T+rand(l, 8) *0.1; Создадим и обучим двухслойную сеть прямой передачи с четырьмя нейронами в пер-' вом слое с функцией активации tanstg и одним нейроном во втором слое также с функцией активации tansig: net = newff (minmax(P) , [4 1],{'tansig1,'tansig1}); [net,tr] = train(net,P,T,[J, [■] #W) j 450 Нейронные сети. MATLAB 6
В процессе выполнения процедуры train для построения графика точности обучения также применяется функция plotpcrf, и во многих случаях этого бывает достаточно для оценки процедуры обучения. Однако функция plotpcrf позволяет оформить графики результатов обучения и по завершении этой процедуры, используя дополнительные аргументы. Например, выполняя обучение с предельной точностью, заданной по умолчанию, на заключительном графике можно указать требуемую точность и оценить длительность обучения (рис. 11.71): plotperf(tr, 0.005) % Рис.11.71 Точность - 0.002. тр«6уеим ■ 0.005 V.,: :г- Рис. 11.71 Для достижения требуемой точности обучения, равной 0.005, требуется не более 10 циклов. Сопутствующие функции: TRAIN. ERRSURF, PLOTES | Вычисление и построение графика поверхности ошибки для нейрона Синтаксис: ES = errsurf(p,t,wv,bv,f) plotes(wv,bv,ES,v) Описание: Функция ES = errsurf(p, t, wv, bv, f) вычисляет массив ES, описывающий поверхность ошибки для нейрона с одним вектором входа р размера 1 xQ, одним вектором целей t размера I xQ; также должны быть заданы векторы весов wv и смещений b и функция активации нейрона f. Функция plotes(wv, bv, ES, v) строит график поверхности ошибок и линий уровня для нейрона в зависимости от весов wv и смещений Ь, если задан массив ES, вычисленный с помощью функции crrsurf. Для удобства изображения поверхности в трехмерном пространстве можно изменять значение вектора v, который задаст направление угла зрения, по умолчанию вектор v равен [-37.5, 30]. И. Формирование моделей нейронных сетей 451
Пример: р = [3 21; t = [0.4 0.8]; wv = -4;0.4:4; bv = wv; ES = errsurf(p,t,wv,bv,'logsig1); plotes(wv,bv,es,[60 30]) % Рис.11.72 Результат построения представлен на рис. 11.72. Поверхность ошдБок Линии уровня Рис.11.72 Сопутствующие функции: PLOTEP. PLOTEP I Построение траектории обучения на поверхности ошибки Синтаксис: h = plotep(w,b,e) h = plotep(w,b,e,h) Описание: Функция h = plotep(w, b, e) строит изображающую точку на графиках поверхности ошибок и линий уровня, построенных с помощью функции plotes. Входные аргументы: w - текущий вектор весов; b - текущий вектор смещений; е - текущая ошибка. Выходные аргументы: h - дескриптор, содержащий информацию для построения изображающей точки. Функция h = plotep(w, b, e, h) - это рекуррентная форма вышеописанной функции, которая позволяет построить траекторию движения изображающей точки. 452 Нейронные сета. MATLAB б
Применение функции: Возможность применения функции plotcp для построения траектории обучения в пространстве настраиваемых параметров поясняется нижеприведенным script-файлом, который описывает сценарий построения такой траектории. Читатель может реализовать этот сценарий на своем компьютере. Авторы предполагают разместить наиболее интересные примеры расчета нейронных сетей в виде М-файлов на сайте www.mathworks.ru. Данный сценарий обязательно будет включен в число этих М-файлов. Script % Задание обучающей последовательности P=l:8;T = sin(P); % Построение поверхности ошибок w_range = -1:0.2:1; b_range = -1:0.2:1; ES = errsurf(P, Т, w_range, b_range, 'purelin'); plotes(w_range, b_range.ES); % Формирование нейронной сети maxlr = 0.40*maxIinlr(P, 'bias'); net= ncwlin([-2 2], 1, [0], maxlr); % Задание начальной точки subplot(l,2,2); h = text(sum(get(gca, 'xlim'))*0.5 sum(get(gca, 'ylim'))*0.5, "*Укажите точку*'); set(h,'horizontar, 'center', 'fontweight', 'bold'); [net.IW{ 1,1} net.b{ 1}] = ginput(l); delete(h); % Построение траектории обучения limiting = net.trainParam.epochs; Hmloop = limiting+1; net.trainParam.epochs = I; nct.trainParam.goal = -001; net.trainParam.show = Inf; h=plotep(netIW{ 1}, netb{ 1}, rnseCT-sim(net, P))); [net, tr] = train(net, P, T); r = tr; epoch = 1; cont= 1; while (Iength(r.epoch)<limloop & cont) epoch = epoch+I; [net, tr]=train(net, P, T); if length(tr.epoch)> 1 h = plotep(net.IW{ 1,1}, net.b{ 1}, tr.perf(2), h); r.cpoch = [r.cpoch epoch]; r.perf = [r.perf tr.perf(2)]; r.vperf =[r.vperf NaN]; r.tperf = [r.tperf NaN]; else cont = 0; end; end; 'Поверхность ошибки' 'ШШ Рис. 11.73 / /. Формирование моделей нейронных сетей 453
На рис. 11.73 показан результат выполнения сценария для построения траектории обучения в пространстве настраиваемых параметров. Траектории обучения наглядно видны на графиках линий уровня. Сопут стеующи е функц ии: ERRSURF.P LOTES. Информация о сети и ее топологии DISP, DISPLAY Вывод на экран свойств нейронной сети Синтаксис: disp(net) display(net) Описание: Команда disp(net) выводит на экран свойства нейронной сети с именем net. Команда display(nct) выводит на экран не только свойства нейронной сети, но и ее имя. Пример: Создадим персептрон и выведем на экран его свойства: net = newp([-l l; 0 2],3); display(net) net = Neural Network object: architecture: numlnputs: numLayers: biasConnect: inputConnect: layerConnect: outputConnect: targetConnect: numOutputs: numTargets: numlnputDelays: numLayerDelays: 1 1 [1] [1] [0] [1] [1] 1 (read-oj 1 {read-o] my) nly) 0 (read-only) 0 (read-o: subobj ect structures: inputs: layers: outputs: targets: biases: inputWeights: layerWeights: functions: adaptFcn: initFcn: performFcn: trainFcn: {lxl cell} {lxl cell} {lxl cell} {lxl cell} {lxl cell} {lxl cell} {lxl cell} 1 adaptwb' 'initlay' 'raae' 1trainwb' nly) of inputs of layers containing containing containing containing containing 1 1 1 1 output target bias input weight no layer weights 454 Нейронные сети. MATLAB 6
parameters: adaptParam: .passes initParam: (none) performParam: (none) trainParam: .epochs, .goal, ,max__fail, .show, .time weight and bias values: IW: {lxl cell} containing 1 input weight matrix LW: {lxl cell} containing no layer weight matrices b: {lxl cell} containing 1 bias vector other: userdata: (user stuff) Справка: help network/disp help network/display Сопутствующие функции: DISP, SIM, INIT, TRAIN, ADAPT. PLOTSOM I Отображение топологии карты Кохонена Синтаксис: plotsom(pos) plotsom{W,D,nd) Описание: Функция plotsom(pos) отображает топологию карты Кохонена в виде узлов N-мерной сетки, используя массив координат узлов размера NxS, помечает узлы красным цветом и соединяет их линиями. Координаты узлов сетки рассчитываются с помощью М-функций gridtop, hextop, randtop. Размерность сетки при использовании функции plotsom не должна превышать значения 3; если размерность сетки больше, то выводятся только 3 координаты. Функция plotsom(W, D, nd) строит сетку в пространстве весов, задаваемых матрицей W размера SxN, если заданы матрица расстояний D размера SxS и евклидово расстояние nd между соседними нейронами, по умолчанию равное 1. Пример: Рассмотрим способы отображения двумерных и трехмерных карт Кохонена; для этого с помощью М-функции gridtop рассчитаем сетку с прямоугольной топологией: pos = gridtop(4,3); plotsom(pos) % Рис.11.74,а Для отображения двумерной карты Кохонена в пространстве весов зададим случайную матрицу весов W размера 12x2 и вычислим матрицу расстояний D на выбранной сетке: W = rand(12,2); D = dist(pos); plotsom(W,D) % Рис.11.74,б У/. Формирование моделей нейронных сетей 455
Neuron Positions 2.5 2" О- •0.5 0 0.5 1 1.5 2 . 2.5 3 positionfl,)), . Положение нейронов в пространстве весов Рис. 11.74 Выполним аналогичные построения для трехмерной карты Кохонена: pos = gridtop(4,3,3); plotsom(pos) % Рис.11.75,а D = diet(pos); W = rand{36,3); plotsom(W, D) % Рис.11.75,б ■Гv *'"' ■ -: * ПЬложвнйя^нейронов:?Д ."2 -л -:.' 1 ; posilion(1,i) , Положение нейронов в пространстве весовv-"x'! I щя ■ЩаЬ Рис. 1L75 Сопутствующие функции: NEWSOM, LEABNSOM, 1NITSOM. 456 Нейронные сети. MATLAB 6
GRIDTOP Расчет сетки с прямоугольной топологией Синтаксис: gridtop(dim1 ,dim2,...1dimN) Описание: Функция pos = gridtop(diml, dim2, ..., dimN) рассчитывает положения нейронов на N-мерной сетке с прямоугольной топологией, если задано число нейронов diml по раз- А' мерности г, и возвращает массив координат узлов pos размера NxS, где S = TTdim - • 1=1 Пример: Рассчитать положения нейронов на четырехмерной сетке с прямоугольной топологией размера 5x4x3x2 и выполнить попытку построить график. pos = gridtop(5,4,3,2); plotsora(pos) % Рис.11.76 Warning - PLOTSOM only shows first three dimensions. Предупреждение -PLOTSOM выводит только З размерности. Положении нейронов pOEilion£2,)>'t .0 iOt, :.7Л ••. -:\:\-:^л ' Vf/.-v.-.^--' -. -. .. Рис. 11.76 В результате будет построен график только по трем последним размерностям (рис. 11.76). Сопутствующие функции: НЕХТОР, RANDTOP. НЕХТОР Расчет сетки с гексагональной топологией Синтаксис: pos = hextop(dim1 ,dim2,...,dimN) Описание: Функция pos = hextop(dimI, dim2, ..., dimN) рассчитывает положения нейронов на N-мерной сетке с гексагональной топологией, если задано число нейронов diml по раз- Л' мерности i, и возвращает массив координат узлов pos размера NxS, где S = TTdim;. (=i Пример: Рассчитать положения нейронов на трехмерной сетке с гексагональной топологией размера 5x4x3 с 60 нейронами и построить график их расположения //. Формирование моделей нейронных сетей 457
pos = hextop(5,4,3); plotsom(pos) % Рис.11.77 4t/>p4n:t Рис. 11.77 Сопутствующие функции: GRIDTOP, RANDTOP. Расчет сетки со случайной топологией RANDTOP 1 Синтаксис: pos = randtop{dtm1,dim2,...,dirnN) Описание: Функция pos = hextopfdiml, dim2, ..., dimN) рассчитывает положения нейронов на N-мерной сетке с гексагональной топологией, если задано число нейронов dimi по раз- n мерности /, и возвращает массив координат узлов pos размера NxS, где S = ]~[ dim.. Пример: Рассчитать положения нейронов на трехмерной сетке со случайной топологией размера 5x4x3 с 60 нейронами и построить график их расположения, pos = randtop{5,4,3); plotsom(pos) % Рис.11.78 fO*.t»npj|} >. Сопутствующие функции: G RIDTO Р, НЕХТО Р. __ Рис. 11.78 Нейронные сети. MATLAB б
NNTOOL Вызов графического интерфейса пользователя Синтаксис: nntool Описание: Команда nntool открывает окно Network/Data Manager (Управление сетью/данными), которое позволяет управлять вводом и выводом данных, создавать, обучать и моделировать нейронные сети. Подробно работа с графическим интерфейсом пользователя ППП Neural Network Toolbox описана в разд. 1.2. 11.9. Моделирование нейронных сетей и система Simulink Функции моделирования сети f SIM I Моделирование нейронной сети Синтаксис: [Y,Pf,Af,E,perf] = sim(net,PlPi,Ai,T) [Y,Pf,AftE,perf] = sim(net,{Q TS},Pi,Ai,T) [Y.Pf.Af.E.perf] = sim(net,Q,Pt,Ai,T) Описание: Функция [Y, Pf, Af E, perf] = sim(net, P, Pi, Ai, T) выполняет моделирование-нейронной сети и имеет следующие входные и выходные аргументы. Входные аргументы: net - имя нейронной сети; Р - массив входов; Pi - начальные условия на ЛЗ входов, по умолчанию нулевой вектор; Ai - начальные условия на ЛЗ слоев, по умолчанию нулевой вектор; Т - вектор целей, по умолчанию нулевой вектор. Выходные аргументы: Y - массив выходов; Pf - состояния на ЛЗ входов после моделирования; Af- состояния на ЛЗ слоев после моделирования; Е - массив ошибок; perf - значение функционала качества. Заметим, что аргументы Pi, Ai, Pf и Af являются необязательными и применяются в случае динамических сетей с ЛЗ. Входные аргументы Р и Т могут иметь 2 формата: cell array и double array. Формат cell array наиболее прост для понимания и соответствует последовательному представлению данных. 11. Формирование моделей нейронных сетей 459
Последовательное представление-данных. Каждую строку массива ячеек можно рассмат- . '<• ривать как временную последовательность, и тогда описание многомерной сети может быть выполнено следующим образом: ,•■.-- , "'-..■'"''.- Р - массив ячеек размера NixTS, каждый элемент которого Р {i, ts} - числовой массив: p&jMepaRixQ; -;;»"..---- ■;' '" ■ ■' "- ■■ i ' '=..■■.:-■_ ... Т-массив,H4eeK.pa3MepaNtxTSj, каждый элемент которого P{i, ts}.r числовой массив paaMepa-yixQ;^.;;;^,^-'-:^^ 'V-'-:•-„-' ■:-:-"V" :'.-■' Лг/ ":;-:>-'-.";"""г-^":■;--i,(-: V-.-.'v. <V.'; ~'Л?..-:.-;;'(:\*~ ? Pi -массив ячеек размера NixID, каждый элемент которого Pi{i, k} 7 числовой массив ? pa3Mepa^RixQ; у^'*Н;Лч..^^; v : ^v^.^^.i ^..!i-::'''^.::^i ^^'ч:-: :.»;<-; ■■. , i Ai - массив ячеек размера NIxLD, каждый элемент которого Ai {i,- к}. - числовой мае- 4 сив размера .SixQ; '■■ '.'. .:-.,.- .,. Y- массив^ячеёк размера NpxTS, каждый элемент которого Y{i,ts} -числовой масг-; *..; сив размера UixQ;T '■": '""J ' -".*■"■■■" ;\;»ч-а--~--~.: •.-■-■"•.-•; --«-;--- -=:v-- -.-■■ .- .__-..j. Pf-массив ячеек размера NixID, каждыйэлемент которого Pf{i, к} -числовой массив г] размераRixQ< ;; .'; ;•:. ;; '|. Ч"■'./ ' ': ' . "' ■■'' ;i. ' Af-массив ячеек размера NIxLD, каждый элемент которого Af{i, k} -числовой масг ■- сив размера SixQ. ': - '''' ' - '-' " - Параметры описания массивов ячеек и их связь с параметрами сети показаны в следующей таблице. - -■•'■ г--.-.■■=' '■-■■- *?.■?.}. \,у-' :■■■■:...<■.■:■■ :v. ..,'"• '■■': ' ■■'■ Параметр описания . Ni '■'- ni;: = NO"; .Nt. -..,;. ■; .Ю TS Q-. LD Ri ..-; Si ":*■ . Vi . - Ut" ■ Параметр сети netnumlnputs rieLnumLayers;' net.numOutputs- netnumTargets . net.numlnputDelays. : :^.- >.,-i.::M^:L netnumLayerDelays net.inputs{i}.slze net.layers{i}.size:. _■_ net.targets{i}.size -r\ net.outputs{i}.size ■'■'::^ "' Назначение -.. t. . Количество векторов входа -. _ ..Количествослоев'■■:' .; ' ',/; .",.'.. ... г Количество выходов Количество целевых выходов ■>■■■. -!. *"'--/ v Максимальное значение задержки на входе ";' •• Число шагов по времени '""' . ' и--;- ": ' Количество реализаций для фиксированного момента "времени -':----■-*-"""•'---;■■*.■ '-•■'■'^-' -v- ■■■ '--"- Максймальныезначения задержек для слоев Количество, элементов i-го вектора входа: =j ■--■ *•' Количество нейронов i-гослоя'ч.ч--'.'.: ; - ;ггл Количество элементов i-ro вектора цели ■■•■',--' *' Количество элементов i-ro вёктора'вы'хода ■. Столбцы массивов начальных условий Pi, Pf; Ai, Af упорядочены'следующим образом: . -: ■; Pi{i, k} fr значение начальногоусловия для-линии задержкй./-го входа в момент вре- MeHHts = k-ID; . > .. ' " -•'. ,..': •'„.:'■>' ~_\>rj!=-r,:-;_.■■.--••■•.-. ■" . = <::: Pf[i, к} -значение начального условия для линии задержки t-ro входа в момент времени.ts=TS+kV ID; Л.^-.. ^..•;.v-^..;V::;:K r..-: -. ^.r^l..f = .ч =..4 Л ='■:> .V --A-" " = :-:V'.:-:*Y. - 460 ..: Нейронные cemurMATtAB 6
Ai {i, к} - значение начального.условия для-линии задержки i-то слоя в момент времени ts -k-LD;:. ; ■_.,-.■- ..,. .. ,л:..,.. ;- ,.:...j> ч." ■..-■■■; и^^'^и.л ':-,n . .^-.-..•■_ /'■-■;( Af {i, k} - значение начального условия для линий задержки i-грслоя в момент време-, HHts = TS.+ k-LD.. ■..,, ''..;:-г;.-.,-=:?. ""-v ■'-.: /. • '•"/ ""j:. \ J;. '' Г '"'"' Групповое представление данных можно использовать только при адаптации статических сетей (TS =1). При этом следует помнить, что при переходе от формата последовательного представления даннь1х cell array к формату группового представления double array массив ячеек, содержащий, например, Ni. числовых массивов размера RixQ преобразуется ' ■- " ' ' ■ . <>:--?-«::-: . --' -^Л';:и ;-'..- в единственный числовой массив размера ?Z-Hi XQ- '*"-' ;А ", ■-. ^/' Следующая таблица поясняет связь этих форм представления. "^7" V ~. Аргумент'.. _ Р --Т pi " .Га» .,-..* Y ■'■- Г ГрГГ;Г -;:::;'^г'.-:й ...'"'■'-"■. :Формат -.-. >;-7-.:. Cell array-: ,■•: •.. Size(P) •- ..,NiXi';' N,xl NjxID . ,; NiXLD ■ ■ > i ■ ;."Noxl ytijxro;"V :;■;.; NlXLp---' Size(P{I,l}).. .^ ...Rp<Q, .; ""-. VixQ' '-■- RjxQ ./"SixQ;u " UjxQ. ;- ;;:;';Йх£;^ r-fV3--Six.Q-^i;;v . -":■ .Double array"•:**■ . v :■*.'.- Size(P>fAo: . ■ ir,,i :;'v%;.^,,^ : 1=1 .-■-■»•-•■-'■^- -■■•. ■•-:> i;A/'x(/D*e)' ■..^^p;*^^L^ " 1=1 ; ,:..." ..." ,. Функция [Y, Pf, Af, E, perfj = sim(net, {QTS}, Pi, Ai.T) применяемся для моделирования динамических сетей без входов, при последовательном представлений1 данных.;\ Функция [Y, Pf, Af, E, perfj = sim(net, Q, Pi, Ai, T) применяется для моделирования динамических сетей без входов при групповом представлении данных.. 11': Формированиемо_депей нейронных сетей 461
■ ■ ." " ■:■ -:■ : ■ - " ■. .-■■-■ ' "■■'" -"- . ' " -. ~~-'<^'ШЩ Примера : ••..■:-.:- ■:,■■..:•'. .-- ,, .. / :';v;v./':.-./ .г.:: . '-• .■ -.м- f. ■. ; : ■ - .■"''. Ч>; '" ("^? Создадим нейронную сеть персептрона с одним слоем и двухэлементным входом'; ./f- с диапазоном' значений [0 1] 'и одним нейроном: '" ' "' --''"'■ ■ ' - .:; ';■.:.'■>■; net = newp(tO 1;0, 1],1); ■-,-''' : - ,'"' ..'-"—:Л;'--*Й' .. Теперь мс^офомодешгюватьперс^^ i- , я" ров входа:. 1 вектор с двумя элементами, группа из дивекторов с тремя элементами, послеУ • '-■ -^vf,. довательность изТгрех векторов, что соответствует различным формам представления данных:'.. 'Sj'f- pl = [.2;: .9]; al = sim(net,pl) ; ;. ": \sv 3 .7] ;;a2'-.= :"sim(net,p2) '-'< •,'.-i-^':--;;: ,Vr- -"• ->.. r '-'■'■ '•.-..-^ ; £*■*■' . 3 ] [ . i; '". 1 j\} ; аЗ; = Sim (net, p3) , " -&• P2 P3 al" a2 a3 = = = =- = [.2 {[.2, ■1- 1. [1] . .5 .1 • .9] 1 [1] r I .9 . .5; -. ■1' [1] В данном случае в качестве результата выводятся только выходы нейрона! л Создадим, динамическую однослойную линейную сеть с двумя нейронами, трехэле^ ментным входом с диапазоном значений [0;2] и ЛЗ на входе [0 1]:" : • net = newlin([0 2;0.2;0 2],2([0 1])г Линейный слой моделируется с последовательностью из двух векторов входа для за-" данных по умолчанию начальных условия на ЛЗ::* pi =.{[2; 0.5; 1* [1;: 1.2? 0;1]>; ; /^ ; [yl,pf] = sirii(net,pl): '■•■„;-_■ yl =. " [2x1 double];'. '■" '[2x1 double]" ■" ' '.; " " "■ ' ■' ' ''" ; -;"' pf '= , [3x1. double]: -' ";-1'..-f -, i';'- .'*■:■■<>■>■- '- ' '! : ■ '* "' - Затёмэтотслой моделируется еще для трех векторов, используя состояния на элемент тах задержки как новые начальные условия: \ v.. ; Р2 ?» {[0.5; 0.6; 1.8]: [1.3; 1.6; 1.1]г [0.2; 0.1; 01}; :; .;'■'.''" £y2,pf] ,=. sim{net,p2/pf)_' "■/„.."■■'.„ -_.' -.\- '.'_.'.-■', .-' у2 = " . [2x1'double]: ' ..[2x1 double]. [2x1 double]1 pf ;-' [3x1 double] ■'•'-' ;: \- _■■ '•_,'.. ': ':■._.' Создадим двухслойную сеть Элмана с одноэлементным входом с диапазоном значений [0 1], имеющую 3 нейрона^ функцией активации tansig в слое 1 и 2 нейрона с функцией акти-' вации purelin в слое 2. Сеть Элмана имеет ЛЗ [0 1] при переходе от слоя 1 к слою 2: net = newelm([0 1],[3 2] ,-{ 'tansig' , ■pureiin'}) ; "'■-.' Сеть моделируется для трехэлементного вектора входа, юхгользуя заданные по умол-; чанию начальные условия на ЛЗ: . ' .: .'-..-" .; _ ... - i „.'-"'. . _- -..'„:- ■- •'-_-.-„ ,-. ...pi? (p.2, 0.7; o.i};. ;,.;- t . ^ ■;,.•':. ',. <■ . > ■-,■;* it;'-. '■" ,'"-. "■■'*"" [yl,pf,af,e,perf ], ■"■'«''sim (net, pi) /■ " ■ "- Л; ;."-' ~~ -" './•'-'* yi =■'_ ' ■ [2x1 ^doublei^^л2xi ;a6i^iej\;^/'i:2xi*;dqiabie]::"; ;: ' ~ -.'■'•"'7:*'"' ' :' pf = " Empty ceil'" array':, l-by-0"' : ''" -■,'—.;■■--:• ■• < at = ■ -;,.-^.:;--" ::-н-.:-.:.л.-.---,.^..-_у r-:: •■:'-; _:.;»■• ■-....■■".--_ :V", ■/.■; ..-;■:-: .r g .. [3x1"double] . ■ ; [2x1 double] , 462 . t . .; Нейронные сети. MATLAB 6
*?£! Л i ",petf .:■=■ ■ [e a )]'-'■-"-'- ' ans '="' 0:4779 -1.0069 Л 2x1'. double]-, '.7;0.8153-Л:г ^ -0.5393 -1,:3680 [2xl: double] 1.0238; -0.66271, [2x1 double]- , Выполним еще.1 щаг;Моделирования,;.но,теперь для четырехэлементногр вектора:, входа, используя состояния на элементах задержки;как!новые начальные.условия::'" : ■ р2 ='{0.1 0.9- 0.8 0.4}; .-.! \. к >.:/.,^.;л vv?-.-: -Н ■'. ■■ -% vv ^ S- "- ' 'Ц. v-'. _ [yl#pf/af,e,perfl. »' _eim(.xx^t.rP.2;;.pf,af) .у\, .-;'■';/:■'-. vi',*'':г";. . :.v V •" 4r; ■ y2 = ...:-.t2xl double] л;.{.^' [3x1 'double].--! *\V (2*1- double.]"./:./- [2хГ double] Г pf = \,:r- Empty-cell!;array: 1-byjO ; ' '-"'■' - ■-". ■■ : [3x1 double]- '■.;.-."' '" "' -.. . "■ " " ;-: "■'.' [2x1.; double] :■ ..-.''' :',; './ .- у'■;w>-.?v-'? ."/. .>.,"'"'■. ."':\ Щ .= .- л ,*.. £.2xi,.,double],;.:_,..'[2x3,. double]/ ..-. [2x1, double] ..■ """'-'perf; ="' '"-!"6/'856oV;/: "-:"'. ;'*-■;''*.' V" /■■}/- V"'/!'**. ,! '--I'.'"*' ;'.'■■ ■' ~'-: ~i*{'i}y'!f[:f. :-;'"ч'Я''',!":'^-;r'-!:"^;\::.'-.^' ■'";''; ! ^ .X "" \'"' ■'•::--arisL:= h ~ ' ' ,i?'' ,;; ': ■■'■ -''£ "''■■■.,t ;1^'.:■■"'• 4 • ■■^■'"■^'"' - ="'--i -■ ;'.:•'* ,-. ■- -0.3919,;."- -0.3637 ! ...-0.2766 :/,-.. 0.2490'"",.: -■" ". V.. :>:..! '/'. " -1:2888'"' -i^3479;: ;7-K3269r4;i.--1.0886.;v-;;; /- /.V/-/ Справка: V ;.-. .:-. ...':" -■'.'./"с.."' .:,"■■'.'_ - :V !'/' >/\-';- :;■/'--..'. :';" help network/sim . -'"' S/\ :■''■? Л;;"-,-:,:ЛГг- ; ■i-'.^'J-^ Сопутствующие функции: INIT, ADAPT! TRAIN.'/ :w :; ■,'.■- 'jV: -...-. ,'./' [2x1' double] 1 ■'■'-" "'■'; "!j V"■- - ■v- .-. -;... .^.--•-/ ■;:-;- ," .■ --„-'- ,j " ■ - ."'-: V*.'. ■'■■/ .-- '■'"'■■ ;' 11.9.1. Применение системы Simulink;;; ; ; ];; :■;'■"■; ППП Simulink, входящий в состав прбграммньк продуктов фирмы MathWorks, предна- . значен для моделирования динамических систем, описываемых обыкновенными дифферен- циальнь1миуравнениями.-.С описанием этого пакета можно ознакомиться по книгам. [5Д,52]. -; ,ч : -. Применение. Simulink. дщя моделиррвания нейронных сетей требует расширения биб-; лиотеки стандартных модулей.моделями блоков,.необходимых для.сборки нейронных.- сетей: Это блоки функций взвешивания, накопления и активации, характерные только для;/, нейронных сетей. Эти и другие блоки, необходимые для моделирования нейронных сетей, составляют библиотеку Neural NetworkiToolbox Block Library:'/;^./; v " :-- ':;; ' ■ . Библиотекиблоков для моделирования нейронных сетей"-'-'. ' ''""'":./. : Доступ к библиотеке блоков для моделирования нейронных сетей может быть полу-^:: чей либо из средства просмотра SIMULINK Library Browser (рис. 11.79, д), где имеется^! доступ к библиотекам блоков всех программных продуктов фирмы MathWorks, установи ленных на данном компьютере; либо посредством вызова с помощью команды neural биб" ■■■ лиотеки Neural Network Toolbox Block Library (рис! 11.79, б). . ) /7/ Формированиемоделей нейронных сетейI .'■ -. '.-_■■ 463';
у&г^шЖ^тжт^ж^Ешт- Weight Function*: Select the settings fa ihe subsystem block ' SJ-NHIrpuFuncikx*"' I r- isj Ti«raf« Function»-;; Q Weight Function* . ф- Щ Powef Syjiem Blockset: Ш Щ RwJ-TimeWcikihoa , г К flepcrt Geneva ^5J'Sirnti<*Ei4i«'y. Щ SWefiew ■ ' ■ _ »J| , -*&- -Mel Input Function» ■,s - '.:- ■" HLibiaijc neural JHEQi #vi^^*«;i»:!^--^4«^ V »:> ■=■■> Tiinsltt Function* Nttlcput Function» Wtight functions 3... .-"'Control Syjttmt'* H*umI Nttwofc Toolbox Bio* Ubrjry \: ■■■ ; Copyright <е)109М»9byTh*MithWofe.Ino. «iin-ijntxi iiTi,iW,CTiht. Библиотека блоков функций активации, Раскрытие раздела Transfer Functions в окне STMULINK Library Browser (рис. 11.79, а) либо двойной щелчок левой клавиши мыши в области библиотеки Transfer Functions (рис. 11.79, б) открывают окно, содержащее блоки функций активации (рис. 11.80). ,:. У'..-.-....- "-.'■-- -. > Н Library: neuiaf/Transfer Functions Е;П'Х ': imwmm. com pet hardlim hardlirrtt logslg..1 ' poilin : putelln гкш- m 1Щ-Ш radbas satliri ' S3tlins> softmax tawig tiibas Рис. 11.80 Библиотека блоков функций накопления.Раскрытие раздела Net Input Functions в окне SIMUtINK Library Browser (рис. 11.79, й) либо Двойной щелчок левой клавиши мыши в'области библиотеки Net Input Functions (рис. 11.79,б) открывают окно, содержащее блог ки функций накопления (рис/11. 81-);-: ''' \ ..' -Jr . '" "-'--■"■ • - ■""', /; '-J\ СЗ Library: neural/Net Input.,. £?Ш13 ' *' :-..V ■':■-■ -■"-:-.: .'::.\,;<.. ■■■;.-. — / a:;'©;;"1;;.-;;:,:;- netsum n'etpiod 'Рис:; П.81 Библиотека блоков функций взвешивания. Раскрытие раздела Weight Functions в окне; SIMULINK Library Browser (рис. 11.79, а) либо двойной щелчок левой клавиши мыши в области библиотеки Weight Functions (рис. 11.79, б) открывают окно, содержащее блоки функций взвешивания (рис. 11.82). ■ 464 Нейронныесети.МАТЬАВ 6
C3 Library: neuial/Weight Functions &EH53 у;тйс. 11.82''".;. .""';; Эти функции выполняют взвешивание вектора входа, используя формат вектора весов в виде вектор-строки. Поэтому для взвешиванш!'векторов входа с помощью матрицы весов требуется S блоков функций взвешивания, прлислу нейронов в слое.-. .-•;■ :";' Библиотека блоков управляющих устройств для моделирования систем управления. Раскрытие раздела Control Systems в окне SIMULINK ПЬгагу Browser (рис. 11.79»й) либо двойной щелчок левой клавиши мыши в области библиотеки Control Systems (рис. 11.79, б) открывают окно, содержащее блоки функций для-моделиррвания управляющих устройств систем управления, а также блок осциллографа Graph для построения предельных циклов (рис. 11.83). ' . ; ' Model Reference Controller NARMA-L2 Controller MN Pradidiv* Controller щ^^^р о хгчо Cuph \ /;;." -_,_".. 'Рис.и,©-■_-'•--..;--■■;:"'.'-'-". •■: Vv-■-.-•'■.-:'v:. - Подробное описание функций, реализуемых перечисленными блоками, можно найти в соответствующих разделах книги. - " . v у *:: ' ,: ■''■.' '.'" Построение моделей нейронных сетей '. - GENSIM , | Формирование S-модели нейронной сети Синтаксис: -. .•'-' .. .. Г ^ gensim(net,ST) . Описание: "''•'-' ' ■ *' ' ; . '■■'.'' -.'"-'"",■ ' '. Функция gensimfnet, ST), формирует Бт-модель нейронной сети с именем net для ее запуска в среде системы Simulink; аргумент ST, задает'такт дискретности, который необходим для моделирования динамических сетей. Если сеть не имеет ЛЗ, т. е. является статической' системой,'то значение ST следует задать: равным;-1,. что соответствует неопределенному такту дискретности. -.. .:■ ^ .■:•-' .--• //. Формирование моделей нейронных сетей 465
Пример: ■/'.-гЛ"..•"" ■..'.' У- '■'.. 'Г'. I i' • .'.-"!{•'":'С /'' ^-: : V.~o;' '-Создадим однослойную линейную сеть, реализующую следующее соотношение; -у: меящу входом и целью: : ,;' : .'•., 1. ' ":' - .■■;■' ■ .'■-■;':'' . '■ -., "'' ,' Р = [12 3 4'5]; ":' = ' ,v""' ■■'"";. \ ■] ' т = [1 з 5 7 91; \Л :. ■■'.- ■'-, -■■ ..".; - net =, newlind(P,T) ; Для того чтобы сформировать Згмодель этой сети, используем команду gensim(net,-l), Ч Рис. 11.84 ''•;--'■ '- В.результате откроется окно системы Simulink с S-моделью нейронной сети, которая • ■-.'-'". J включает блоквхода, блок нейроннойхети и блок осциллографа (рис. 11.84); , * ; - * "] ; Нажатие кнопки Toggle model browser (Включить средство просмотра модели) пере- ' j водит окно системы Simulink в другое состояние (рис. 11.85). , * .'; '"-■ * :; V. -■ -; Л > Окно Simulink дополняется средством- просмотра: модели, расположенным.' слева - ; " , от схемы сети;:Включение кнопки Show library 1тк8:и:сосёднёй с ней Browse masked ^; V; subsystems позволяет раскрыть описание структуры нейронной сети и просматривать, её I элементы простым выбором того или иного элемента!струкгуры..Рис. 11; 86; a-wc, поясня-- ; 1 ет эту возможность. -■. -,_. ■ _~- ■*'- " \- -":■' •"■■■- :/,;Ч'~У\ ■:-.'■] 466> ./ . ""'■".: '-- -■ j.'- ''>i=: . Нейронные сети: MATLAB.6. .- ■ ■ . -•.'•■ ..-..- -i
£#Щ$гШ.,_. в ■ . ' ■$$ untitled 1=1- S\ ШИТ&ИЩЦ ■'' • ■ --Й-Э Layer 1. • ..... -■,; "v.'L gjDefysi; '/. ■:. в iiwiuf" -." . -'-■■ • " !.;. В-Ш doJprodl .. }.'-'. - c'^DolPiodoct .. .","■ ■■-"'■ •l-S}PuteBn " : >--■■■... >{11 . Lay«1 -..; vW- ?" Й-Ш NeuralNetwork: {■•S3 Delay* 1 i, &-igj dotprpdj ■'-; ., -I . U-S Dot Product: -: l-Щ puteSn. S-H untitled Й-Ш Neural Netwoik --.-a-j=3.lajw1 ф>Ш wn.n- !. S-^J dotprodl ,.. | '--'gj Dot Product !-s§] puielin . ' pW •:,.P<J{1.1}. ' " ^ »- Wt« -''■■ T» •«■ V? ' * a-M "riffled".. Б~Ш Neua|Netwoik "' >'?*---, V.ё^Ш-LaJrer 1 - -i-C^ ?'".--' Г '" -V " J B-S**P««?:".--" ' ! --.'• • '«Ш Dot Product >.. ■ '■- -1—Sj pureCn •чИВ .':<: ..■":"'---.':■! pdp.l},;:..''doJprodl.;' П. Формирование моделей нейронных сетей 467
ушшштшт ■е .... -V ■'s"= • : ::-\ ■.V. >4 |£ untitled'. : ^.™~.~ - - ; Й-.- Ш Neural Network. 'У "lX".::-*; ^ \. ' .. &-|g:i-ai>ett 'v/-"V:!:,;.v ;'' ; i:'/^'■' 'I'"M D^ayi-1 ■ ■'■',■'-'-'v'"'-■'■ - = t> =VVv-"^:&-S: w(№ -•№ И -;^ЪЧк;Ё:-=^1ШШИА:'0' :ШЛ . И;- .J-'Ш: Dot Product л ' -r\V-"-' ч": =Й Р^П >;/ ^:V;';',' G> p JM XD Dot Product B-M'urfiUed:.'-■■''- '"' Б-2Э Neurdl Network. . В-Щ Layer 1 "'""V. ■ - гШ Delays 1 ' Й-ЩМ1.1) I й~^3 dctptodl ...-■- -' ;.. _ j--a "" ''; =■'- 1Й pureBn Product Sum " .' ouj^l 1 - -:В~Щ Neural Network В-Ш Layer V L.'&j Delaj«V . ' ! - В Ш «WpcodT J J—iS Dot Product G> Рис. 11.86 «. -KD ; Для подготовки S-модели нейронной сети (см. рис. 11.85) к моделированию следует ввести значение входного, сигнала, активизируя двойным щелчком левой клавиши мыши: блок InputL Блок входа позволяет ввести значение некоторой константы; введем значение, равное 2 (рис. 11.87, а). ■ ' 468 -л-.-. ---.*-.■:.;;:>- \. ^-Нейронные сети. MATLAB 6
Block Paiametert: рШ -tf *{i> DE3 №# ■'-'■I ■r & ■10' fmgeifwL" 0 ■ Рис. 11.87 ■: : :'^v>- * :i-.-;.i'-:Г" :'j:.'I' '- ;:w ;■.: -^ <■. Теперь можно вьшолнитъ моделирование нейронной сети; выбирая ошщю Start из меню Simulation либо активизируя кнопку Start'simulation на инструментальной панели. После выполнения моделирования активизируем блок Scope, который позволяет увидеть отклик сети на входное воздействие (рис. 11.87, б). Этот отклик равен постоянному значению 3 и свидетельствует о том, что данная нейронная сеть относится к классу статических систем.''.,. Теперь рассмотрим пример моделирования динамической сети. Скатимся к сети Элмана, рассмотренной в гл. 8 и связанной с детектированием амплитуды гармонического сигнала. Сформируем и обучим сеть Элмана: ' '. ■ . * .^ • .' ' pi в sin(l:20); }■--.;" " • .';„:"../".■ :-i..'.T \":_,',.„' J:; -.J'.;.' р2 = sin(l:20)*2; : .'. :•.-—-' -'. .";>.-^ \л-—--:/Ц. "'- tl.= ones(1,20); j .'"..'.-; ; ;: . ■:"'.''-. ■ :■;.-;. / . t2 = ones(1,20)*2; :*:'" ■;;.'",-•-""■ \~ ■_ p = [pi p2 pi p2J; ../лг v t = [tl t2 tl t2]; ■: ,_; Pseq = con2seq(p); :' -'-;•: Tseq « con2seg;(t); -_ R — 1;.. %' Число- ■ элёйенягав ■ вэёо да '* ••' -;'.: '-- '•"•-':- ■'/'.;'' '.'" "■'.' - ■ ;'''::' ■ "■ - ■ - S2 = 1; % Число нейронов выходного слоя Si = 10; % Число нейронов рекуррентного слоя / net = newelm([-2 2], [SI S21, {'tansig','purelin'},'traingdx');! net.trainParam.epochs = 1000;, -.;*-'i."i net.trainParara.enow = 25; net. trainParam.goal = ..0.01;„ s -■'■.*."' "*;: ;:;- . .7; -{ ;. [net/trf. _f" train (net, Pseq, Ts'eq)'; ' "_,.'- .'"..,.-j Создадим S-модель этой сети, дополнив ее блоком То Workspace, который позволяет записать результаты моделирования в виде массива yqut в рабочую область системы МАТЬАВ(рис.11.88,а): - , -'•'"":";; ''-:'\ V -"'''VV' 11. Формирование моделей нейронных сетей 469
gensim(net) Jibuti}—► elij-,;ifW ■ j »[g] p{il V{1| yout To Woitupace о fc. -^ fc * pp.».--J- „, Layer 1 »P> :ap» fcf *^ fc/ К vfU Рис. 11.88 Структурная схема сети Элмана показана на рис. 11.88,6 и представляет двухслойную сеть с обратной связью в первом слое. Задав значение входного сигнала (рис. 11.89, а), выполним моделирование сети и выведем результат в виде графика изменения выхода сети (рис. 11.89, б), используя данные из рабочей области системы MATLAB: stairs(tout(1:5:end),yout) % Рис.11.89,б Block PatanuHwEptU * '"".".:'.' - Otiptf lbs wmlwt :p«ifjd ty Ihe torclatf y&ib' patOTrtra. if •- Г-- 1! I toridant v*e' с a vedor and Irieipet YectoTparametefs«1 ■£)' it cr\, ] ' beat the cordaril value at a 1-D aaaj.'OlbHwke. oiput a roafc vAh"' > i \ the same Лпегмов as the constant vale. ,*■-, .' i:; i.,' >Л,-■ ^ ~-1.1? -PafamtfHf; ■ConsUnivat»:' (7 Inletpretvetidfpafameiwswl,-0^ OK- IjV'Careal Г|;У Нс^ [ '*;-Vsfo4 |- I h 0,- V- J • 1 4..-S-, i : i j-4-4-- ££■; ,?.;,-i4- 9v 1° Рис. 11.89 Сеть Элмана приходит в установившееся состояние к 10-му такту времени. Справка: help network/gensim Сопутствующие функции: G EN SIМ М. GENSIMM Формирование М-файла для моделирования нейронной сети Синтаксис: <имя_файла> = gensimm(net) Описание: Функция <имя_файла> = gensiinm(net) генерирует М-файл для моделирования нейронной сети и размещает его в каталоге C:\WINDOWS\TEMP\matIab_nnet\<HMfl_M- файла>; этот путь доступа соответствует строковой переменной с именем <имя_файла>. 470 Нейронные сети. MATLAB 6
Пример: Сформируем М-файл для S-модели сети Элмана: pi = sin(l:20); р2 = sin(l:20)*2; tl = ones(1,20); t2 = ones(l,20)*2; P = [Pi P2 pi p2]; t = [tl t2 tl t2]; Pseq = con2seq(p); Tseg = con2seq(t); R = 1; % Число элементов входа S2 = 1; % Число нейронов выходного слоя S1 =10; % Число нейронов рекуррентного слоя net = newelm([-2 2], [Si S2] , { 'tansig', 'purelin'}/ 'traingdx') ; net elm = gensimm(net) netelm =C:\WINDOWS\TEMP\matlab_nnet\tpl34040.m Выведем на экран терминала текст М-файла: type<netelm) function [perf,El,Ac,N,LWZ,IWZ,BZ] = tpl34040 (net,Pd,Ai,Tl,Q,TS) %TP134040 Temporary network simulation file. % % [perf,El,Ac,N,LWZ,IWZ,BZ] = tpl34040(net,Pd,Ai,Tl,Q,TS) % net - Neural network. % Pd numlnputs-by-numLayers-by-TS cell array of delayed inputs. % Ai - numLayers-by-nvimLayerDelays cell array of layer delay conditions. % Tl - numLayers-by-TS cell array of layer targets. % Q - number of concurrent simulations. % TS - number of time steps. % returns: % perf - network performance: % El - numLayers-by-TS cell array of layer errors: % Ac - numLayers-by-(numLayerDelays+TS) cell array of layer outputs: % N - numLayers-by-TS cell array of net inputs: % LWZ - numlayers-by-numLayers-by-TS cell array of weighed layer outputs: % IWZ - numLayers-by-numlnputs-by-TS cell array of weighed inputs: % BZ numLayers-by-1 cell array of expanded biases: % Input weights IW1_1 = net.IW{l,l}; % Layer weights LW1_1 = net.LW{l,l}; LW2_1 = net.LW{2,l}; % Biases QOnes = ones(l,Q); Bl = net.b{l)(:,QOnes); B2 = net.b{2}(:,QOnes); BZ = {Bl; B2}; //. Формирование моделей нейронных сетей 471
% Signals El = cell(2,TS); Ac = [Ai cell(2,TS)]; N = cell{2,TS); IWZ = cell(2,l,TS); LWZ = cell(2,2,TS); for ts=l:TS; tsc = ts + 1; % Simulate Layer 1 IWZ{l,l,ts) = IWl_l*Pd{l,l,ts}; LWZ{lrl,ts} = LWl_l*Ac{l,tsc-l}; N{l,ts} = IWZ{l,l,ts}+LWZ{l,l,ts}+Bl; Ac{l,tsc} = tansig(N{l,ts}); % Simulate Layer 2 LWZ{2,l,ts} = LW2_l*Ac{l,tSC}; N{2,tS} = LWZ{2,l,ts}+B2; Ac{2,tsc} = N{2,ts}; El[2,ts} = Tl{2,ts} - Ac{2,tsc}; end; perf = rose (El,net,net. trainParam) ; Сформированный М-файл имеет следующие входные и выходные аргументы. Входные аргументы: net - имя нейронной сети; Pd - массив ячеек задержанных входов размера numlnputsxnumLayersxTS; Ai - массив ячеек начальных условий на ЛЗ размера numLayersxnumLayerDelays; Т1 - массив ячеек векторов целей для слоя размера numLayersxTS; Q - число выборок; TS - длина выборки по времени. Выходные аргументы: perf - значение функционала качества; Е1 - массив ячеек ошибок слоя размера numLayersxTS; Ас - массив ячеек выходов слоя размера numLayersx(numLayerDelays+TS); N - массив ячеек входов размера numLayersxTS; LWZ - массив ячеек взвешенных выходов слоя размера numLayersxnumLayersxTS; 1WZ - массив ячеек взвешенных входов слоя размера numLayersxnumlnputsxTS; BZ - массив ячеек для смещений размера numLayersxl. Последующие операторы М-файла позволяют видеть, как моделируется нейронная сеть. Сопутствующие функции: S1M. 472 Нейронные сети. MATLAB 6
ИНДЕКСНЫЙ УКАЗАТЕЛЬ Команды, функции и операторы ППП Neural Network Toolbox Функции формирования сетей Операторы network Назначение Создание шаблона нейронной сети Персептрон ncwp Создание персептрона Линейные сети newlin newlind Создание линейного слоя Создание линейного слоя путем решения линейного уравнения Многослойные сети newff newfftd newcf Создание сети прямой передачи Создание сети прямой передачи с запаздыванием Создание каскадной сети прямой передачи Радиальные базисные сети newrb newrbe newgmn newpnn Создание радиальной базисной сети Создание радиальной базисной сети с нулевой ошибкой Создание обобщенной регрессионной сети Создание вероятностной нейронной сети Сети для решения задач классификации newlvq Создание нейронной сети для решения задач классификации Самоорганизующиеся сети netwc newsom Создание конкурирующего слоя Кохонена Создание самоорганизующейся сети Кохонена Рекуррентные сети newhop newelm Создание сети Хопфилда Создание сети Элмана
Функции активации и их производные compet hardlim hardlims logsig poslin purelin radbas satlin satlins softmax tansig tribas dhardlim dhardlms dlogsig dposlin dpurelin dradbas dsatlin dsatlins dtansig dtribas Конкурирующая функция активации Функция активации с жесткими ограничениями Симметричная функция активации с жесткими ограничениями Логистическая сигмоидальная функция активации Положительная линейная функция активации Линейная функция активации Радиальная базисная функция активации Линейная функция активации с ограничениями Симметричная линейная функция активации с ограничениями Конкурирующая функция активации с мягким максимумом Гиперболическая тангенциальная функция активации Треугольная функция активации Производная функции активации с жесткими ограничениями Производная симметричной функции активации с жесткими ограничениями Производная логарифмической функции активации Производная положительной линейной функции активации Производная линейной функции активации Производная радиальной базисной функции активации Производная линейной функции активации с жесткими ограничениями Производная линейной функции активации с симметричными жесткими ограничениями Производная функции активации гиперболического тангенса Производная треугольной функции активации типа Функции взвешивания и расстояний boxdist dist dotprod ddotprod linkdisl Максимальное координатное смещение Евклидово расстояние Скалярное произведение * . . Производная скалярного произведения Расстояния связи между нейронами слоя 474 Нейронные сети. MATLAB б
mandist negdist normprod Расстояние суммарного координатного смещения Отрицательное евклидово расстояние Нормированное скалярное произведение Функции накопления netsum netprod dnetsum dnetprod Сумма взвешенных входов Поэлементное произведение взвешенных входов Производная суммы взвешенных входов Производная поэлементного произведения взвешенных входов Функции инициализации init initcon initlay initnw initwb initzero midpoint randnc randnr rands revert Инициализация нейронной сети Инициализация равных смещений Функция готовности сети к инициализации Функция инициализации слоя по алгоритму NW (Нгуена - Видроу) . Функция готовности слоя к инициализации Инициализация нулевых значений весов и смещений Инициализация матрицы средних значений Инициализация случайной матрицы с нормированными столбцами Инициализация случайной матрицы с нормированными строками Инициализация случайных весов/смещений Возвращение к ранее установленным значениям весов и смещений Функции адаптации и обучения adapt adaptwb train trainb trainbfg trainbr traincgb Адаптация параметров сети Функция установки режима адаптации Обучение нейронной сети Групповое обучение нейронной сети Алгоритм обучения Бройтона, Флетчера, Гольдфарба и Шано BFGS) Алгоритм обучения BR с регуляризацией по Байесу Алгоритм обучения CGB на основе метода сопряженного градиента с обратным распространением и рестартами в модификации Пауэла - Биеле Индексный указатель 475-
.trainc ■ ' ;- : tramcgf :traincgp traingd traingda traihgdm ■ : traingdx --•... trainlm """_> trainoss trainr1 *" trainrp-. trains i .- trainscg Обученйё;нейронной сети 'с циклическим представлением вх6да; * Алгоритм Флетчера - РивсаCGF ' '- •"■ч-v- :■■:■ ■ и<-■• Алгоритм Полака ^ Рибейры GGP/- ■ ■-.■.*-.;■-;.-:.: - - ;- Алгоритм градиентного спуска GD ':.-■■. '. * ". Алгоритм градиентного спуска с выбором параметра скорости настройки GD А . . .,. ,.:.=., ..- ^.у^-.. ,^:;■-.. v -г . ■ Алгоритм градиентного спуска с,возмущенней GDM '_;',.■-. Ажоритм.гфадиентнрго спуска с. возмущением иадаптацией ;. параметра скорости настройки GDX-.".v■*; . *" ^ т -*" ™ -"■ "■'"~ \~ 'Алгоритм Левенберга ^ МарквардтаХМ ; ■ : '•-- - •: - - Одношаговый алгоритм метода секущей OSS-О.ъ-i а >?? я. ■■ ■. -. . Обучение нейронной сети'в режиме случайного представления ' ■ входам .-■ -.„.-.""''' -'".'"ч-- !-"> ■■ ■ - -- '•'-;"-'-'-" :: > .. г"-- - ■ Пороговый алгоритм обратного распространения, ошибки Rprop:. .". Адаптивное обучение нейронной сети с последовательным-', /представлением входов:- ".>; т ;--.■■". :: -~;-f_.: -. - Алгоритм обучения SCG -■■:'v г; .-:• ;■ ?v/■',-'■'-Л-;:-->- .-"■■■■ Функции оценки качестаа обучения тае„ Yw; niseo -ir.-■--:■■. msereg sse-ii.-;^. dmae dmse.. dmsereg . dsse - Кригерийгсредней абсолютной ошибки;/.-v?v Г "^ j _ ; = ■-■, ; Критерий средней квадратичной ошибки;;;,:-:: ■*.: . ■ Комбинированный критерий качества!;- -_г ;■.-" ;---■■■''■ ' . ■ ■г Сумма квадратов ошибок обучения :..;-'=■;:■'! Производная критерия средней абсолютной ошибки - Производная критерия средней квадратичной ошибки . Производная/ комбинированного8 критерия. качества •:;;.'-" Производная суммы'квадратов-ошибок ■ "*:0 '. > Функции настройки ■ v " learncon. ?■':'. leamgd -~ leamgdm ,-., . learhh-■'•■ ■"■'"' : Настройка.смещений для слоя Кохонена :-,•:; f ■ • -\ V': - - >- "■ Настройка методом градиентного спуска; .. ., '.]'-. 1 Настройка методом градиентного; спуска с возмущением.. ; ; : Настройка по правилу:Хебба* - -:;:■' - ■ '■ * -V;- 'Я■- >■-•-*■-■ 476'- ' - / Нейронные сети. MATLAB 6
learnhd learnis learnk learnlvl learnlv2 learaos . learnp; . , v Ieampn. ,. learnsom... learnwh" ~- " maxlimr Настройка по правилу Хебба озатуханиём^ '■'/; ::-.Ч'.У;." з - г а-. Настройка по вектору входа" - -; : :"■■',,-.;':. ;,,,";■'."- Г. Г'.._ Настройка весов дляслоя Кохонена... . ,_?ш1. \ „ -..-■•-.. - Настройка весов LVQrceTH по правилу^ LVQ1 -._- .^ >-'. :.,.--.." Настройка весов ЬУ О^сети по правилу; LV Q2 л-; .■ •.! ч. Настройка; по. векторудаьгхода 'л- >а -._ '■-} :-Х\ ;\= -у 1 •:-.-■_".-:)!: [' - \ - -.. j Настройкапараметров-персептрона i~,}. .;r; • .-: у'' ; '■';■' '' Нормированная фунщйянастройки параметров пёрсептрона; ... Настройка весовкартыКохонена^ ~'~ -;>-г-;";."■-4: -- '-".'' ' Настройка методом БйдроуЧ;ХофФа" "-" Г ' : v ri Максимальное, значение параметра скорости настройки для: лйнейнойсети ;""."'■ : ~ ""'' '"■" ;--;'" -г "'":' ;:. J''-"" ■" ';-'--■■■ Функций одномерного7поиска-^;^;;^-::;'■-':| ^' :': - ■:;?'-' -ч*:-1'.-- f. srchbac -- srchbre , ■ srchcha srchgol srchhyb Одномерная минимизация на основе метода перебора с возвратами - Одномерная минимизация методом Брента^-,.,--., - ; Одномерная минимизация на основе метода Чараламбуса Одномерная минимизация методом: золотого сечения Одномерная, минимизация на основе гибридного метода Масштабирование и восстановление"данных:;, postmrimx _ postreg poststd -■; ■■::, premnmx рГерСа ::■"■- prestd. ... tramnmx trapca trastd Восстановление:данных после масштабирования функцией .; 7_ premnmx - =" >-;---^ :■/>*/$- ;;.м'-;; '-''-■ :-;''- о- '■'■*..-- ■ "-'--'""; Постпроцессорная.обработка выходахетих расчетом линейной регрессии' : , ■-.-■■.-; "_.%.;>;■„■ -■=,■ ■ :-Л'Ло---;1 Восстановление данныхпослё применения функций prestd. ■. i Приведение данных к интервалу [-Л. \\д 1- . '■"■'.■■у.- ■ ■") ■ i ■ _,.;\:■ ■, Выделение главных компонентов _•.- •■■г :\: ;-'■-'.:-■>..-■'. ^ . .■ Приведение данных к,нормальному закону, распределения ..- ... . Масштабирование .текущих входов к диапазону' [-1 .1 ] . J:. '.- Масштабирование текущйх'входов с учётом.факторного анализа Масштабирование текущих входов к нормальному закону '. распределения. = ; ;-■■ :;- ; ,■,:■ -';-'-■:j . :'.:i.f;:-v '-. -■'V Индексный указатель- - 477
Вспомогательные функции Утилиты вычислений calca calcal calce calcel calcgx calcjeij calcjx calcpd calcperf fornix getx setx Расчет сигналов сети на заданном интервале времени Расчет сигналов сети на одном шаге по времени Расчет ошибок слоя на заданном интервале времени Расчет ошибок слоя на одном шаге по времени Расчет градиента функционала качества по объединенному вектору весов и смещений Расчет градиента и приближенной функции Гессе для функционала качества Расчет функции Якоби функционала качества относительно объединенной матрицы весов и смещений Расчет запаздывающих входов сети Расчет сигналов и функционала качества слоя Формирование объединенного вектора весов и смещений Извлечение объединенного вектора весов и смещений из описания сети Включение объединенного вектора весов и смещений в описание сети Операции с массивами и матрицами celI2mat combvec concur con2seq ind2vec mat2cell minmax normc normr pnormc quant Преобразование массива числовых ячеек в массив double Объединение выборок разных размеров Создание группы векторов смещений Преобразование группового представления данных в последовательное Преобразование вектора индексов классов в матрицу связности Преобразование числового массива в массив ячеек Вычисление минимальных и максимальных элементов векторов входа Нормировка матрицы по столбцам Нормировка матрицы по строкам Псевдонормировка столбцов матрицы Округление элементов массива до ближайшего кратного базису округления 478 Нейронные сети. MATLAB 6
seq2con sumsqr vec2ind Преобразование последовательного представления данных • в групповое Сумма квадратов элементов массива Преобразование матрицы связности в вектор индексов классов Графические утилиты errsurf hintonw hintonwb plotep plotes plotpc plotperf plotpv plotsom plotv plotvec Вычисление "поверхности ошибок для нейрона с одним входом Диаграмма Хинтона для весов Диаграмма Хинтона для весов и смещений Построение траектории обучения на поверхности ошибки Построение графика поверхности ошибки для нейрона с одним входом Построение разделяющей линии или плоскости в пространстве векторов входа для персептрона График функции качества обучения Отображение векторов входов и целей в виде маркеров Отображение топологии карты Кохонена Отображение векторов в виде линий Отображение векторов входа в виде маркеров Информация о сети и ее топологии disp display gridtop hextop randtop Вывод на экран свойств нейронной сети Вывод на экран имени и свойств нейронной сети Расчет сетки с прямоугольной топологией Расчет сетки с гексагональной топологией Расчет сетки со случайной топологией Графический интерфейс пользователя nntool Графический интерфейс пользователя ППП Neural Network Tool Моделирование нейронных сетей sim gensim gensimm Моделирование нейронной сети f Построение S-модели нейронной сети Формирование М-файла для моделирования нейронной сети Индексный указатель 479
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ ADAPT- .320,475.. ': ADAPTWB-r: 322,475 В BOXDIST,: >05,474-, -,|- DNETSUMr.307,475.: DOTPROD- 298,474' DPOSLIti:- .285,474' DPURELIN- 284,474 DRADBAS* 289,474 ; DSATLIN:-, 286,474. DSATLINS'- 288,474 DSSEf- 377,476 .. DTANSIG.- '296,'fah; DTRIBAS--290,474 -■ ;.- С L- . .■■ _ .'_ CALeAvr'420,'478:' v:" : CALCA1- 422,478 \ : CALCE; 424,478 . . . CALCES->425,478 ч ;- '.-'caijcgx'* 430,478 ;;;. '}■■ CALGJEJJ'•--433,478 -; : CALCJX-432,478 . GALCPD-" 423,478-f;"■■■:• CALCPERF • 429,478' -. CELL2MAT- 436,478 :. COMBVEC- 437,478 . COMPET- 292,474 V :"CON2SEQ- 438,478 ;.- CONCUR- 439,478 ■ ": -;- '■■■ :-- :-~r--: ' ■" ' - - . ".*- '- " : -' >-''■ ■■< ■■ *■-■ '":_ r"' - -i '.' ' - ':.:■'■;.' ■ ' '--■'-: ... .r-- .. .':-•• ''■' '.' DDOTPROD- 298,474. DHARDLIM- -282,474 DHARDLMS ■ -; 283,474 DISP-; 454/479 :-:::- DISPLAY-; 454,479 DIST- 300,474 DLOGSIG- 294,474 :v DMAE;. 381,476, ._. DMSE: 378,476 _ ■, DMSEREG- 379,476 ,/ DNETPROD ■: 309,475 - ERRSURP- 451,479 FORMXV 426,478 G GENSIM- 465,479 . GENSIMM'-j470; 4791 GETX-428,478 GRIDTOP •. 457,479 ■ ; .; H; \r . ■■--.■"■_-. HARDLIM- 282,474 ;-: HARDLIMS- 283,474 НЕХТОР>.457,479^ "-.*. HINTONW- 448J479" HINTONWB - :449,479 .-:■_■..■./.:.:.-':::. ;.-'..rv IND2VEC"'7.440t478. '.iNIT-:31(),:475;;r; INITCON^ 318,475- 480
INITLAY- 312,475: - INITNW ■ ,313,475.--V ■ INITWB:--; 313,475 A .-,." INITZERO- 314,:475 1. LEARNCON • ЗИ^б'^'. LEARNGD- 387; 476 у LEARNGDM> 388,476 >: LEARNK- 476- ';-КЙ - LEARNED v 477- -" -V,' - LEARNIS-. 395,477, - LEARNK- 392,477- LEARNLV1- 389,477,, LEARNLY2:- 391,477-; LEARNOS- -396; 477. ';', . LEARNP -.' 383,477 .''■:.'-.,- LEARNPN-. 384^477 :: LEARNSOM ■ 397,477 . LEARNWH-. 385,477,! ■ LEARNH/; 399 /-, * "■ LEARNHDr -401 "■ . UNKDIST.- .306,474 LOGSIG- 294,474 MAE'-.- 381, 476 . . MANDIST- 303*475 MAT2CELL- 441,478 MAXLINLR. 400,477 "'- MIDPOINT- 3f5,475 МШМАХ- 441,478 MSE- 378,476 MSEREG- 379,476 N NEGDIST- 302,475 NETPROD- 309,475 NETSUM- .307,475~;У: NETWC- 271,473 I'. ^::'"NETWGRk:-v245;473-; ''- • NEWCF- 260,473 NEWELM-•;■■= 277,473 ■/■..- NEWFF- 255,473..: -. v NEWFFTD--._258;:473.. ; NEWGRNN^r 267,473- ■ . NEWHQE - :;280,^473: '*. =.: ''' MEWtlNJf;:-250, 473,■■-..■■ г *■"-"■" NEWLIND- ,253,473 .': I NEWLVQ - • 276,473 . ■::. NEWRi- 248,473..:. ':,■■,.'■ . ._..". NEWPNN -„ 269,473 ... - NEWRB- 263,473 NEWRBE- 265,473-' ■ NEWSOM'C'273,;473- ". NISTTOOLi-459,479 NORMC- '442,478 W NORMPROD- 299,475 ; NORMR^ '442,478 •'. r~- . ■■- ..p.;-.-?-'---, ;<:.<■'■ //' ' .= ' PLOTEP- 452,479% PLOTES - .451,479 :', PLOTPGV-446,479 . :.. PLOTPERF • 450; 479 . ; PLOTPV^ . 445,479 -'"".'... ' ■- . . PLOTSOMr 455,479 PLOTVr 443,479 PLOTVEC •■>< 444,479 ' PNORMC • 442; 478 ; POSLTN- 285,474 : POSTMNMX"- 413,477 POSTREG- 415,477 "'■''■ POSTSTD, 414,477 -. PREMNMX- 410,477 : PREPCA- 477 PRESTD- 411,477 PREPCA- 412 :'PUREUN ■■^284,474 ■" ■■■■ Q QUANT-;r443,478 \- Предметный указатель 481
R RADBAS- 289,474 RANDN- 475 RANDNC- 317 RANDNR- 318,475 RANDS- 316,475 RANDTOP- 458,479 REVERT- 319,475 S SATLIN- 286,474 SATLINS- 288,474 SEQ2CON- 438,479 SETX- 428,478 SIM- 459,479 SOFTMAX- 293,474 SRCHBAC- 409,477 SRCHBRE- 405,477 SRCHCHA- 408,477 SRCHGOL- 404,477 SRCHHYB- 406,477 SSE- 377,476 SUMSQR- 443,479 T TANSIG- 296,474 TRAIN- 328,475 TRAINB- 331,475 TRAINBFG- 365,475 TRAINBR- 373,475 TRAINC- 334,476 TRAINCGB- 361,475 TRAINCGF- 356,476 TRAINCGP- 358,476 TRAINGD- 344,476 TRAINGDA- 346,476' TRAINGDM- 348,476 TRAINGDX- 351,476 TRAINGSCG- 476 TRAINLM- 370,476 - TRAINOSS- 368,476 TRAINR- 337,476 TRAINRP- 353,476 TRAINS- 325,476 trainscg • 363 TRAMNMX- 417,477 TRAPCA- 418,477 TRASTD- 417,477 TRIBAS- 290,474 V VEC2IND- 440,479 482
ЛИТЕРАТУРА Книги на английском языке: 1. Battiti R. First and second order methods for learning: Between steepest descent and Newton's method. // Neural Computation. 1992. Vol. 4, N 2. P. 141-166. 2. Beale E. M. L. A derivation of conjugate gradients in F. A. LootsmaV/ Numerical methods for nonlinear optimization. London: Academic Press, 1972. 3. Brent R. P. Algorithms for Minimization Without Derivatives. Englewood Cliffs, NJ: Prentice-Hall, 1973. 4. Brent R. P. Introduction to Non-Linear Estimation. 1985. 5. Caudill M. Neural Networks Primer. San Francisco, CA: Miller Freeman Publications, 1989. 6. Caudill M., Butler С Understanding Neural Networks: Computer Explorations: Vols. 1,2. Cambridge, MA: MIT Press, 1992. 7. Chen S., Cowan C. F. N.. Grant P. M. Orthogonal least squares learning algorithm for radial basis function networks// IEEE Transactions on Neural Networks. 1991. Vol. 2, N 2. P. 302-309. 8. Charalambous С Conjugate gradient algorithm for efficient training of artificial neural networks// IEEE Proceedings, 1992. Vol. 139, N 3. P. 301-310. 9. Dennis J. E., Schnabel R. B. Numerical Methods for Unconstrained Optimization and Nonlinear Equations. Englewood Cliffs, NJ: Prentice-Hall, 1983. 10. Elman J. L. Finding structure in time// Cognitive Science. 1990. Vol. 14. P. 179-211. 11. Foresee F. D., Hagan M. T. Gauss-Newton approximation to Bayesian regularization// Proceedings of the 1997 International Joint Conference on Neural Networks. 1997. P. 1930-1935. 12. Fletcher R., Reeves С. М. Function minimization by conjugate gradients// Computer Journal. 1964. Vol. 7. P. 149-154. 13. Gill P. E., Murray W., Wright M. H. Practical Optimization. New York: Academic Press, 1981. 14. Grossberg, S. Studies of the Mind and Brain. Drodrecht, Holland: Reidel Press, 1982. 15. Hagan M. Т., Demuth H. B. Neural Networks for Control// Proceedings of the 1999 American Control Conference. SanDiego: CA, 1999. P. 1642-1656. 16. Hagan M. Т., De Jesus O., Schultz R. Training Recurrent Networks for Filtering and Control. Ch. 12.// Recurrent Neural Networks: Design and Applications, L. Medsker, L.C. Jain, Eds. CRC Press, 1999. P. 311-340. 17. Hagan M.T., Menhaj M. Training feedforward networks with the Marquardt algorithm// IEEE Transactions on Neural Networks. 1994. Vol. 5, N 6. P. 989-993. 483
18. Hagan M. Т., Demuth Н. В., Beale M.H. Neural Network Design. Boston, MA: PWS Publishing, 1996. 19. Hebb D. O. The Organization of Behavior. New York: Wiley, 1949. 20. Himmelblau D. M., Applied Nonlinear Programming. New York: McGraw-Hill, 1972. 21. Hunt K. J., Sbarbaro D„ Zbikowski R., Gawthrop P. J. Neural Networks for Control System - A Survey// Automatica. 1992. Vol. 28. P. 1083-1112. 22. Jolliffe I. T. Principal Component Analysis. New York: Springer-Verlag. 1986. 23. Kohonen T. Self-Organization and Associative Memory .2nd ed. Berlin: Springer-Verlag, 1987. 24. Kohonen, T. Self-Organizing Maps, Second Edition. Berlin: Springer-Verlag. 1997. 25. Li J., Michel A. N., Porod W. Analysis and synthesis of a class of neural networks: linear systems operating on a closed hypercube// IEEE Transactions on Circuits and Systems. 1989. Vol. 36, N 11. P. 1405-1422. 26. Lippman R. P. An introduction to computing with neural nets// IEEE ASSP Magazine. 1987. P. 4-22. 27. MacKay D.J.С Bayesian interpolation// Neural Computation. 1912. Vol. 4. N 3. P. 415-447. 28. McCulloch W. S., Pitts W. H. A logical calculus of ideas immanent in nervous activity// Bulletin of Mathematical Biophysics. 1943. Vol. 5. P. 115-133. 29. Moller M. F. A scaled conjugate gradient algorithm for fast supervised learning// Neural Networks. 1993. Vol. 6. P. 525-533. 30. Murray R. D., Sbarbaro N. D. Neural Networks for Modeling and Control of a Nonlinear Dynamic System// Proceedings of the 1992 IEEE International Symposium on Intelligent Control. 1992. P. 404-409. 31. Narendra K. S., Mukhopadhyay S. Adaptive Control Using Neural Networks and Approximate Models// IEEE Transactions on Neural Networks. 1997. Vol. 8. P. 475-485. 32. Nguyen D., Widrow B. The truck backer-upper: An example of self-learning in neural networks// Proceedings of the International Joint Conference on Neural Networks. 1989. Vol 2. P. 357-363. 33. Nguyen D., Widrow B. Improving the learning speed of 2-layer neural networks by choosing initial values of the adaptive weights// Proceedings of the International Joint Conference on Neural Networks. 1990. Vol 3. P. 21-26. 34. Powell M. J. D. Restart procedures for the conjugate gradient method// Mathematical Programming. 1977. Vol. 12. P. 241-254. 35. Purdie N., Lucas E. A., Talley M. B. Direct measure of total cholesterol and its distribution among major serum lipoproteins// Clinical Chemistry. 1992. Vol. 38, N9. P. 1645-1647. 484 Нейронные сети. MATLAB 6
36. Riedmiller M., Braun H. A direct adaptive method for faster backpropagation learning: The RPROP algorithm// Proceedings of the IEEE International Conference on Neural Networks. 1993. 37. Rosenblatt F. Principles of Neurodynamies. Washington D. C: Spartan Press, 1961; :Пер. с англ. Розенблатт Ф. Принципы нейродинамики. М.: Мир, 1965. 38. Rumelhart D. E., Hinton G. E., Williams R. J. Learning internal representations by error propagation. Ed. by D. E. Rumelhart, J. L. McClelland//Parallel Data Processing. 1986. Vol.1. Cambridge, MA: The M.I.T. Press. P. 318-362. 39. Rumelhart D. E., Hinton G. E., Williams R.J. Learning representations by back- propagating errors// Nature. 1986. Vol. 323. P. 533-536. 40. Soloway D., Haley P. J. Neural Generalized Predictive Control// Proceedings of the 1996- IEEE International Symposium on Intelligent Control. 1996. P. 277-281. 41. Scales L. E. Introduction to Non-Linear Optimization. New York: Springer-Verlag, 1985. 42. Vogl T.P., Mangis J.K. et al. Accelerating the convergence of the backpropagation method// Biological Cybernetics. 1988. Vol. 59. P. 256-264. 43. Wasserman P. D. Advanced Methods in Neural Computing. New York: Van Nostrand Reinhold, 1993. 44. Widrow В., Hoff M .E. Adaptive switching circuits// 1960IREWESCON Convention Record. New York IRE. 1960. P. 96-104. 45. Widrow В., Sterns S. D. Adaptive Signal Processing. New York: Prentice-Hall, 1985. Книги на русском языке: 46. Беркинблит М. Б. Нейронные сети. М.: МИРОС, 1993. 47. Уоссерман ф. Нейрокомпьютерная техника. М.: Мир, 1992. 48. Мишулина О. А., Лабинская А. А., Щербинина М. В. Лабораторный практикум по курсу "Введение в теорию нейронных сетей". М.: МИФИ, 2000.204 с. 49. Омату С, Халид М., Юсоф Р. Нейроуправление и его приложения. М.: ИПРЖРБ, 2000. 272 с. 50. Тихонов А. Н. О решении некорректно поставленных задач и методе регуляризации// Доклады АН СССР. Т. 151, № 3. 1963. 51. Лазарев Ю. Ф. MatLAB 5.x. Киев: Издат. группа BHV, 2000. 384 с. 52. Гультяев А. К. Визуальное моделирование в среде MATLAB: Учеб. курс. СПб: Питер, 2000.432 с. 53. Потемкин В. Г. Инструментальные средства MATLAB 5.x. M.: Диалог-МИФИ, 2000. 336 с. Литература 485
Г'Ж^ 54.:: Медведев В. C.j Потемкин В. Г. Gontrol System Toolbox. MATLAB 5'^-студентов'...' *у : !...... ' /Подобщ.ред.В.Г. Потемкина. М.:Диалог-МИФИ, 1999:287с.(Пакетыприклад-"■{'$.. ных программ; Кн. 1)..,;. : ' \ ■ г г :.:. :-К; '. ::v! 55: . Рудаков П. И., Сафонов И.. В. Обработка сигналов и изображений. MATLAB 5,'х \ /h. • /Подобщ.ред.В.Г. Потемкина.М.;Диалог-МИФИ,. 1999.287.с.(Пакетыприкладе V\ "■;...-,.,, ных программ; Кн. 2). .,._':.[_.-..- V- ., •,.,.;-. •.. .'.■'.- l.,r:.-J ■•. '.; ■ ■'■■ ,'.v" .-- -■■;' '''"'";-'Уг ^ 56г";., Лавров К. №,' Цыплякова.Т. П. Финансовая аналитика. MATLAB 6;/Под.'общ.: ;-!.:^ ред. В. Г. Потемкина. М.: Диалог-МИФЙ,.2001. -363. с. (Пакеты прикладных про-V-r- '. ,,-..; грамм; Кн. 3)..^. 'Ъ>\.1.\ ■■ ■■; : •■ ^.■-.■\^-/ ' i s\ "'-■'",:■!.■>, ...> \- V;.-':■':--,:.':>■■ =■ 'б'-^.' 57:. Галушкин А.И. Теория нёйронны'х-.сетеи: Mi:'ИЛРЖРу2000; 4i.6/c.:'^-У-\Х;'"''' ,v.V^ -58:'■- -Галушкин А.йГ Нейрокомпьютеры. М.:ШТРЖЕ< 2000Г 532-Щ г '■ ■:/■] -r-f;!;.;.:^i:-K£: i^^i^/'^V^V^- -т\"-.Ч -// 486 Нейронные сети. MATIAB.&: !1.
^■f ;r~*;: Vi a- Л ОГЛАВЛЕНИЕ Г. tit : Q.-" :."" XXA 1-1^1^1: Д V^Jl.y/JjJcl frf •••«•«•*#**»*«с«Ч«*«*к»«**«я*«««»*«*1»*«к*я»»***»*»«*,*а**»**»к»|*в***««»**а«****в***»**'**«»*»**«**««а»*«в*в**0/ ':. - ВВЕДЕНИЕ .;...i.i«;«^^^-:..«;...I:;:^^^^^ 5 ;T- .:- - ■•- ':■■■' ■-'■. ' :• .- . >.. ,. . . ..= . ,-,-.- .-. К- ЧАСТЬ timn NEURAL NETWORK TOOLBOX^^..-:^^L..^L:.^...;..9 : r 1. СИСТЕМА MATLAB g^LLL^Z^^ J:': ;';.-; ' ^1ЛЛЭПЕ1>А1да6нНАЯСРЕМ :f; ; '"';•' 1.2.С№интерфейсдляПШККЪ.;.„^^^^^ ]t "v 1.3. Демонстрационные ш>имерыПЩ '. I '■::■•■*' i модель нейронами архитектура сйи^^Л1:!:.^.;^..^...:^:;1..зз -|> '■■;■' 2Л: Модель нейрона':.:.^;;:.;;л^..^ "}■.-;. ' " 2.1:1. Простой нейрон:.:....;л.;..^^ :jt>" '''' " 2.1:2. Функцияактивации -X'. .v."i... .*.*.-"; «I--.; JJ- -z-.-.:.";:- >.". ^Л.'--~. Г™ - J.'„V-V.V.V.l-1 - -Tj; ;ЛЛ. .„..54 ;S ; ■ ': 2:1,3. Нейрон с векторным входом :;.л:.;;;::.;.Л::...:..:^.:.:„.;..;.^......:.^:л;;::;,.:..„.^55 /i;_: ■•-_; ;;. 2Х Архитектура нёйр6нных сетей: „;.^U..^;::^::..^:;;^^x;;^:^.;;^:-».v.^.;.36- г г ,:-- 2.2.1. Однослойные сети.........„..:;..,..„.> ...........£;>.......„...............:. '.. ....36 '. i;- ;,\.'-' 2.2.2. Многослойные сети :..^..:..;.^ 38 У ■■'■ : 2.2.3. Сети с прямой передачей сигнала ^...i.,..„2^.....::^^^^.^...Z:^...„... 41 -?•■: 2.3.'Создание^ инициализация и моделиро^ание'с з. обучение нейронных CETEfi^^t.;.:-J:.^..._i^..:...^.^l..:^^.. 47 ' . ..* 3Л. ПРбЦЕДУРЫЛг^^ПТА1^И И ОБУЧЕ^ ;.; 1'- 3.1.1. Способы адаптации и обунен]ия.'......\..^.....:. :..:....:'; 52 '■..jf: ■:-; 3.2. Методы обучения».., Jj!...„!..„.;!,l..........l...,.v : \|:':' . • :.: V -.' 3.2.1. Обучение однослойной сети, ..Л.„,.„~...„.........^,.,...'..^::.;>L:... 61 ■I I; л <=., ■'■■ 3.2.2. Обучение многослойной сети ..........,;„.v..;..v*.......'........../;»v.......:^.^:--..-»- 62 ;.. '!'■■ '. '._-,." -3.3. АЛГОРИТМЫ ОБУЧЕНИЯ!^ ',' V fo: : 3.3.1. Градиентные алгоритмы обучения.^.^:^..^....,...,.^..^... .....;.;.....67 \Х\ ■ с чс ■ , 3.3.2. Алгоритмы методаярпряженных градиентов ....:....;....W;......Ji„.:.....At.... 75 ~"А<~ : '■-3.3.3. Квазиньютоновы апгоритл№1...:^....1....'<:......^^ ....................t:iu„.Si \ ^| '3.3.4. Алгоритмы одномерного поиска....... -. :. .........:;.....„..... 1---86 цЛ 3.3.5. Расширение возможностей процедур обучения ......:........h..$8 487
4. ПЕРСЕПТРОНЫ 102 4.1. Архитектура персептрона 103 4.2. Модель персептрона 104 4.3. Процедуры настройки параметров 107 5. ЛИНЕЙНЫЕ СЕТИ 115 5.1. Архитектура линейной сети 116 5.2. Создание модели линейной сети 117 5.3. Обучение линейной сети 118 5.4. Применение линейных сетей 122 6. РАДИАЛЬНЫЕ БАЗИСНЫЕ СЕТИ 131 6.1. Сети GRNN 140 6.2. Сети PNN 144 7. СЕТИ КЛАСТЕРИЗАЦИИ И КЛАССИФИКАЦИИ ДАННЫХ 147 7.1. Самоорганизующиеся нейронные сети 147 7.1.1. Слой Кохонена 148 7.1.2. Карта Кохонена 155 7.2.LVQ-CETH -. 167 8. РЕКУРРЕНТНЫЕ СЕТИ 175 8.1. Сети Элмана 175 8.2. Сети Хопфилда : 181 9. ПРИМЕНЕНИЕ НЕЙРОННЫХ СЕТЕЙ 188 9.1. Аппроксимация и фильтрация сигналов ...... 188 9.1.1. Предсказание стационарного сигнала 188 9.1.2. Слежение за нестационарным сигналом 192 9.1.3. Моделирование стационарного фильтра 194 9.1.4. Моделирование нестационарного фильтра 197 9.2. Распознавание образов 199 9.3. Нейронные сети и системы управления : 206 93.1. Регулятор с предсказанием 208 9.3.2. Регулятор NARMA-L2 217 9.3.3. Регулятор на основе эталонной модели 222 488 Нейронные сети. MATLAB 6
ЧАСТЬ 2. ОПЕРАТОРЫ, ФУНКЦИИ И КОМАНДЫ 228 10. ВЫЧИСЛИТЕЛЬНАЯ МОДЕЛЬ НЕЙРОННОЙ СЕТИ 228 ЮЛ. Описание сети 228 10.2. описание элементов сети 232 11. ФОРМИРОВАНИЕ МОДЕЛЕЙ НЕЙРОННЫХ СЕТЕЙ 245 11.1. Модели сетей 245 11.1.1. Однослойные сети : 248 11.1.2. Многослойные сети 255 11.2. Функции активации 281 П.З. Синаптические функции 298 11.4. Функции инициализации 310 11.5. Функции адаптации и обучения 320. 11.5.1. Функции оценки качества обучения 376 11.6. Функции настройки параметров 382 11.6.1. Функции одномерного поиска .' 402 11.7. Масштабирование и восстановление-данных 410 11.8. Вспомогательные функции 420 11.9. Моделирование нейронных сетей и система Simulink.... 459 11.9.1. Применение системы Simulink , 463 ИНДЕКСНЫЙ УКАЗАТЕЛЬ 473 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 480 ЛИТЕРАТУРА 483 ОГЛАВЛЕНИЕ 487 Оглавление 489
144 -v? "< \£l ■Г'. предлагает широкий выбор оригинальной литературы приглашает к сотрудничеству авторов ТЦп; 32СМ-43-77; 320»43«55 '\Л;Ж^Фщё_£2ф-31-гЗ& .. http://www,hiuex.ru/'-diaiog ISBN 5-86404-163-7 Hi I II rum iiwmni wnniiiii ■■■!