Способы адаптации и обучения
В ППП Neural Network Toolbox реализовано 2 способа адаптации и обучения: после довательный и групповой, в зависимости от того, применяется или последовательное илигрупповое представление входов. Адаптация нейронных сетей Статические сети. Воспользуемся следующей моделью однослойной линейной сети сдвухэлементным вектором входа, значения которого находятся в интервале [-1 1] и нулевым параметром скорости настройки: % Формирование однослойной статической линейной сети с двумя входам % и нулевым параметром скорости настройки net = newlin ([-l 1;-1 1],1, 0, 0); Требуется адаптировать параметры сети так, чтобы она формировала линейную зависимость вида t = 2p1+p2. Последовательный способ. Рассмотрим случай последовательного представления обучающей последовательности. В этом случае входы и целевой вектор формируются в виды массива формата cell: % Массив ячеек векторов входа Р = {[-1; 1] [-1/3; 1/4] [1/2; 0] [1/6; 2/3]}; Т = {-1 -5/12 1 1}; % Массив ячеек векторов цели Р1 = [Р{:}], Т1=[Т{:}] % Переход от массива ячеек к массиву double P1 = -1 -0.33333 0.5 0.16667 1 0.25 0 0.66667 Т1 = -1 -0.41667 1 1 Сначала зададим сеть с нулевыми значениями начальных весов и смещений: net.IW{l} = [0 0]; % Присваивание начальных весов net.b{l} =0; % Присваивание начального смещения В ППП NNT процедуры адаптации реализуются на основе метода adapt. Для управле ния процедурой адаптации используется свойство net.adaptFcn, которое задает метод адаптации; для статических сетей по умолчанию применяется метод adaptwb, которые позволяет выбирать произвольные функции для настройки весов и смещений. Функция настройки весов и смещений задаются свойствами net.inputWeights{i, j}.learnFcne net.layerWeights{i, j}.learnFcn и net.biases{i, j}.learnFcn. Выполним 1 цикл адаптации сети с нулевым параметром скорости настройки:
% Последовательная адаптация сети с входами Р и целями Т [netl,a,e] = adapt(net,Р,Т); % netl-новая сеть, а-выход, е-ошибка обучения В этом случае веса не модифицируются, выходы сети остаются нулевыми, поскольку параметр скорости настройки равен нулю и адаптации сети не происходит. Погрешности совпадают со значениями целевой последовательности netl.IW{l, 1}, a, e ans = 0 0 a = [0] [0] [0] [0] e = [-1] [-0.41667] [1] [1] Зададим значения параметров скорости настройки и весов входа и смещения: net.IW{l} = [0 0]; % Присваивание начальных весов net. b{l} =0; % Присваивание начального смещения net.inputWeights{l,1}.learnParam.lr = 0.2; net.biases{1,1}.learnParam.lr = 0; Нулевое значение параметра скорости настройки для смещения обусловлено тем, что выявляемая зависимость не имеет постоянной составляющей. Выполним 1 цикл настройки: [netl,a,e] = adapt(net,P,T); netl.IW{l, 1}, а, е ans = 0.34539 -0.069422 а = [0] [-0.11667] [0.11] [-0.091833] е = [-1] [-0.3] [0.89] [1.0918] Теперь выполним последовательную адаптацию сети в течение 30 циклов: % Последовательная адаптация сети с входами F и целями Т за 30 циклов net = newlin([-l 1;-1 1],1, 0, 0); net.IW{l} = [0 0]; % Присваивание начальных весов net.b{l} =0; % Присваивание начального смещения Зададим значения параметров скорости настройки для весов входа и смещения: net.inputWeights{l,1}.learnParam.lr = 0.2; net.biases{1,1}.learnParam.lr = 0; P = {[-1; 1] [-1/3; 1/4] [1/2; 0] [1/6; 2/3]}; % Массив векторов входа T = {-1 -5/12 1 1}; % Массив векторов цели for i=l:30, [net,a{i},e{i}] = adapt(net,P,T); W(i,:)=net.IW{l,l}; end mse(cell2mat(e{30})) % Среднеквадратичная ошибка адаптации ans = 0.0017176 W(30,:) % Веса после 30 циклов ans = 1.9199 0.925 cell2mat(a{30}) ans = -0.9944 -0.40855 0.95663 0.93005 cell2mat(e{30}) ans = -0.0055975 -0.0081125 0.043367 0.069947 Построим графики зависимости значений выходов сети ичвесовых коэффициентов з зависимости от числа итераций (рис. 3.1):. - Subplot(3,1,1) plot(0:30, [ [0 0 0 0];cell2mat(cell2mat(a'))], 'к1) % Рис 3.1,а xlabel(''),ylabel("Выходы a(i)'),grid subplot(3,1,2) plot(0:30, [ [0 0]; W],'k') % Рис 3.1,6 xlabel(''), ylabel('Beca входов w(i)'),grid subplot(3,1,3) for i=l:30, E(i) = mse(e{i}); end semilogy(l:30, E,+k') % Рис. 3.1,в xlabel(' Циклы'), ylabel('Ошибка1),grid
Рис. 8
Первый выход тот же, что и при нулевом значении параметра скорости настройки, так как до предъявления сети первого входа никаких модификаций не происходит. Второй выход отличается, так как параметры сети были модифицированы. Веса продолжают изменяться при подаче нового входа. Если сеть соответствует задаче, корректно заданы обучающие последовательности, начальные условия и параметр скорости настройки, то в конечном счете погрешность может быть сведена к нулю. В этом можно убедиться, изучая процесс адаптации, показанный на рис. 8. Условии окончания адаптации определяется погрешностью приближения к целевому вектору данном случае мерой такой погрешности является среднеквадратичная ошибка mse(e{i}) которая должна быть меньше 0.015. На рис. 8 а показаны выходы нейронов в процессе адаптации сети, на рис. 8 б коэффициенты восстанавливаемой зависимости, которые соответствуют элементам вектора весов входа, а на рис. 8, в — ошибка обучения. Как следует из анализа графиков за 12 шагов получена ошибка обучения 1.489е-3. Предлагаем читателю самостоятельно убедиться, что для исследуемой зависимости обучающие последовательности вида Р = {[-1; 1] [-1/2; 1/2] [1/2; -1/2] [1; -1]}; % Массив векторов входа Т = {-1 -1/2 1/2 1}; % Массив векторов цели не являются представительными. Групповой способ. Рассмотрим случай группового представления обучающей последова-гтельности. В этом случае входы и целевой вектор формируются в виде массива формата double. Р = [-1 -1/3 1/2 1/6; 1 1/4 0 2/3]; Т = [-1 -5/12 1 1]; Используется та же модель статической сети с теми же требованиями к погрешности адаптации. При обращении к М-функции adapt по умолчанию вызываются функции adaptwb и learnwh; последняя выполняет настройку параметров сети на основе алгоритма WH, реализующего правило Уидроу - Хоффа (Widrow - Hoff). Основной цикл адаптации сети с заданной погрешностью выглядит следующим образом: %Групповой способ адаптации сети с входами Р и целями Т net3 = newlin([-l 1;-1 1],1, 0, 0.2); net3.IW{l} = [0 0]; % Присваивание начальных весов net3.b{l} =0; % Присваивание начального смещения net3.inputWeights{l,l}.learnParam.lr = 0.2; Р = [-1 -1/3 1/2 1/6; 1 1/4 0 2/3]; Т = [-1 -5/12 1 1]; ЕЕ = 10; i=l; while ЕЕ > 0.0017176 [net3,a{i},e{i>,pf] = adapt(net3,P,T); W(i,:) = net3.IW{l,l}; ЕЕ = mse(e{i});
ee(i)= ЕЕ; i = i+1; End Результатом адаптации при заданной погрешности являются следующие значения коэффициентов линейной зависимости, значений выходов нейронной сети, приближающихся к значениям желаемого выхода, а также среднеквадратичная погрешность адаптации: W(63,:) ans = 1.9114 0.84766 Cell2mat(a(63)) ans = -1.003 -0.36242 1.0172. 0.94256 ЕЕ = mse(e{63}) ЕЕ = 0.0016368 mse(e{l}) ans = 0.7934 Процедура адаптации выходов и параметров нейронной сети иллюстрируется рис. 3.2. Subplot(3,1,1) plot(0:63,[zeros(l,4); cell2mat(a')], 'k') % Рис.3.2,a
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|