Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Скачиваний:
865
Добавлен:
07.03.2016
Размер:
15.55 Mб
Скачать

Квазиньютоновы алгоритмы обучения

trainbfg

Алгоритм обучения BFGS

Синтаксис:

[net,TR,Ac,El] = trainbfg(NET,Pd,Tl,Ai,Q,TS,VV,TV)

info = trainbfg(code)

Описание:

Функция trainbfg обучает нейронную сеть, используя квазиньютонов алгоритм Бройдена, Флетчера, Гольдфарба и Шано (BFGS).

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

info = trainbfg('pdefaults')'

info =

epochs:

100

scale_tol:

20

maxstep:

100

show:

25

alpha:

0.001

minstep:

1.0 e–006

goal:

0

beta:

0.1

bmax:

26

time:

Inf

delta:

0.01

min_grad:

1.0e–006

gama:

0.1

max_fail:

5

low_lim:

0.1

searchFcn:

'srchbac'

up_lim:

0.5

Применение функции:

Функция обучения trainbfgиспользуется при создании сетей с помощью методовnewff, newcf,newelm, а также при формировании сетей с атрибутами, определяемыми пользователем.

Для того чтобы подготовить сеть к обучению, необходимо:

  • установить свойство сети net.trainFcnравным'trainbfg'. Это автоматически установит значения параметров обучения, соответствующие значениям свойстваnet.trainParamпо умолчанию.

Для того чтобы фактически обучить сеть, необходимо:

  • инициализировать нейронную сеть;

  • присвоить, если это необходимо, требуемые значения параметрам обучения;

  • применить функцию train.

Алгоритм:

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

X = X + a*dX,

где dX – направление поиска; параметр a выбирается так, чтобы минимизировать критерий качества обучения в направлении поиска. Функция одномерного поиска searchFcn используется для вычисления минимума. Начальное направление поиска задается вектором, противоположным градиенту критерия качества. При успешных итерациях направление поиска определяется на основе нового значения градиента и с учетом приближенного значения гессиана согласно формуле[13]

dX = –H\gX,

где gX– вектор градиента;H– приближенная оценка гессиана.

Обучение прекращается, когда выполнено одно из следующих условий:

  • значение функции качества стало меньше предельного;

  • градиент критерия качества стал меньше значения min_grad;

  • достигнуто предельное число циклов обучения;

  • превышено максимальное время, отпущенное на обучение;

  • ошибка контрольного подмножества превысила ошибку обучающего более чем в max_fail раз.

Пример:

Заданы следующие обучающие последовательности входов P и целей T:

P = [0 1 2 3 4 5];

T = [0 0 0 1 1 1];

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

Формирование сети:

net = newff([0 5],[2 1],{'tansig','logsig'},'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.5e–7.

Рис. 11.55

Выполним моделирование сети:

Y = sim(net,P);

Y = 0.0000 0.0000 0.0021 1.0000 0.9999 0.9998

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

Сопутствующие функции: NEWFF, NEWCF, TRAINGDM, TRAINGDA, TRAINGDX, TRAINLM, TRAINRP, TRAINCGF, TRAINCGB, TRAINSCG, TRAINCGP, TRAINOSS.

trainoss

Алгоритм обучения OSS

Синтаксис:

[net,TR,Ac,El] = trainoss(NET,Pd,Tl,Ai,Q,TS,VV)

info = trainoss(code)

Описание:

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

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

info = trainoss('pdefaults')'

info =

epochs:

100

scale_tol:

20

maxstep:

100

show:

25

alpha:

0.001

minstep:

1.0 e–6

goal:

0

beta:

0.1

bmax:

26

time:

Inf

delta:

0.01

min_grad:

1.0e–006

gama:

0.1

max_fail:

5

low_lim:

0.1

searchFcn:

'srchbac'

up_lim:

0.5

Применение функции:

Функция обучения trainoss используется при создании сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем.

Для того чтобы подготовить сеть к обучению, необходимо:

  • установить свойство сети net.trainFcnравным'trainoss'. Это автоматически установит значения параметров обучения, соответствующие значениям свойстваnet.trainParam по умолчанию.

Для того чтобы фактически обучить сеть, необходимо:

  • инициализировать нейронную сеть;

  • присвоить, если это необходимо, требуемые значения параметрам обучения;

  • применить функцию train.

Алгоритм:

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

X = X + a*dX,

где dX – направление поиска; параметр aвыбирается так, чтобы минимизировать критерий качества обучения в направлении поиска. Функция одномерного поиска searchFcn используется для вычисления минимума. Начальное направление поиска задается вектором, противоположным градиенту критерия качества. При успешных итерациях направление поиска определяется на основе нового значения градиента и значений градиентов на предыдущих шагах согласно формуле [1]

dX = –gX + Ac*X_step + Bc*dgX,

где gX– вектор градиента;X_step– приращение весов на предыдущей итерации;dgX– изменение градиента на последней итерации.

Обучение прекращается, когда выполнено одно из следующих условий:

  • значение функции качества стало меньше предельного;

  • градиент критерия качества стал меньше значения min_grad;

  • достигнуто предельное число циклов обучения;

  • превышено максимальное время, отпущенное на обучение;

  • ошибка контрольного подмножества превысила ошибку обучающего более чем в max_fail раз.

Пример:

Заданы следующие обучающие последовательности входов P и целей T:

P = [0 1 2 3 4 5];

T = [0 0 0 1 1 1];

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

Формирование сети:

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

Обучение сети:

net.trainParam.epochs = 50;

net.trainParam.show = 10;

net.trainParam.goal = 0.0001;

[net,TR] = train(net,P,T); % Рис.11.56

Рис. 11.56

На рис. 11.56 показано, как изменяется точность в процессе обучения; требуемое значение обеспечивается на 29-м цикле обучения.

Выполним моделирование сети:

Y = sim(net,P)

Y = 0.0093 0.0090 0.0127 0.9856 0.9989 0.9990

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

Сопутствующие функции: NEWFF, NEWCF, TRAINGDM, TRAINGDA, TRAINGDX, TRAINLM, TRAINRP, TRAINCGF, TRAINCGB, TRAINSCG, TRAINCGP, TRAINBFG.

trainlm

Алгоритм Левенберга – Марквардта LM

Синтаксис:

[net,TR,Ac,El] = trainlm(NET,Pd,Tl,Ai,Q,TS,VV)

info = trainlm(code)

Описание:

Функция trainlm обучает нейронную сеть, используя алгоритм Левенберга –Марквардта LM.

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

info = trainlm('pdefaults')'

info =

epochs:

100

lr:

0.01

mu_max:

1.0e10

show:

25

mc:

0.9

goal:

0

mem_reduc:

1

time:

Inf

mu:

0.001

min_grad:

1.0e–006

mu_dec:

0.1

max_fail:

5

mu_inc:

10

Применение функции:

Функция обучения trainlmиспользуется при создании сетей с помощью методовnewff,newcf,newelm, а также при формировании сетей с атрибутами, определяемыми пользователем.

Для того чтобы подготовить сеть к обучению, необходимо:

  • установить свойство сети net.trainFcnравным'trainlm'. Это автоматически установит значения параметров обучения, соответствующие значениям свойстваnet.trainParamпо умолчанию.

Для того чтобы фактически обучить сеть, необходимо:

  • инициализировать нейронную сеть;

  • присвоить, если это необходимо, требуемые значения параметрам обучения;

  • применить функцию train.

Алгоритм:

Функция trainlm выполняет процедуру обучения, если функции взвешивания, накопления и активации имеют производные. Для вычисления якобиана критерия качества обучения по переменным веса и смещения используется метод обратного распространения ошибки. Каждая настраиваемая переменная корректируется в соответствии с методом Левенберга – Марквардта:

jj = jX * jX;

je = jX * E;

dX = –(jj + I * mu)\je,

где E– матрица ошибок;I– единичная матрица.

Параметр адаптации muвозрастает с коэффициентомmu_incдо тех пор, пока изменение весов и смещенийdXне приведет к уменьшению критерия качества; после этого коэффициентmu_incпереключается наmu_dec.

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

Обучение прекращается, когда выполнено одно из следующих условий:

  • значение функции качества стало меньше предельного;

  • градиент критерия качества стал меньше значения min_grad;

  • достигнуто предельное число циклов обучения;

  • превышено максимальное время, отпущенное на обучение;

  • ошибка контрольного подмножества превысила ошибку обучающего более чем в max_fail раз.

Пример:

Заданы следующие обучающие последовательности входов P и целей T:

P = [0 1 2 3 4 5];

T = [0 0 0 1 1 1];

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

Формирование сети:

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

Обучение сети:

net.trainParam.epochs = 50;

net.trainParam.show = 10;

net.trainParam.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: [114 double]

vperf: [114 double]

tperf: [114 double]

mu: [114 double]

На рис. 11.57 показано, как изменяется точность в процессе обучения; требуемое значение обеспечивается на 13-м цикле обучения.

Рис. 11.57

Данный алгоритм имеет адаптивный параметр mu, изменение которого показано на рис. 11.58.

Рис. 11.58

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

Выполним моделирование сети:

Y = sim(net,P)

Y = 0.0012 0.0012 0.0049 0.9889 0.9897 0.9897

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

Сопутствующие функции: NEWFF, NEWCF, TRAINGD, TRAINGDM, TRAINGDA, TRAINGDX.

trainbr

Алгоритм обучения BR

Синтаксис:

[net,TR,Ac,El] = trainbr(net,Pd,Tl,Ai,Q,TS,VV)

info = trainbr(code)

Описание:

Функция trainbrобучает нейронную сеть, используя алгоритм Левенберга – Марк­вардта, дополненный регуляризацией по БайесуBR. Такие сети находят широкое применение при решении задач аппроксимации нелинейных зависимостей.

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

info = trainbr('pdefaults')'

info =

epochs:

100

mem_reduc:

1

show:

25

mu:

0.005

goal:

0

mu_dec:

0.1

time:

Inf

mu_inc:

10

min_grad:

1.0e–006

mu_max:

1.0e+010

max_fail:

5

Применение функции:

Функция обучения trainbr используется при создании сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем.

Для того чтобы подготовить сеть к обучению, необходимо:

  • установить свойство сети net.trainFcnравным'trainbr'. Это автоматически установит значения параметров обучения, соответствующие значениям свойстваnet.trainParamпо умолчанию.

Для того чтобы фактически обучить сеть, необходимо:

  • инициализировать нейронную сеть;

  • присвоить, если это необходимо, требуемые значения параметрам обучения;

  • применить функцию train.

Алгоритм:

Функция trainbr выполняет процедуру обучения, если функции взвешивания, накопления и активации имеют производные. В отличие от всех ранее описанных процедур эта функция использует метод регуляризации, что позволяет успешно справиться с проблемой переобучения. Для этого осуществляется минимизация комбинированного функционала качества обучения, который учитывает не только сумму квадратов ошибок обучения, но квадраты весов. Эта стратегия регуляризации, называемая регуляризацией по методу Байеса, подробно рассмотрена в работах [11, 23]. При реализации функцииtrainbr эта стратегия встроена в алгоритм Левенберга – Марквардта.

Для вычисления якобиана функционала качества по переменным веса и смещения используется метод обратного распространения ошибки. Каждая настраиваемая переменная корректируется в соответствии с методом Левенберга–Марквардта:

jj = jX * jX;

je = jX * E;

dX = –(jj + I * mu)\je,

где E– матрица ошибок;I– единичная матрица.

Параметр адаптации muвозрастает с коэффициентомmu_incдо тех пор, пока изменение весов и смещенийdXне приведет к уменьшению критерия качества; после этого коэффициентmu_incпереключается наmu_dec.

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

Обучение прекращается, когда выполнено одно из следующих условий:

  • значение функции качества стало меньше предельного;

  • градиент критерия качества стал меньше значения min_grad;

  • достигнуто предельное число циклов обучения;

  • превышено максимальное время, отпущенное на обучение;

  • ошибка контрольного подмножества превысила ошибку обучающего более чем в max_fail раз.

Пример:

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

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

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

Сформируем для решения этой задачи двухслойную нейронную сеть прямой передачи сигнала. Вход сети принимает значения в диапазоне от –1 до 1. Первый слой имеет 20 нейронов с функцией активации tansig, второй слой имеет 1 нейрон с функцией активацииpurelin. В качестве обучающей используем функциюtrainbr.

Формирование сети:

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

Обучение сети (рис. 11.59):

net.trainParam.epochs = 50;

net.trainParam.show = 10;

net = train(net,P,T); % Рис.11.59

Рис. 11.59

Количество настраиваемых параметров на 50 циклах обучения стабилизировалось и равно 15. Выполним моделирование сети и построим графики исследуемых функций.

Y = sim(net,P);

plot(P,Y,P,T,'+') % Рис.11.60

Рис. 11.60

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

Сопутствующие функции: NEWFF, NEWCF, TRAINGDM, TRAINGDA, TRAINGDX, TRAINLM, TRAINRP, TRAINCGF, TRAINCGB, TRAINSCG, TRAINCGP, TRAINOSS.