Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Литература / Потемкин В.Г. MATLAB 6.doc
Скачиваний:
4
Добавлен:
07.09.2025
Размер:
15.55 Mб
Скачать

3.3. Алгоритмы обучения

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

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

Ниже для обозначения алгоритмов используются их англоязычные сокращения, ассоциирующиеся с названиями алгоритмов в ППП Neural Network Toolbox.

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

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

Рассмотрим двухслойную нейронную сеть прямой передачи сигнала с сигмоидальным и линейным слоями для обучения ее на основе метода обратного распространения ошибки (рис. 3.7):

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

Рис. 3.7

Последовательная адаптация. Чтобы подготовить модель сети к процедуре последовательной адаптации на основе алгоритма GD, необходимо указать ряд параметров. В первую очередь это имя функции настройки learnFcn, соответствующее алгоритму градиентного спуска, в данном случае это М-функция learngd:

net.biases{1,1}.learnFcn = 'learngd';

net.biases{2,1}.learnFcn = 'learngd';

net.layerWeights{2,1}.learnFcn = 'learngd';

net.inputWeights{1,1}.learnFcn = 'learngd';

С функцией learngd связан лишь один параметр скорости настройки lr. Текущие приращения весов и смещений сети определяются умножением этого параметра на вектор градиента. Чем больше значение параметра, тем больше приращение на текущей итерации. Если параметр скорости настройки выбран слишком большим, алгоритм может стать неустойчивым; если параметр слишком мал, то алгоритм может потребовать длительного счета.

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

net.layerWeights{2,1}.learnParam

ans =

lr: 0.01

Увеличим значение этого параметра до 0.2:

net.layerWeights{2,1}.learnParam.lr = 0.2;

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

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

t = [–1 –1 1 1];

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

p = num2cell(p,1);

t = num2cell(t,1);

Последний параметр, который требуется установить при последовательном обучении, – это число проходов net.adaptParam.passes:

net.adaptParam.passes = 50;

Теперь можно выполнить настройку параметров, используя процедуру адаптации:

[net,a,e] = adapt(net,p,t);

Чтобы проверить качество обучения, после окончания обучения смоделируем сеть:

a = sim(net,p)

a = [–1.02] [–0.99624] [1.0279] [1.0021]

mse(e)

ans = 5.5909e–004

Групповое обучение. Для обучения сети на основе алгоритма GD необходимо использовать М-функцию traingd взамен функции настройки learngd. В этом случае нет необходимости задавать индивидуальные функции обучения для весов и смещений, а достаточно указать одну обучающую функцию для всей сети.

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

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

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

net.trainParam

ans =

epochs: 100

goal: 0

lr: 1.0000e–002

max_fail: 5

min_grad: 1.0000e–010

show: 25

time: Inf

Здесь epochs – максимальное количество циклов (эпох) обучения; goal – предельное значение критерия обучения; lr – параметр скорости настройки; max_fail – максимально допустимый уровень превышения ошибки контрольного подмножества по сравнению с обучающим; min_grad – минимальное значение градиента; show – интервал вывода информации, измеренный в циклах; time – предельное время обучения.

Установим новые значения параметров обучения, зададим обучающую последовательность в виде массива double и выполним процедуру обучения:

net.trainParam.show = 50;

net.trainParam.lr = 0.05;

net.trainParam.epochs = 300;

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.8

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

Рис. 3.8

Для проверки качества обучения промоделируем спроектированную сеть:

a = sim(net,p)

a = –1.0042 –0.9958 0.9987 0.9984

Более тщательно ознакомиться с методом градиентного спуска можно с помощью демонстрационной программы nnd12sd1, которая иллюстрирует работу алгоритма GD.