Главная страница
Культура
Искусство
Языки
Языкознание
Вычислительная техника
Информатика
Финансы
Экономика
Биология
Сельское хозяйство
Психология
Ветеринария
Медицина
Юриспруденция
Право
Физика
История
Экология
Промышленность
Энергетика
Этика
Связь
Автоматика
Математика
Электротехника
Философия
Религия
Логика
Химия
Социология
Политология
Геология

Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6. В. Г. Потемкин



Скачать 14.83 Mb.
Название В. Г. Потемкин
Анкор Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Дата 26.04.2017
Размер 14.83 Mb.
Формат файла doc
Имя файла Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Тип Книга
#3790
страница 9 из 50
1   ...   5   6   7   8   9   10   11   12   ...   50

3. Обучение нейронных сетей


При решении с помощью нейронных сетей прикладных задач необходимо собрать достаточный и представительный объем данных для того, чтобы обучить нейронную сеть решению таких задач. Обучающий набор данных – это набор наблюдений, содержащих признаки изучаемого объекта. Первый вопрос, какие признаки использовать и сколько
и какие наблюдения надо провести.

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

Нейронные сети работают с числовыми данными, взятыми, как правило, из некоторого ограниченного диапазона. Это может создать проблемы, если значения наблюдений выходят за пределы этого диапазона или пропущены.

Вопрос о том, сколько нужно иметь наблюдений для обучения сети, часто оказывается непростым. Известен ряд эвристических правил, которые устанавливают связь между количеством необходимых наблюдений и размерами сети. Простейшее из них гласит, что количество наблюдений должно быть в 10 раз больше числа связей в сети. На самом деле это число зависит от сложности того отображения, которое должна воспроизводить нейронная сеть. С ростом числа используемых признаков количество наблюдений возрастает по нелинейному закону, так что уже при довольно небольшом числе признаков, скажем 50, может потребоваться огромное число наблюдений. Эта проблема носит название "проклятие размерности".

Для большинства реальных задач бывает достаточным нескольких сотен или тысяч наблюдений. Для сложных задач может потребоваться большее количество, однако очень редко встречаются задачи, где требуется менее 100 наблюдений. Если данных мало, то сеть не имеет достаточной информации для обучения, и лучшее, что можно в этом случае сделать, – это попробовать подогнать к данным некоторую линейную модель.

3.1. Процедуры адаптации и обучения


После того как определено количество слоев сети и число нейронов в каждом из них, нужно назначить значения весов и смещений, которые минимизируют ошибку решения. Это достигается с помощью процедур обучения. Путем анализа имеющихся в распоряжении аналитика входных и выходных данных веса и смещения сети автоматически настраиваются так, чтобы минимизировать разность между желаемым сигналом и полученным на выходе в результате моделирования. Эта разность носит название ошибки обучения. Таким образом, процесс обучения – это процесс подгонки параметров той модели процесса или явления, которая реализуется нейронной сетью. Ошибка обучения для конкретной конфигурации нейронной сети определяется путем прогона через сеть всех имеющихся наблюдений и сравнения выходных значений с желаемыми, целевыми значениями. Эти разности позволяют сформировать так называемую функцию ошибок (критерий качества обучения). В качестве такой функции чаще всего берется сумма квадратов ошибок. При моделировании нейронных сетей с линейными функциями активации нейронов можно построить алгоритм, гарантирующий достижение абсолютного минимума ошибки обучения. Для нейронных сетей с нелинейными функциями активации в общем случае нельзя гарантировать достижения глобального минимума функции ошибки.

При таком подходе к процедуре обучения может оказаться полезным геометрический анализ поверхности функции ошибок. Определим веса и смещения как свободные параметры модели и их общее число обозначим через N; каждому набору таких параметров поставим в соответствие одно измерение в виде ошибки сети. Тогда для всевозможных сочетаний весов и смещений соответствующую ошибку сети можно изобразить точкой
в N+1-мерном пространстве, а все такие точки образуют некоторую поверхность, называемую поверхностью функции ошибок. При таком подходе цель обучения нейронной сети состоит в том, чтобы найти на этой многомерной поверхности глобальный минимум.

В случае линейной модели сети и функции ошибок в виде суммы квадратов такая поверхность будет представлять собой параболоид, который имеет единственный минимум, и это позволяет отыскать такой минимум достаточно просто.

В случае нелинейной модели поверхность ошибок имеет гораздо более сложное строение и обладает рядом неблагоприятных свойств, в частности может иметь локальные минимумы, плоские участки, седловые точки и длинные узкие овраги.

Определить глобальный минимум многомерной функции аналитически невозможно, и поэтому обучение нейронной сети, по сути дела, является процедурой изучения поверхности функции ошибок. Отталкиваясь от случайно выбранной точки на поверхности функции ошибок, алгоритм обучения постепенно отыскивает глобальный минимум. Как правило, для этого вычисляется градиент (наклон) функции ошибок в данной точке, а затем эта информация используется для продвижения вниз по склону. В конце концов алгоритм останавливается в некотором минимуме, который может оказаться лишь локальным минимумом, а если повезет, то и глобальным.

Таким образом, по существу алгоритмы обучения нейронных сетей аналогичны алгоритмам поиска глобального экстремума функции многих переменных. Среди последних следует выделить алгоритмы сопряженных градиентов [12] и Левенберга – Марквардта (Levenberg – Marquardt) [17].

Однако c учетом специфики нейронных сетей для них разработаны специальные алгоритмы обучения, среди которых следует выделить алгоритм обратного распространения ошибки [39, 42].

При использовании алгоритма обратного распространения ошибки сеть рассчитывает возникающую в выходном слое ошибку и вычисляет вектор градиента как функцию весов и смещений. Этот вектор указывает направление кратчайшего спуска по поверхности для данной точки, поэтому если продвинуться в этом направлении, то ошибка уменьшится. Последовательность таких шагов в конце концов приведет к минимуму того или иного типа. Определенную трудность здесь вызывает выбор величины шага.

При большой длине шага сходимость будет более быстрой, но имеется опасность перепрыгнуть через решение или уйти в неправильном направлении. Классическим примером такого явления при обучении нейронной сети является ситуация, когда алгоритм очень медленно продвигается по узкому оврагу с крутыми склонами, перепрыгивая с одного склона на другой. Напротив, при малом шаге, вероятно, будет выбрано верное направление, однако при этом потребуется очень много итераций. На практике величина шага выбирается пропорциональной крутизне склона (градиенту функции ошибок); такой коэффициент пропорциональности называется параметром скорости настройки. Правильный выбор параметра скорости настройки зависит от конкретной задачи и обычно осуществляется опытным путем; этот параметр может также зависеть от времени, уменьшаясь по мере выполнения алгоритма.

Алгоритм действует итеративно, и его шаги принято называть эпохами или циклами. На каждом цикле на вход сети последовательно подаются все обучающие наблюдения, выходные значения сравниваются с целевыми значениями и вычисляется функция ошибки. Значения функции ошибки, а также ее градиента используются для корректировки весов и смещений, после чего все действия повторяются. Начальные значения весов
и смещений сети выбираются случайным образом, и процесс обучения прекращается либо когда реализовано определенное количество циклов, либо когда ошибка достигнет некоторого малого значения или перестанет уменьшаться.

Явление переобучения


Одна из наиболее серьезных трудностей при обучении сети заключается в том, что
в ряде случаев мы минимизируем не ту ошибку, которую на самом деле нужно минимизировать; требуется минимизировать ошибку, которая появляется в сети, когда на нее подаются совершенно новые наблюдения. Весьма важно, чтобы нейронная сеть обладала способностью приспосабливаться к этим новым наблюдениям. Что же происходит на самом деле? Сеть обучается минимизировать ошибку на некотором ограниченном обучающем множестве. Это не отвечает требованиям теории о наличии идеального и бесконечно большого обучающего множества. И это не соответствует той реальной ситуации, когда надо минимизировать конкретную функцию ошибок для заранее неизвестной модели.

Это порождает проблему, которая известна как явление переобучения. Обратимся к задаче аппроксимации некоторой функции многочленом [1]. Графики многочленов часто имеют весьма замысловатые формы, и чем выше степень многочлена, тем сложнее их форма. Если имеется некоторый набор данных, то можно поставить цель подобрать для него аппроксимирующий многочлен и таким образом получить подходящую математическую модель для этого набора данных. Поскольку исходные данные, как правило, заданы с погрешностями, то нельзя считать, что лучшая модель задается кривой, которая проходит точно через заданные точки. Многочлен низкого порядка может оказаться достаточно грубым для аппроксимации данных, в то время как многочлен высокого порядка может точно следовать данным, принимая при этом весьма замысловатую форму, не имеющую никакого отношения к форме истинной зависимости. Последняя ситуация и демонстрирует то, что называется явлением переобучения.

При работе с нейронными сетями пользователь сталкивается с той же проблемой.
Сети с большим количеством весов позволяют воспроизводить очень сложные функции,
и в этом смысле они склонны к переобучению. Сеть же с небольшим количеством весов может оказаться недостаточно гибкой, чтобы смоделировать имеющуюся зависимость. Например, однослойная линейная сеть способна воспроизводить только линейные функции. Если использовать многослойные линейные сети, то ошибка всегда будет меньше,
но это может свидетельствовать не о хорошем качестве модели, а о том, что проявляется явление переобучения.

Для того чтобы выявить эффект переобучения, используется механизм контрольной проверки. Часть обучающих наблюдений резервируется как контрольные наблюдения и не используется при обучении сети. Вместо этого по мере работы алгоритма эти наблюдения применяются для независимого контроля результата. Вначале ошибка сети на обучающем
и контрольном множествах будет одинаковой; если они существенно отличаются, то, вероятно, это означает, что разбиение наблюдений на 2 множества не обеспечило их однородность. По мере обучения сети ошибка убывает, и, пока обучение уменьшает функцию ошибок, ошибка на контрольном множестве также будет убывать. Если же контрольная ошибка перестала убывать или стала расти, это указывает на то, что сеть начала слишком близко следовать исходным данным и обучение следует остановить. В этом случае следует уменьшить количество нейронов или слоев, ибо сеть является слишком мощной для решения данной задачи. Если же, наоборот, сеть имеет недостаточную мощность, чтобы воспроизвести имеющуюся зависимость, то явление переобучения скорее всего наблюдаться не будет и обе ошибки – обучения и проверки – не достигнут достаточно малого уровня.

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

Необходимость многократных экспериментов ведет к тому, что контрольное множество начинает играть ключевую роль в выборе модели нейронной сети, т. е. становится частью процесса обучения. Тем самым его роль как независимого критерия качества
модели ослабляется, поскольку при большом числе экспериментов возникает риск переобучения нейронной сети на контрольном множестве. Для того чтобы гарантировать надежность выбираемой модели сети, резервируют еще одно – тестовое множество наблюдений. Итоговая модель тестируется на данных из этого множества, чтобы убедиться, что результаты, достигнутые на обучающем и контрольном множествах реальны. Разумеется, для того чтобы хорошо играть свою роль, тестовое множество должно быть использовано только 1 раз: если его использовать повторно для корректировки процесса обучения,
то оно фактически превратится в контрольное множество.

Итак, процедура построения нейронной сети состоит из следующих шагов:

  • выбора начальной конфигурации сети; например, в виде одного слоя с числом нейронов, равным 1/2 общего количества входов и выходов;

  • моделирования и обучения сети с оценкой контрольной ошибки и использованием дополнительных нейронов или промежуточных слоев;

  • выявления эффекта переобучения и корректировки конфигурации сети.

Свойство обобщения


При описании процедуры обучения нейронных сетей неявно использовалось предположение, что обучающее, контрольное и тестовое множества являются представительными для решаемой задачи. Обычно в качестве обучающих берутся данные, испытанные на ряде примеров. Если обстоятельства изменились, то закономерности, имевшие место
в прошлом, могут больше не действовать.

Кроме того, нейронная сеть может обучаться только на тех данных, которыми она располагает. Предположим, что известно обучающее множество для системы стабилизации самолета при полете в спокойной атмосфере, а требуется спроектировать систему стабилизации на основе нейронной сети для условий полета при сильных возмущениях. Тогда едва ли можно ожидать от сети правильного решения в совершенно новой для нее ситуации.

Классическим примером непредставительной модели нейронной сети является следующая ситуация. При проектировании системы машинного зрения, предназначенной для автоматического распознавания целей, сеть обучалась на 100 картинках, содержащих изображения танков, и на 100 других картинках, где танков не было. После обучения сети был достигнут стопроцентно "правильный" результат. Но когда на вход сети были поданы новые данные, она безнадежно провалилась. В чем же была причина? Выяснилось, что фотографии с танками были сделаны в пасмурный, дождливый день, а фотографии без танков – в солнечный день. Сеть научилась улавливать разницу в общей освещенности. Чтобы сеть могла результативно работать, ее следовало обучать на данных, где бы присутствовали все погодные условия и типы освещения, при которых сеть предполагается использовать, и это не говоря еще о рельефе местности, угле и дистанции съемки и т. д. [1].

Коль скоро сеть минимизирует общую погрешность, большое значение приобретают пропорции, в которых представлены данные различных типов. Сеть, обученная на 900 "хороших" и 100 "плохих" наблюдениях, будет искажать результат в пользу хороших наблюдений, поскольку это позволит алгоритму уменьшить общую погрешность. Если
в реальной ситуации "хорошие" и "плохие" объекты представлены в другой пропорции, то результаты, выдаваемые сетью, могут оказаться неверными. Примером этого может быть задача выявления заболеваний. Пусть, например, при обычных обследованиях в среднем 90 % людей оказываются здоровыми и сеть, таким образом, обучается на данных, в которых пропорция здоровые/больные равна 90/10. Затем эта же сеть применяется для диагностики пациентов с определенными жалобами, среди которых соотношение здоровые/больные уже 50/50. В этом случае сеть будет ставить диагноз чересчур осторожно
и не будет распознавать заболевание у некоторых больных. Если же, наоборот, сеть обучить на данных "с жалобами", а затем протестировать на "обычных" данных, то она будет выдавать повышенное число неправильных диагнозов о наличии заболевания. В таких ситуациях обучающие данные нужно скорректировать так, чтобы были учтены различия
в распределении данных (например, можно повторить редкие наблюдения или удалить часто встречающиеся). Как правило, лучше всего постараться сделать так, чтобы наблюдения различных типов были представлены равномерно, и соответственно этому интерпретировать результаты, которые выдает сеть.

Способность сети, обученной на некотором множестве данных, выдавать правильные результаты для достаточно широкого класса новых данных, в том числе и не представленных при обучении, называется свойством обобщения нейронной сети.

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

3.1.1. Способы адаптации и обучения


В ППП Neural Network Toolbox реализовано 2 способа адаптации и обучения: последовательный и групповой, в зависимости от того, применяется ли последовательное или групповое представление входов.

Адаптация нейронных сетей


Статические сети. Воспользуемся следующей моделью однослойной линейной сети
с двухэлементным вектором входа, значения которого находятся в интервале [–1 1],
и нулевым параметром скорости настройки:

% Формирование однослойной статической линейной сети с двумя входами

% и нулевым параметром скорости настройки

net = newlin([–1 1;–1 1],1, 0, 0);

Требуется адаптировать параметры сети так, чтобы она формировала линейную зависимость вида



Последовательный способ. Рассмотрим случай последовательного представления обучающей последовательности. В этом случае входы и целевой вектор формируются в виде массива формата cell:

% Массив ячеек векторов входа

P = {[–1; 1] [–1/3; 1/4] [1/2; 0] [1/6; 2/3]};

T = {–1 –5/12 1 1}; % Массив ячеек векторов цели

P1 = [P{:}], T1=[T{:}] % Переход от массива ячеек к массиву double

P1 =

–1 –0.33333 0.5 0.16667

1 0.25 0 0.66667

T1 = –1 –0.41667 1 1

Сначала зададим сеть с нулевыми значениями начальных весов и смещений:

net.IW{1} = [0 0]; % Присваивание начальных весов

net.b{1} = 0; % Присваивание начального смещения

В ППП NNT процедуры адаптации реализуются на основе метода adapt. Для управления процедурой адаптации используется свойство net.adaptFcn, которое задает метод адаптации; для статических сетей по умолчанию применяется метод adaptwb, который позволяет выбирать произвольные функции для настройки весов и смещений. Функции настройки весов и смещений задаются свойствами net.inputWeights{i, j}.learnFcn, net.layerWeights{i, j}.learnFcn и net.biases{i, j}.learnFcn.

Выполним 1 цикл адаптации сети с нулевым параметром скорости настройки:

% Последовательная адаптация сети с входами P и целями T

[net1,a,e] = adapt(net,P,T);

% net1-новая сеть, a-выход, e-ошибка обучения

В этом случае веса не модифицируются, выходы сети остаются нулевыми, поскольку параметр скорости настройки равен нулю и адаптации сети не происходит. Погрешности совпадают со значениями целевой последовательности

net1.IW{1, 1}, a, e

ans = 0 0

a = [0] [0] [0] [0]

e = [–1] [–0.41667] [1] [1]

Зададим значения параметров скорости настройки и весов входа и смещения:

net.IW{1} = [0 0]; % Присваивание начальных весов

net.b{1} = 0; % Присваивание начального смещения

net.inputWeights{1,1}.learnParam.lr = 0.2;

net.biases{1,1}.learnParam.lr = 0;

Нулевое значение параметра скорости настройки для смещения обусловлено тем, что выявляемая зависимость не имеет постоянной составляющей.

Выполним 1 цикл настройки:

[net1,a,e] = adapt(net,P,T);

net1.IW{1, 1}, a, e

ans = 0.34539 –0.069422

a = [0] [–0.11667] [0.11] [–0.091833]

e = [–1] [–0.3] [0.89] [1.0918]

Теперь выполним последовательную адаптацию сети в течение 30 циклов:

% Последовательная адаптация сети с входами P и целями T за 30 циклов

net = newlin([–1 1;–1 1],1, 0, 0);

net.IW{1} = [0 0]; % Присваивание начальных весов

net.b{1} = 0; % Присваивание начального смещения

Зададим значения параметров скорости настройки для весов входа и смещения:

net.inputWeights{1,1}.learnParam.lr = 0.2;

net.biases{1,1}.learnParam.lr = 0;

P = {[–1; 1] [–1/3; 1/4] [1/2; 0] [1/6; 2/3]}; % Массив векторов входа

T = {–1 –5/12 1 1}; % Массив векторов цели

for i=1:30,

[net,a{i},e{i}] = adapt(net,P,T);

W(i,:)=net.IW{1,1};

end

mse(cell2mat(e{30})) % Среднеквадратичная ошибка адаптации

ans = 0.0017176

W(30,:) % Веса после 30 циклов

ans = 1.9199 0.925

cell2mat(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 0 0];cell2mat(cell2mat(a'))],'k') % Рис 3.1,a

xlabel(''), ylabel('Выходы a(i)'),grid

subplot(3,1,2)

plot(0:30,[[0 0]; W],'k') % Рис 3.1,б

xlabel(''), ylabel('Веса входов w(i)'),grid

subplot(3,1,3)

for i=1:30, E(i) = mse(e{i}); end

semilogy(1:30, E,'+k') % Рис. 3.1,в

xlabel(' Циклы'), ylabel('Ошибка'),grid



Рис. 3.1

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

В этом можно убедиться, изучая процесс адаптации, показанный на рис. 3.1. Условие окончания адаптации определяется погрешностью приближения к целевому вектору; в данном случае мерой такой погрешности является среднеквадратичная ошибка mse(e{i}), которая должна быть меньше 0.015.

На рис. 3.1, а показаны выходы нейронов в процессе адаптации сети, на рис. 3.1, б – коэффициенты восстанавливаемой зависимости, которые соответствуют элементам
вектора весов входа, а на рис. 3.1, в – ошибка обучения. Как следует из анализа графиков, за 12 шагов получена ошибка обучения 1.489e–3.

Предлагаем читателю самостоятельно убедиться, что для исследуемой зависимости обучающие последовательности вида

P = {[–1; 1] [–1/2; 1/2] [1/2; –1/2] [1; –1]}; % Массив векторов входа

T = {–1 –1/2 1/2 1}; % Массив векторов цели

не являются представительными.

Групповой способ. Рассмотрим случай группового представления обучающей последовательности. В этом случае входы и целевой вектор формируются в виде массива формата double.

P = [–1 –1/3 1/2 1/6; 1 1/4 0 2/3];

T = [–1 –5/12 1 1];

Используется та же модель статической сети с теми же требованиями к погрешности адаптации. При обращении к М-функции adapt по умолчанию вызываются функции adaptwb и learnwh; последняя выполняет настройку параметров сети на основе алгоритма WH, реализующего правило Уидроу – Хоффа (Widrow – Hoff).

Основной цикл адаптации сети с заданной погрешностью выглядит следующим образом:

% Групповой способ адаптации сети с входами P и целями T

net3 = newlin([–1 1;–1 1],1, 0, 0.2);

net3.IW{1} = [0 0]; % Присваивание начальных весов

net3.b{1} = 0; % Присваивание начального смещения

net3.inputWeights{1,1}.learnParam.lr = 0.2;

P = [–1 –1/3 1/2 1/6; 1 1/4 0 2/3];

T = [–1 –5/12 1 1];

EE = 10; i=1;

while EE > 0.0017176

[net3,a{i},e{i},pf] = adapt(net3,P,T);

W(i,:) = net3.IW{1,1};

EE = mse(e{i});

ee(i)= EE;

i = i+1;

end

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

W(63,:)

ans = 1.9114 0.84766

cell2mat(a(63))

ans = –1.003 –0.36242 1.0172 0.94256

EE = mse(e{63})

EE = 0.0016368

mse(e{1})

ans = 0.7934

Процедура адаптации выходов и параметров нейронной сети иллюстрируется рис. 3.2.

subplot(3,1,1)

plot(0:63,[zeros(1,4); cell2mat(a')],'k') % Рис.3.2,a

xlabel(''), ylabel('Выходы a(i)'),grid

subplot(3,1,2)

plot(0:63,[[0 0]; W],'k') % Рис.3.2,б

xlabel(''), ylabel('Веса входов w(i)'),grid

subplot(3,1,3)

semilogy(1:63, ee,'+k') % Рис.3.2,в

xlabel('Циклы'), ylabel('Ошибка'),grid



Рис. 3.2

Как следует из анализа графиков, для достижения требуемой точности адаптации требуется 12 шагов. Сравнивая рис. 3.2 и 3.1, можно убедиться, что существует различие в динамике процедур адаптации при последовательном и групповом представлении данных.

Динамические сети. Эти сети характеризуются наличием линий задержки, и для них
последовательное представление входов является наиболее естественным.

Последовательный способ. Обратимся к линейной модели нейронной сети с одним входом и одним элементом запаздывания. Установим начальные условия на линии задержки, а также для весов и смещения равными 0, а параметр скорости настройки равным 0.5:

net = newlin([–1 1],1,[0 1],0.5);

Pi = {0}; % Начальное условие для элемента запаздывания

net.IW{1} = [0 0]; % Значения весов

net.biasConnect = 0; % Значение смещения

Чтобы применить последовательный способ адаптации, представим входы и цели как массивы ячеек:

P = {–1/2 1/3 1/5 1/4}; % Вектор входа

T = { –1 1/6 11/15 7/10}; % Вектор цели

Попытаемся приспособить сеть для формирования нужного выхода на основе следующего соотношения:

y(t) = 2p(t) + p(t–1).

Используем для этой цели М-функцию adapt и основной цикл адаптации сети с заданной погрешностью, как это уже было описано выше:

EE = 10; i = 1;

while EE > 0.0001

[net,a{i},e{i},pf] = adapt(net,P,T);

W(i,:)=net.IW{1,1};

EE = mse(e{i});

ee(i) = EE;

i = i+1;

end

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

W(22,:)

ans = 1.983 0.98219

a{22}

ans = [–0.98955] [0.17136] [0.72272] [0.69177]

EE

EE = 7.7874e–005

Построим графики зависимости выходов системы и весовых коэффициентов от числа циклов обучения (рис. 3.3):

subplot(3,1,1)

plot(0:22,[zeros(1,4); cell2mat(cell2mat(a'))],'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(1:22,ee,'+k') % Рис.3.3,в

xlabel('Циклы'), ylabel('Ошибка'),grid



Рис. 3.3

На рис. 3.3, а показаны выходы нейронов в процессе адаптации сети, а на рис. 3.3, б – коэффициенты восстанавливаемой зависимости, которые соответствуют элементам вектора весов входа.

Групповой способ представления обучающего множества для адаптации динамических систем не применяется.

Обучение нейронных сетей


Статические сети. Воспользуемся рассмотренной выше моделью однослойной линейной сети с двухэлементным вектором входа, значения которого находятся в интервале [–1 1], и нулевым параметром скорости настройки, как это было для случая адаптации:

% Формирование однослойной статической линейной сети с двумя входами

% и нулевым параметром скорости настройки

net = newlin([–1 1;–1 1],1, 0, 0);

net.IW{1} = [0 0]; % Значения весов

net.b{1} = 0; % Значения смещений

Требуется обучить параметры сети так, чтобы она формировала линейную зависимость вида



Последовательный способ. Для этого представим обучающую последовательность
в виде массивов ячеек

P = {[–1; 1] [–1/3; 1/4] [1/2; 0] [1/6; 2/3]}; % Массив векторов входа

T = {–1 –5/12 1 1}; % Массив векторов цели

Теперь все готово к обучению сети. Будем обучать ее с помощью функции train в течение 30 циклов.

В этом случае для обучения и настройки параметров сети используются функции trainwb и learnwh соответственно.

% Параметр скорости настройки весов

net.inputWeights{1,1}.learnParam.lr = 0.2;

net.biases{1}.learnParam.lr = 0; % Параметр скорости настройки смещений

net.trainParam.epochs = 30; % Число циклов обучения

net1 = train(net,P,T);

Параметры сети после обучения равны следующим значениям:

W = net1.IW{1}

W = 1.9214 0.92599

y = sim(net1, P)

y = [–0.99537] [–0.40896] [0.96068] [0.93755]

EE = mse([y{:}]–[T{:}])

EE = 1.3817e–003

Зависимость величины ошибки обучения от числа циклов обучения приведена
на рис. 3.4.

Рис. 3.4

Это тот же самый результат, который был получен для группового способа адаптации с использованием функции adapt.

Групповой способ. Для этого представим обучающую последовательность в виде массивов формата double array:

P = [–1 –1/3 1/2 1/6; 1 1/4 0 2/3];

T = [–1 –5/12 1 1];

net1 = train(net,P,T);

TRAINWB, Epoch 0/10, MSE 0.793403/0.

TRAINWB, Epoch 10/10, MSE 0.00243342/0.

TRAINWB, Maximum epoch reached.

Параметры сети после обучения равны следующим значениям:

W = net1.IW{1}

W = 1.9214 0.92599

y = sim(net1, P)

y = –0.99537 –0.40896 0.96068 0.93755

EE = mse(y–T)

EE = 1.3817e–003

Этот результат полностью совпадает с результатом последовательного обучения этой же сети.

Динамические сети. Обучение динамических сетей выполняется аналогичным образом
с использованием метода train.

Последовательный способ. Обратимся к линейной модели нейронной сети с одним входом и одним элементом запаздывания.

Установим начальные условия для элемента запаздывания, весов и смещения равными 0, а параметр скорости настройки равным 0.5:

net = newlin([–1 1],1,[0 1],0.5);

Pi = {0}; % Начальное условие для элемента запаздывания

net.IW{1} = [0 0]; % Значения весов

net.biasConnect = 0; % Значение смещения

net.trainParam.epochs = 22;

Чтобы применить последовательный способ обучения, представим входы и цели как массивы ячеек:

P = {–1/2 1/3 1/5 1/4}; % Вектор входа

Обучим сеть формировать нужный выход на основе соотношения y(t) = 2p(t) + p(t–1), тогда

T = { –1 1/6 11/15 7/10}; % Вектор цели

Используем для этой цели М-функцию train:

net1 = train(net, P, T, Pi);

Параметры сети после обучения равны следующим значениям:

W = net1.IW{1}

W = 1.9883 0.98414

y = sim(net1, P)

y = [–0.99414] [0.17069] [0.7257] [0.6939]

EE = mse([y{:}]–[T{:}])

EE = 3.6514e–005

График зависимости ошибки обучения от числа циклов приведен на рис. 3.5.

Рис. 3.5

Предлагаем читателю самостоятельно выполнить сравнение результатов обучения
с результатами адаптации этой же сети.

Групповой способ представления обучающей последовательности для обучения динамических систем не применяется.
1   ...   5   6   7   8   9   10   11   12   ...   50
написать администратору сайта