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

Градиентные алгоритмы обучения

traingd

Алгоритм градиентного спуска GD

Синтаксис:

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

info = traingd(code)

Описание:

Функция traingd обучает нейронную сеть, используя алгоритм градиентного спуска GD.

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

info = traingd('pdefaults')'

info =

epochs:

100

min_grad:

1.0e–006

show:

25

max_fail:

5

goal:

0

searchFcn:

'srchbac'

time:

Inf

lr:

0.01

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

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

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

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

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

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

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

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

Алгоритм:

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

dX = lr * dperf/dX.

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

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

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

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

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

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

Пример:

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

P = [0 1 2 3 4 5];

T = [0 0 0 1 1 1];

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

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

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

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

net.trainParam.epochs = 500;

net.trainParam.goal = 0.01;

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

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

Рис. 11.44

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

Y = sim(net,P)

Y = 0.0669 0.0962 0.1284 0.8350 0.9640 0.9657

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

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

traingda

Обучение нейронной сети методом GDA

Синтаксис:

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

info = traingda(code)

Описание:

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

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

info = traingda('pdefaults')'

info =

epochs:

100

lr:

0.01

show:

25

lr_inc:

1.05

goal:

0

lr_dec:

0.7

time:

Inf

max_perf_inc:

1.04

min_grad:

1.0e–006

max_fail:

5

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

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

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

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

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

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

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

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

Алгоритм:

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

dX = lr * dperf/dX.

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

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

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

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

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

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

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

Пример:

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

P = [0 1 2 3 4 5];

T = [0 0 0 1 1 1];

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

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

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

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

net.trainParam.epochs = 500;

net.trainParam.goal = 0.01;

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

TR =

epoch: [194 double]

perf: [194 double]

vperf: [194 double]

tperf: [194 double]

lr: [194 double]

Рис. 11.45

На рис. 11.45 показано, как изменяется точность в процессе обучения; требуемое значение обеспечивается на 93-м цикле обучения; при этом параметр скорости настройки постоянно растет и достигает значения приблизительно 0.93 (рис. 11.46).

Рис. 11.46

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

Y = sim(net,P)

Y = 0.0376 0.1069 0.1922 0.9121 0.9774 0.9783

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

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

TRAINGDM

Алгоритм градиентного спуска с возмущением GDM

Синтаксис:

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

info = traingdm(code)

Описание:

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

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

info = traingdm('pdefaults')'

info =

epochs:

100

lr:

0.01

show:

25

max_perf_inc:

1.04

goal:

0

mc:

0.9

time:

Inf

min_grad:

1.0e–006

max_fail:

5

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

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

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

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

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

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

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

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

Алгоритм:

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

dX = mc*dXprev + lr*mc*dperf/dX,

где dXprev – вектор возмущения весов и смещений с коэффициентом mc.

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

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

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

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

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

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

Пример:

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

P = [0 1 2 3 4 5];

T = [0 0 0 1 1 1];

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

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

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

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

net.trainParam.epochs = 500;

net.trainParam.goal = 0.01;

net.trainParam.lr = 0.1;

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

Рис. 11.47

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

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

Y = sim(net,P)

Y = 0.0787 0.0393 0.1006 0.8696 0.8883 0.8884

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

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

traingdx

Обучение нейронной сети методом GDX

Синтаксис:

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

info = traingdx(code)

Описание:

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

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

info = traingdx('pdefaults')'

info =

epochs:

100

lr:

0.01

show:

25

lr_inc:

1.05

goal:

0

lr_dec:

0.7

time:

Inf

max_perf_inc:

1.04

min_grad:

1.0e–006

mc:

0.9

max_fail:

5

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

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

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

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

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

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

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

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

Алгоритм:

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

dX = mc*dXprev + lr*mc*dperf/dX,

где dXprev – вектор возмущения весов и смещений с коэффициентом mc.

Однако в данном случае, в отличие от алгоритма traingdm, параметр скорости настройки выполняет адаптивную функцию. Он увеличивается вlr_incраз, если критерий качества обучения сети уменьшается, и это реализуется на каждом цикле обучения. С другой стороны, если критерий качества увеличился более чем вmax_perf_incраз, то начинается коррекция параметра скорости настройки в сторону уменьшения с коэф­фи­циентомlr_dec.

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

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

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

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

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

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

Пример:

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

P = [0 1 2 3 4 5];

T = [0 0 0 1 1 1];

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

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

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

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

net.trainParam.epochs = 500;

net.trainParam.goal = 0.01;

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

TR =

epoch: [1106 double]

perf: [1106 double]

vperf: [1106 double]

tperf: [1106 double]

lr: [1106 double]

Рис. 11.48

На рис. 11.48 показано, как изменяется точность в процессе обучения; требуемое значение обеспечивается на 105-м цикле обучения; при этом параметр скорости настройки постоянно растет и достигает значения приблизительно 1.7 (рис. 11.49).

Рис. 11.49

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

Y = sim(net,P)

Y = 0.0787 0.0393 0.1006 0.8696 0.8883 0.8884

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

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

trainrp

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

Синтаксис:

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

info = trainrp(code)

Описание:

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

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

info = trainrp('pdefaults')'

info =

epochs:

100

delt_inc:

1.2

show:

25

delt_dec:

0.5

goal:

0

delta0:

0.07

time:

Inf

deltamax:

50

min_grad:

1.0e–006

max_fail:

5

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

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

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

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

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

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

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

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

Алгоритм:

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

dX = deltaX.*sign(gX),

где вектору deltaX присваиваются начальные значения delta0, а вектор gX – градиент критерия качества. На каждой итерации элементы deltaX изменяются. Если некоторый элемент вектора gX изменяет знак при переходе к следующей итерации, то соответствующий элемент вектора deltaX умножается на коэффициент delta_dec. Если элемент вектора gX сохраняет знак, то соответствующий элемент вектора deltaX умножается на коэффициент delta_inc [36].

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

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

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

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

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

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

Пример:

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

P = [0 1 2 3 4 5];

T = [0 0 0 1 1 1];

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

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

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

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

net.trainParam.epochs = 50;

net.trainParam.show = 10;

net.trainParam.goal = 0.01;

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

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

Рис. 11.50

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

Y = sim(net,P)

Y = 0.0696 0.0704 0.1339 0.8934 0.9390 0.9399

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

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