Сделай Сам Свою Работу на 5

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





 

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: scale_tol: maxstep:
show: alpha: 0.001 minstep: 1.0 e–006
goal: beta: 0.1 bmax:
time: Inf delta: 0.01    
min_grad: 1.0e–006 gama: 0.1    
max_fail: 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: scale_tol: maxstep:
show: alpha: 0.001 minstep: 1.0 e–6
goal: beta: 0.1 bmax:
time: Inf delta: 0.01    
min_grad: 1.0e–006 gama: 0.1    
max_fail: 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: lr: 0.01 mu_max: 1.0e10
show: mc: 0.9    
goal: mem_reduc:    
time: Inf mu: 0.001    
min_grad: 1.0e–006 mu_dec: 0.1    
max_fail: mu_inc:    

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

Функция обучения 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: mem_reduc:
show: mu: 0.005
goal: mu_dec: 0.1
time: Inf mu_inc:
min_grad: 1.0e–006 mu_max: 1.0e+010
max_fail:    

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

Функция обучения 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.

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.