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

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



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

3.3.3. Квазиньютоновы алгоритмы

Алгоритм BFGS


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

(3.28)

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

Одним из наиболее эффективных алгоритмов такого типа является алгоритм BFGS, предложенный Бройденом, Флетчером, Гольдфарбом и Шанно (Broyden, Fletcher, Goldfarb and Shanno) [9]. Этот алгоритм реализован в виде М-функции trainbfg.

Вновь обратимся к сети, показанной на рис. 3.7, но будем использовать функцию
обучения trainbfg:

net = newff([–1 2; 0 5],[3,1],{'tansig','purelin'},'trainbfg');

Параметры функции trainbfg практически совпадают с параметрами функции traincgf, за исключением используемой программы одномерного поиска, которая в данном случае заменена М-функцией srchbac.

Установим параметры обучающей процедуры по аналогии с предшествующими примерами:

net.trainParam.epochs = 300;

net.trainParam.show = 5;

net.trainParam.goal = 1e–5;

p = [–1 –1 2 2;0 5 0 5];

t = [–1 –1 1 1];

net = train(net,p,t); % Рис.3.16

На рис. 3.16 приведен график изменения ошибки в зависимости от числа выполненных циклов обучения.

Рис. 3.16

a = sim(net,p)

a = –1.0011 –1.0001 0.9999 1.0003

Алгоритм BFGS требует большего количества вычислений на каждой итерации
и большего объема памяти, чем алгоритмы метода сопряженных градиентов, хотя, как правило, он сходится на меньшем числе итераций. Требуется на каждой итерации хранить оценку матрицы Гессе, размер которой определяется числом настраиваемых параметров сети. Поэтому для обучения нейронных сетей больших размеров лучше использовать алгоритм Rprop или какой-либо другой алгоритм метода сопряженных градиентов. Однако для нейронных сетей небольших размеров алгоритм BFGS может оказаться эффективным.

Алгоритм OSS


Алгоритм OSS (One Step Secant), или одношаговый алгоритм метода секущих плоскостей, описан в работе Баттити (Battiti) [1]. В нем сделана попытка объединить идеи метода сопряженных градиентов и схемы Ньютона. Алгоритм не запоминает матрицу Гессе, полагая ее на каждой итерации равной единичной. Это позволяет определять новое направление поиска не вычисляя обратную матрицу.

Вновь обратимся к сети, показанной на рис. 3.7, но будем использовать функцию обучения trainoss:

net = newff([–1 2; 0 5],[3,1],{'tansig','purelin'},'trainoss');

Функция trainoss характеризуется теми же параметрами, заданными по умолчанию, что и функция trainbfg.

Установим параметры обучающей процедуры по аналогии с предшествующими примерами:

net.trainParam.epochs = 300;

net.trainParam.show = 5;

net.trainParam.goal = 1e–5;

p = [–1 –1 2 2;0 5 0 5];

t = [–1 –1 1 1];

net=train(net,p,t); % Рис.3.17

На рис. 3.17 приведен график изменения ошибки обучения в зависимости от числа выполненных циклов обучения.

Рис. 3.17

a = sim(net,p)

a = –1.0020 –0.9988 0.9994 1.0002

Этот алгоритм требует меньших объемов памяти и вычислительных ресурсов на цикл по сравнению с алгоритмом BFGS, но больше, чем алгоритм CGF. Таким образом, алгоритм OSS может рассматриваться как некий компромисс между алгоритмами методов сопряженных градиентов и Ньютона.

Алгоритм LM


Алгоритм LM Левенберга – Марквардта [17] реализует следующую стратегию для оценки матрицы Гессе. В предположении, что функционал определяется как сумма квадратов ошибок, что характерно при обучении нейронных сетей с прямой передачей, гессиан может быть приближенно вычислен как

, (3.29)

а градиент рассчитан по формуле

(3.30)

где – матрица Якоби производных функционала ошибки по настраиваемым параметрам; e – вектор ошибок сети. Матрица Якоби может быть вычислена на основе стандартного метода обратного распространения ошибки, что существенно проще вычисления матрицы Гессе.

Алгоритм LM использует аппроксимацию гессиана следующего вида:

(3.31)

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

Вновь обратимся к сети, показанной на рис. 3.8, но будем использовать функцию обучения trainlm:

net = newff([–1 2; 0 5],[3,1],{'tansig','purelin'},'trainlm');

Функция trainlm характеризуется следующими параметрами, заданными по умолчанию:

net.trainParam

ans =

epochs: 100

goal: 0

max_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 = 1e–5;

p = [–1 –1 2 2;0 5 0 5];

t = [–1 –1 1 1];

net = train(net,p,t); % Рис.3.18

На рис. 3.18 приведен график изменения ошибки обучения в зависимости от числа выполненных циклов обучения.

Рис. 3.18

a = sim(net,p)

a = –1.0000 –0.9998 1.0000 0.9999

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

Демонстрационный пример nnd12m иллюстрирует применение алгоритма LM.

Экономия памяти. Главный недостаток алгоритма LM состоит в том, что он требует
памяти для хранения матриц больших размеров. Например, размер матрицы Якоби состав­ляет Qn, где Q – число обучающих наборов и n – число параметров сети. Это означает, что при оценке гессиана согласно соотношению (3.28) потребуются значительные ресурсы для ее хранения и вычисления. Как это часто делается при работе с матрицами, выполним ее декомпозицию, т. е. представим ее в виде разбиения на несколько подматриц. Допустим, что выделены 2 подматрицы; тогда соотношение (3.28) может быть записано в виде:

. (3.32)

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

При применении М-функции trainlm с помощью параметра mem_reduc можно указывать, на какое число подматриц разбивается исходная матрица. Если параметр mem_reduc равен 1, то используется полная матрица Якоби; если mem_reduc = 2, то матрица Якоби разбивается
по строкам на 2 части и сначала обрабатывается одна половина, а затем вторая. Это экономит половину объема памяти, требуемой для вычисления полного якобиана. Что же касается быстродействия, то оно будет частично потеряно. И если вам доступна достаточная оперативная память, то лучше устанавливать параметр mem_reduc равным 1. Это особо касается системы MATLAB, которая позволяет извлечь все преимущества при использовании математического сопроцессора. Если же все-таки имеющаяся память оказалась исчерпанной, то следует назначить параметр mem_reduc равным 2 и выполнить расчеты заново. Если и при этом памяти
не будет достаточно, следует еще увеличить значение этого параметра.

3.3.4. Алгоритмы одномерного поиска


Рассмотренные выше алгоритмы оптимизации являются стратегиями, которые обеспечивают минимизацию функционала обучения. В процессе работы этих алгоритмов, как правило, возникает задача одномерного поиска минимума вдоль заданного направления. Это могут быть направления антиградиента или сопряженные направления. В рамках ППП Neural Network Toolbox используется 5 функций одномерного поиска. При работе того или иного алгоритма они задаются параметром srchFcn, который определяет имя функции поиска.
Для многих процедур эта функция задается по умолчанию, но она может быть изменена
по желанию пользователя при определении процедуры обучения нейронной сети.

Алгоритм GOL


Алгоритм GOL, или алгоритм золотого сечения [18], реализуемый с помощью функции srchgol, выполняет одномерный поиск минимума функции с помощью последовательного перебора, и это не требует вычисления производной. В первую очередь алгоритм определяет интервал, в котором находится минимум целевой функции. Это достигается путем вычисления последовательности точек с интервалом delta и последующим удвоением этого интервала на каждом шаге вдоль направления поиска. Если целевая функция между двумя последовательными шагами начинает возрастать, то интервал, в котором находится минимум, найден. Следующий шаг состоит в уменьшении размера интервала, содержащего минимум. Для этого используется принцип половинного деления. Соответствующая процедура продолжается до тех пор, пока интервал неопределенности
не уменьшится до величины tol, равной delta/scale_tol.

Демонстрационная программа nnd12sd1 иллюстрирует одномерный поиск минимума функции методом золотого сечения в сочетании с алгоритмом градиентного спуска GD.

Алгоритм BRE


Алгоритм BRE, или алгоритм Брента (Brent) [3], – это алгоритм одномерного поиска, который является комбинацией метода золотого сечения и квадратичной интерполяции. Методы последовательного перебора, подобные методу золотого сечения, имеют скорость сходимости первого порядка, в то время как полиномиальные методы интерполяции имеют асимптотическую скорость сходимости более высокую, чем линейная. С другой стороны, сходимость метода золотого сечения носит глобальный характер, т. е. обеспечивается на любом шаге работы алгоритма, в то время как сходимость метода полино­миаль­ной интерполяции является лишь локальной (асимптотической) и может потребовать выполнения большого числа итераций. Метод Брента направлен на то, чтобы объединить лучшие свойства обоих методов.

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

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

В рамках ППП Neural Network Toolbox этот алгоритм реализован в виде М-функции scrchbre.

Алгоритм HYB


Алгоритм HYB – это гибридный алгоритм, подобный алгоритму BRE, но использует другую комбинацию методов, а именно метод половинного деления и кубическую интерполяцию [41]. Алгоритм метода половинного деления предполагает вычисление целевой функции и ее производной в срединной точке исследуемого интервала, и это позволяет отбросить одну из половин. Таким образом организуется процедура последовательного перебора, которая обеспечивает глобальную сходимость, но характеризуется лишь линейной скоростью. Кубическая интерполяция строится с использованием значений целевой функции и ее производной в конечных точках интервала. Если минимум аппроксимирующей функции попадает в исследуемый интервал, то он используется для уточнения кубической аппроксимации в пределах этого же интервала. Если минимум находится
за пределами интервала, то продолжается поиск методом золотого сечения. В противном случае используется алгоритм половинного деления.

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

В рамках ППП Neural Network Toolbox этот алгоритм реализован в виде М-функции scrchhyb.

Алгоритм CHA


Алгоритм CHA, или алгоритм Чараламбуса (Charalambous) [8], – это специальный
алгоритм одномерного поиска, разработанный для обучения нейронных сетей на основе алгоритма градиентного спуска GD. Подобно двум предшествующим алгоритмам он
реализует гибридный метод поиска и использует кубическую интерполяцию в сочетании с методом деления интервала на части.

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

В рамках ППП Neural Network Toolbox этот алгоритм реализован в виде М-функции srchcha.

Алгоритм BAC


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

В рамках ППП Neural Network Toolbox этот алгоритм реализован в виде М-функции srchbac. Эта функция используется по умолчанию при работе с квазиньютоновыми алгоритмами минимизации, хотя она и не всегда может оказаться наилучшей при решении конкретной практической задачи.

3.3.5. Расширение возможностей процедур обучения


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

Среди алгоритмов метода сопряженных градиентов алгоритм CGB Пауэлла – Биеле требует наибольших объемов памяти, но обычно имеет самую быструю сходимость.
Алгоритмы Rprop и SCG не требуют использования процедур одномерного поиска
и предъявляют незначительные требования к памяти. Они работают достаточно быстро
и могут быть рекомендованы для решения задач большой размерности. Алгоритм CGS
с переменным параметром скорости настройки обычно работает намного медленнее других алгоритмов и требует приблизительно столько же памяти, как алгоритм Rprop, но при решении некоторых практических задач он может оказаться весьма полезным, поскольку возникают ситуации, когда оказываются предпочтительными алгоритмы с медленной сходимостью, например при использовании стратегии прерывания.

При решении практических задач рекомендуется начинать с алгоритма LM. Если при этом требуется слишком много памяти, то следует перейти к алгоритму BFG или одному из алгоритмов метода сопряженных градиентов. Алгоритм Rprop также характеризуется высоким быстродействием и предъявляет относительно малые требования к объему
используемой памяти.

Табл. 3.1 иллюстрирует характеристики различных алгоритмов при решении с помощью нейронных сетей одной частной задачи регрессионного анализа.

Таблица 3.1

М-функция ППП

Алгоритм

Время, с

Циклы
обучения


Число операций, Mflops

traingds

GDS

57.71

980

2.50

trainrp

Rprop

12.95

185

0.56

trainscg

SCG

16.06

106

0.70

traincgf

CGF

16.40

81

0.99

traincgp

CGP

16.16

89

0.75

traincgb

CGB

15.03

74

0.59

trainoss

OSS

18.46

101

0.75

trainbfg

BFGS

10.86

44

1.02

trainlm

LM

1.87

6

0.46


Сеть типа 1–10–1, имеющая 1 вход, 10 скрытых нейронов и 1 выход, обучалась с использованием последовательности из 41 элемента, представляющих пары вход – целевой выход, пока не была достигнута среднеквадратичная погрешность обучения, равная 0.01. Для каждого алгоритма обучения было выполнено 20 прогонов, чтобы получить усредненные показатели, приведенные в таблице. Рассматривать эти показатели надо весьма осторожно, поскольку приведенные данные относятся к конкретной задаче и могут существенно измениться при решении какой-либо другой задачи.

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

Переобучение


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

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

net = newff([–1 1],[30,1],{'tansig','purelin'},'trainbfg');

net.trainParam.epochs = 300;

net.trainParam.show = 50;

net.trainParam.goal = 1e–5;

p = [–1:0.05:1];

t = sin(2*pi*p)+0.1*randn(size(p)); % Возмущенные значения функции

t1 = sin(2*pi*p); % Обучающая последовательность

[net,tr] = train(net,p,t); % Рис.3.19

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

Рис. 3.19

Для того чтобы убедиться, что в данном случае мы сталкиваемся с явлением переобучения, построим графики аппроксимируемой функции, ее приближенных значений и результата аппроксимации (рис. 3.20):

an = sim(net,p); % Значения аппроксимирующей функции

plot(p,t,'+',p,an,'–',p,t1,':') % Рис.3.20

Рис. 3.20

Анализ сигналов на рис. 3.20 показывает, что построенная нейронная сеть действительно точно отслеживает входной сигнал, но не восстанавливает функцию синуса.

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

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

Метод регуляризации


Первый подход связан с использованием метода регуляризации, предложенного
в 1963 г. российским математиком А. Н. Тихоновым [50]. Суть этого метода заключается в том, чтобы видоизменить функционал качества таким образом, чтобы он всегда имел ми­ни­мум и положение этого минимума непрерывно зависело от параметра регуляризации.

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

. (3.33)

Если модифицировать функционал добавлением слагаемого вида

, (3.34)

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

Введем параметр регуляризации  и построим следующий регуляризирующий функционал:

(3.35)

Рассмотрим нейронную сеть типа 1–5–1 с одним входом, пятью скрытыми нейронами и одним выходом. Эта сеть использует те же типы нейронов, что и предыдущая сеть, но количество скрытых нейронов в 6 раз меньше, предельное количество циклов обучения сокращено до 100, а параметр регуляризации равен 0.9998.

net = newff([–1 1],[5,1],{'tansig','purelin'},'trainbfg');

net.trainParam.epochs = 100;

net.trainParam.show = 50;

net.trainParam.goal = 1e–5;

net.performFcn = 'msereg';

net.performParam.ratio = 0.9998;

p = [–1:0.05:1];

t = sin(2*pi*p)+0.1*randn(size(p)); % Возмущенные значения функции

t1 = sin(2*pi*p); % Обучающая последовательность

[net,tr] = train(net,p,t); % Рис.3.21,а
an = sim(net,p); % Значения аппроксимирующей функции

plot(p,t,'+',p,an,'–',p,t1,':') % Рис.3.21,б

На рис. 3.21, а показан график изменения ошибки обучения, из которого следует, что ошибка обучения составляет величину порядка 0.01; на рис. 3.21, б показаны результаты аппроксимации, из которых следует, что при использовании пяти нейронов в скрытом слое переобучение не наблюдается, кривая выхода аппроксимирует функцию синуса,
но точность аппроксимации недостаточна.



а



б

Рис. 3.21

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

Автоматическая регуляризация. Автоматический выбор параметра регуляризации может быть реализован на основе правила Байеса. Этот подход был предложен Д. Мак-Кейем (D. MacKay) [27] и состоит в том, что веса и смещения сети рассматриваются как случайные величины с известным законом распределения. Параметр регуляризации связан с дисперсией этого распределения и может быть оценен с использованием статистических методов. Детальное описание процедуры регуляризации с использованием правила Байеса и алгоритма Левенберга – Марквардта можно найти в работе [11]. Соответствующая процедура реализована в виде М-функции trainbr.

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

net = newff([–1 1],[20,1],{'tansig','purelin'},'trainbr');

Функция trainbr характеризуется следующими параметрами, заданными по умолчанию:

net.trainParam

ans =

epochs: 100

show: 25

goal: 0

time: Inf

min_grad: 1e–010

max_fail: 5

mem_reduc: 1

mu: 0.005

mu_dec: 0.1

mu_inc: 10

mu_max: 1e+010

Этот список соответствует списку параметров М-функции trainlm.

Установим следующие значения этих параметров:

net = newff([–1 1],[20,1],{'tansig','purelin'},'trainbr');

net.trainParam.epochs = 50;

net.trainParam.show = 10;

randn('seed',192736547);

p = [–1:.05:1];

t = sin(2*pi*p)+0.1*randn(size(p));

net = init(net);

net = train(net,p,t); % Рис.3.22

Рис. 3.22

На рис. 3.22 показаны изменения суммы квадратов ошибок и весов, а также оптимальное количество настраиваемых параметров нейронной сети. В данном случае после обучения используется приблизительно 18 – из общего числа 61 – параметров сети типа 1–20–1.

Построим графики исследуемых функций:

an = sim(net,p); % Значения аппроксимирующей функции

t1 = sin(2*pi*p); % Значения аппроксимируемой функции

plot(p,t,'+',p,an,'–',p,t1,':') % Рис. 3.23

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

Рис. 3.23

Формирование представительной выборки


Другой способ преодоления эффекта переобучения связан с организацией целенаправленной процедуры прерывания обучения. Для этого из исходных данных выделяется 3 подмножества. Первое – обучающее подмножество (training set), второе – контрольное подмножество (validation set) и третье – тестовое подмножество (test set). Обучающее подмножество используется для настройки параметров сети; контрольное подмножество используется в течение всего процесса обучения для того, чтобы контролировать представительность используемой выборки. Как правило, ошибка для контрольного подмножества на начальной фазе обучения уменьшается, так же как и ошибка для обучающего подмножества. Однако когда ошибка для контрольного подмножества начинает увеличи­ваться, это означает, что в сети начал проявляться эффект переобучения. В этом случае фиксируется итерация, на которой ошибка для контрольного подмножества была минимальной, и восстанавливаются соответствующие значения настраиваемых параметров сети. Соответствующая длина выборки признается представительной.

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

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

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

p = [–1:0.05:1];

t = sin(2*pi*p)+ 0.1*randn(size(p));

Затем сформируем контрольное подмножество. Определим входы в диапазоне
от –0.975 до 0.975 и, чтобы сделать задачу более реалистичной, добавим некоторую помеху, распределенную по нормальному закону:

v.P = [–0.975:.05:0.975];

v.T = sin(2*pi*v.P)+0.1*randn(size(v.P));

Тестовое подмножество в данном примере не используется.

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

net = newff([–1 1],[20,1],{'tansig','purelin'},'traingdx');

net.trainParam.epochs = 300;

net.trainParam.show = 25;

net = init(net);

[net,tr] = train(net,p,t,[],[],v); % Рис.3.24

Анализ рис. 3.24 показывает, что ошибка контрольного подмножества превысила ошибку обучающего подмножества вблизи 70-й итерации и далее эта ошибка постоянно превышала ошибку обучающего подмножества, пока на 141-й итерации их отношение
не превысило величину maxfail, по умолчанию равную 5, и произошло прерывание процедуры обучения.

Рис. 3.24

Построим графики исследуемых функций (рис. 3.25):

an = sim(net,p); % Значения аппроксимирующей функции

t1 = sin(2*pi*p); % Значения аппроксимируемой функции

plot(p,t,'+',p,an,'–',p,t1,':')% Рис.3.25

Рис. 3.25

Из анализа рис. 3.25 следует, что в сети отсутствует эффект переобучения, хотя реакция на выходе сети не такая гладкая, как при использовании метода регуляризации (рис. 3.23).

Предварительная обработка и восстановление данных


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

Для этой цели в составе ППП Neural Network Toolbox предусмотрены следующие М-функ­­ции для предварительной подготовки и восстановления данных при обучении нейронных сетей:


Операция

Обработка обу­ча­ю­щего множества

Обработка вы­ходных данных

Обработка входных данных

Масштабирование

premnmx

postmnmx

tramnmx

Нормировка

prestd

poststd

trastd

Факторный анализ

prepca



trapca

Регрессионный анализ



postreg




Масштабирование. Перед тем как начинать процедуру обучения, бывает полезно провести масштабирование векторов входа и целей так, чтобы их элементы оказались в определенном интервале значений. В частности, М-функция premnmx предназначена для приведения данных к интервалу [–1 1].

% Масштабирование входов и целей

[pn,minp,maxp,tn,mint,maxt] = premnmx(p,t);

net = train(net,pn,tn); % Обучение сети

Входными параметрами этой функции являются массивы p и t, соответствующие входам и целевым выходам. Элементы выходных массивов pn и tn имеют значения в интервале [–1 1]. Векторы minp и maxp включают минимальные и максимальные значения исходных векторов входа, а векторы mint и maxt – минимальные и максимальные значения исходных векторов целей. После завершения процедуры обучения эти векторы используются для масштабирования векторов входов и целей, подаваемых на вход сети. Эти параметры становятся неотъемлемой частью параметров, определяющих сеть, как, например, ее веса и смещения.

Если выполнено масштабирование входов и целей с использованием М-функции premnmx, то выходы сети будут иметь значения в интервале [–1 1]. Для приведения
вектора выхода к исходным единицам измерения используется М-функция postmnmx.
Ее следует применять после того, как выполнено моделирование сети:

an = sim(net,pn); % Моделирование сети с масштабированным входом

a = postmnmx(an,mint,maxt); % Восстановление исходного масштаба

Если функция масштабирования premnmx использовалась для обучения сети, то при последующей работе с такой сетью необходимо масштабировать новые входные последовательности, используя М-функцию tramnmx:

pnewn = tramnmx(pnew,minp,maxp); % Масштабирование поступающих входов

anewn = sim(net,pnewn); % Моделирование сети

anew = postmnmx(anewn,mint,maxt); % Восстановление исходного масштаба

Нормировка. В тех случаях, когда обучающее множество включает случайные величины, распределенные по нормальному закону, приведение элементов к единому масштабу
связано с процедурой нормировки данных с использованием величин среднего значения
и стандартного отклонения. Эта процедура выполняется с помощью М-функции prestd, которая нормирует входы и цели так, чтобы они имели среднее значение, равное 0,
и стандартное отклонение, равное 1.

[pn,meanp,stdp,tn,meant,stdt] = prestd(p,t);

Входными параметрами этой функции являются массивы p и t, соответствующие входам и целевым выходам. Элементы выходных массивов pn и tn будут иметь среднее значение, равное 0, и стандартное отклонение, равное 1. Векторы meanp и stdp включают средние значения и стандартные отклонения исходных векторов входа, а векторы meant
и stdt – средние значения и стандартные отклонения исходных векторов целей. После завершения процедуры обучения эти векторы используются для масштабирования векторов входов и целей, подаваемых на вход сети. Эти величины становятся неотъемлемой частью параметров, определяющих сеть, как, например, ее веса и смещения.

Если выполнено масштабирование входов и целей с использованием М-функции prestd, то выходы сети будут нормированы так, что их среднее значение равно 0, а стандартное отклонение – 1. Для приведения вектора выхода к исходным единицам измерения используется М-функция poststd. Ее следует применять после того, как выполнено моделирование сети:

an = sim(net,pn); % Моделирование сети с нормированным входом

a = poststd(an,meant,stdt); % Восстановление исходных единиц измерения

Если функция нормировки prestd использовалась для обучения сети, то при последующей работе с такой сетью необходимо нормировать новые входные последовательности, используя М-функцию trastd:

pnewn = trastd(pnew,meanp,stdp); % Нормировка векторов входа

anewn = sim(net,pnewn); % Моделирование сети

% Восстановление исходных единиц измерения

anew = poststd(anewn,meant,stdt);

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

  • выполняется ортогонализация векторов входа, что исключает их взаимную корреляцию;

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

  • удаляются векторы, диапазон значений которых незначителен.

Для реализации процедуры факторного анализа предназначена М-функция prepca:

[pn,meanp,stdp] = prestd(p);% Нормализация вектора входа

[ptrans,transMat] = prepca(pn, 0.02);

% Устранение векторов входа, вклад которых не превышает 2 проц.

В последовательности этих операторов сначала выполняется нормировка векторов входа, затем проводится факторный анализ. Второй аргумент функции prepca равен 0.02, что означает устранение тех главных компонентов, вклад которых составляет менее 2 %. Массив ptrans содержит преобразованные векторы входа; матрица transMat является матрицей преобразования в главные компоненты. После обучения сети эта матрица должна быть использована для предварительного преобразования векторов входа. Она становится такой же неотъемлемой частью параметров сети, как ее веса и смещения. Если умножить нормированные векторы входа pn на матрицу преобразования transMat, то получим вектор ptrans с упорядоченными главными компонентами.

Если функция prepca использовалась для предварительной обработки множества
обучающих данных, то всякий раз, когда обученная сеть используется с новыми входами, они должны быть соответствующим образом преобразованы. Это реализуется с помощью М-функции trapca:

pnewn = trastd(pnew,meanp,stdp); % Нормировка векторов входа

pnewtrans = trapca(pnewn,transMat);

a = sim(net,pnewtrans); % Моделирование сети

Регрессионный анализ. В определенной степени качество обучения нейронной сети может быть оценено ошибками обучения, контроля и тестирования, но этого может оказаться
недостаточно и требуется более детальный анализ. Один из возможных подходов – это регрессионный анализ выходов сети и соответствующих целей. В составе ППП Neural Network Toolbox для этих целей предназначена М-функция postreg.

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

p = [–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([–1 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 – определяют наклон и смещение линии регрессии в координатах цель-выход, третий – r – коэффициент корреляции. Если выходы точно равняются целям, то наклон должен быть равен 1, а смещение 0. В рассматриваемом примере можно видеть, что эти параметры действительно весьма точно отражают линейную регрессию. Коэффициент корреляции близок к 1, что указывает на существенную корреляцию между выходами и целями, т. е. малые изменения цели будут адекватно отражаться в выходах нейронной сети, что является характеристикой ее высокого качества.



а



б

Рис. 3.26

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

Пример процедуры обучения


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

Рассмотрим одно из типичных приложений нейронных сетей в медицинских исследованиях. Для этого примера используем данные из медицинского приложения [35]. Требуется разработать вычислительный инструмент, который может определять уровни липидных составляющих холестерина на основе измерений спектра крови. Имеется статистика измерения 21 волны спектра крови для 264 пациентов. Кроме того, известны уровни hdl, ldl и 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,Q] = size(ptrans)

R = 4

Q = 264

Оказывается, что всего 4.

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

iitst = 2:4:Q;

iival = 4:4:Q;

iitr = [1:4:Q 3:4:Q];

v.P = ptrans(:,iival); v.T = tn(:,iival);

t.P = ptrans(:,iitst); t.V = tn(:,iitst);

ptr = ptrans(:,iitr); ttr = tn(:,iitr);

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

net = newff(minmax(ptr),[5 3],{'tansig' 'purelin'},'trainlm')

[net,tr]=train(net,ptr,ttr,[],[],v,t);

Обучение, остановлено после 15 итераций, потому что контрольная ошибка в 5 раз превысила ошибку обучения. Построим графики всех ошибок:

plot(tr.epoch,tr.perf,’–‘,tr.epoch,tr.vperf,’—–‘,tr.epoch,tr.tperf,’:’)

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

Рис. 3.27

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

an = sim(net,ptrans); % Моделирование сети

a = poststd(an,meant,stdt); % Восстановление выходов

t = poststd(tn,meant,stdt); % Восстановление целей

for i=1:3

figure(i)

[m(i),b(i),r(i)] = postreg(a(i,:),t(i,:)); % Расчет регрессии

end % Рис. 3.28,а-в



а



б



в

Рис. 3.28

Первые 2 выхода сети (hdl- и ldl-составляющие) хорошо отслеживают целевое множество, значение близко к 0.9, и это означает, что эти липидные характеристики могут быть определены по измерениям спектра крови. Третий выход (vldl-составляющая) восстанавливается плохо (коэффициент корреляции около 0.6), и это означает, что решение задачи должно быть продолжено.

Можно использовать другую архитектуру сети, увеличить количество нейронов
в скрытом слое (больше скрытых слоев нейронов) или воспользоваться методом регуляризации. Хотя может оказаться, что восстановление составляющей vldl на основе измерения спектра крови вообще несостоятельно.
1   ...   9   10   11   12   13   14   15   16   ...   50
написать администратору сайта