Алгоритм GDA, или алгоритм градиентного спуска с выбором параметра скорости настройки, использует эвристическую стратегию изменения этого параметра в процессе обучения.
Эта стратегия заключается в следующем. Вычисляются выход и погрешность инициализированной нейронной сети. Затем на каждом цикле обучения вычисляются новые
значения настраиваемых параметров и новые значения выходов и погрешностей. Если отношение нового значения погрешности к прежнему превышает величину max_perf_inc (по умолчанию 1.04), то новые значения настраиваемых параметров во внимание не принимаются. При этом параметр скорости настройки уменьшается с коэффициентом lr_dec (по умолчанию 0.7). Если новая погрешность меньше прежней, то параметр скорости настройки увеличивается с коэффициентом lr_inc (по умолчанию 1.05).
Эта стратегия способствует увеличению скорости и сокращению длительности обучения.
Алгоритм GDA в сочетании с алгоритмом GD определяет функцию обучения traingda, а в сочетании с алгоритмом GDM – функцию обучения traingdx.
|
|
Вновь обратимся к той же нейронной сети (см. рис. 3.8), но будем использовать функцию обучения traingda:
net = newff([–1 2; 0 5],[3,1],{'tansig','purelin'},'traingda');
Функция traingda характеризуется следующими параметрами, заданными по умолчанию:
net.trainParam
ans =
epochs: 100
goal: 0
lr: 0.0100
lr_inc: 1.0500
lr_dec: 0.7000
max_fail: 5
max_perf_inc: 1.0400
min_grad: 1.0000e–006
show: 25
Здесь epochs – максимальное количество циклов обучения; goal – предельное значение критерия обучения; lr – параметр скорости настройки; lr_inc – коэффициент увеличения скорости настройки; lr_dec – коэффициент уменьшения скорости настройки; max_fail – максимально допустимый уровень превышения ошибки контрольного подмножества по сравнению с обучающим; max_perf_inc – пороговый коэффициент отношения погрешностей; min_grad – минимальное значение градиента; show – интервал вывода информации, измеренный в циклах; time – предельное время обучения.
Установим следующие значения этих параметров:
net.trainParam.epochs = 300;
net.trainParam.goal = 1e–5;
net.trainParam.lr = 0.05;
net.trainParam.mc = 0.9;
net.trainParam.show = 50;
p = [–1 –1 2 2;0 5 0 5];
t = [–1 –1 1 1];
net = train(net,p,t); % Рис. 3.10
На рис. 3.10 приведен график изменения ошибки обучения в зависимости от числа
выполненных циклов.
Рис. 3.10
a = sim(net,p)
a = –0.9959 –1.0012 0.9963 0.9978
Нетрудно заметить, что количество циклов обучения по сравнению с предыдущим примером сократилось практически в 3 раза при сохранении той же погрешности обучения.
Демонстрационная программа nnd12vl иллюстрирует производительность алгоритма
с переменным параметром скорости настройки.