Матрицы весов и векторы смещений
Перечисленные ниже свойства объекта net включают перечень функций, которые используются для описания матриц весов и векторов смещений.
| net
| Тип
| Размер
| Значение по умолчанию
| Имя поля
| ¾
| .IW
| Cell array
| NumLayers ´ NumInputs
| {0´0}
| Массив ячеек для матриц весов входа
| ¾
| .LW
| Cell array
| NumLayers ´ NumLayers
| {0´0}
| Массив ячеек для матриц весов слоя
| ¾
| .b
| Cell array
| NumLayers ´ 1
| {0´1}
| Массив ячеек для векторов смещений
|
IW массив ячеек
Матрицы весов входа. Массив ячеек IW размера Nl´Ni, где Nl – число слоев numLayers и Ni – число входов numInputs сети net, каждый элемент которого является матрицей весов, связывающей слой i со входом j сети; структура этого массива согласована с матрицей связности inputConnect(i, j). Каждая матрица весов должна иметь число строк, равное параметру layers{i}.size, а число столбцов должно удовлетворять соотношению
net.inputs{j}.size * length(net.inputWeights{i,j}.delays)
и соответствовать параметру inputWeights{i, j}.size.
LW массив ячеек
Матрицы весов слоя. Массив ячеек LW размера Nl´ Nl, где Nl – число слоев numLayers сети net, каждый элемент которого является матрицей весов, связывающей слой i со слоем j сети; структура этого массива согласована с матрицей связности layerConnect(i, j). Каждая матрица весов должна иметь число строк, равное параметру layers{i}.size, а число столбцов должно удовлетворять соотношению
net.layers{j}.size * length(net.layerWeights{i,j}.delays)
и соответствовать параметру layerWeights{i, j}.size.
b массив ячеек
Векторы смещений. Вектор ячеек b размера Nl´1, где Nl – число слоев numLayers объекта net, каждый элемент которого является вектором смещений для слоя i сети; структура этого вектора согласована с вектором связности biasConnect(i). Длина вектора смещений для слоя i должна соответствовать параметру biases{i}.size.
Информационные поля
В структуре объекта net имеются поля, предназначенные для записи информации.
| net
| Тип
| Размер
| Значение по умолчанию
| Имя поля
| ¾.hint
| Struct
| 1´var
| 1´1
| Информация о текущих значениях полей объекта network
| ¾.userdata
| Struct
| 1´1
| 1´1
| Информация пользователя
|
| ¾.note
| Char
| 1´var
| 'Put your custom input information here.'
| Текст
| | | | | | | |
hint массив записей
Значения полей объекта network. Это свойство обеспечивает информацию о текущих значениях полей массива записей net. Эта информация появляется в поле hint только после инициализации нейронной сети.
userdata массив записей
Поле для записи информации пользователя. Это свойство обеспечивает место для записи информации, относящейся к нейронной сети. Предусмотрено только одно поле userdata.note для записи текста. По умолчанию оно содержит строку 'Put your custom input information here.' – "Информацию разместите здесь".
В заключение следует отметить, что для получения полной информации о структуре полей инициированного объекта network следует применять М-функцию fieldnames(<имя_сети>), которая будет отражать текущее состояние нейронной сети.
Формирование моделей нейронных сетей
Модели сетей
netWORK
| Создание шаблона нейронной сети
| Блок SIMULINK:
Синтаксис:
net = network
net = network(numInputs, numLayers, biasConnect, inputConnect, layerConnect, outputConnect, targetConnect)
Описание:
Функция network – это конструктор класса объектов network object, используемых в ППП NNT.
Функция net = network создает шаблон нейронной сети net, значения полей которого обнулены.
Функция net = network(numInputs, numLayers, biasConnect, inputConnect, layerConnect, outputConnect, targetConnect) применяется как конструктор класса для написания моделей нейронных сетей.
Выходной аргумент net – имя нейронной сети.
Пример:
Создадим шаблон нейронной сети с двумя входами (numInputs = 2), тремя слоями (numLayers = 3) и следующими матрицами связности:
BiasConnect = [1; 0; 0] размера numLayers´1;
inputConnect = [1 1; 0 0; 0 0] размера numLayers´numInputs;
layerConnect = [0 0 0; 1 0 0; 0 1 0] размера numLayers´numLayers;
outputConnect = [0 0 1] размера 1´ numLayers;
targetConnect = [0 0 1] размера 1´ numLayers.
net = network(2, 3, [1; 0; 0], [1 1; 0 0; 0 0], [0 0 0; 1 0 0; 0 1 0], ...
[0 0 1], [0 0 1]);
gensim(net) % Рис.11.1
Получим структуру, представленную на рис. 11.1.
Рис. 11.1
Если раскрыть блок Neural Network, то можно выявить структуру сети, обусловленную матрицами связности inputConnect и layerConnect (рис. 11.2).
Рис. 11.2
Из анализа рис. 11.2 следует, что оба входа p{1} и p{2} действуют только на слой 1, а слои 1, 2 и 3 соединены последовательно. Выходом слоя 1 является описатель a{1}; выходом слоя 2 – описатель a{2}; выходом слоя 3 – описатель a{3}; выход сети – описатель y{1} – совпадает с выходом слоя 3.
Раскроем слои 1, 2 и 3 (рис. 11.3, а–в).
Рис. 11.3
На рис. 11.3, а показана схема слоя 1 со следующими обозначениями:
p{1} – описатель входа 1 на слое 1;
p{2} – описатель входа 2 на слое 1;
Delays 1 – линия задержки для входа 1;
Delays 2 – линия задержки для входа 2;
IW{1,1} – описатель матрицы весов для входа 1 на слое 1;
IW{1,2} – описатель матрицы весов для входа 2 на слое 1;
b{1} – описатель вектора смещений на слое 1;
netsum – функция накопления для слоя 1;
purelin – функция активации для слоя 1;
a{1} – описатель выхода на слое 1.
На рис. 11.3, б показана схема слоя 2 со следующими обозначениями:
a{1} – описатель входа на слое 2;
Delays 1 – линия задержки;
LW{2,1} – описатель матрицы весов связей слоев 1 и 2;
netsum – функция накопления для слоя 2;
purelin – функция активации для слоя 2;
a{2} – описатель выхода на слое 2.
На рис. 11.3, в показана схема слоя 3 со следующими обозначениями:
a{2} – описатель входа на слое 3;
Delays 1 – линия задержки;
LW{3,2} – описатель матрицы весов связей слоев 2 и 3;
netsum – функция накопления для слоя 3;
purelin – функция активации для слоя 3;
a{3} – описатель выхода на слое 3.
Введем линии задержки для входов 1 и 2, а также для слоя 3 (рис. 11.4):
net.inputWeights{1,1}.delays = [0 1];
net.inputWeights{1,2}.delays = [1 2];
net.layerWeights{3,2}.delays = [0 1 2];
Рис. 11.4
На рис. 11.4 показаны развернутые блоки задержек для всех слоев сети. На схемах выходы этих блоков обозначаются следующим образом:
pd{1,1} – входная последовательность [p1(t), p1(t–1)] для входа 1 на слое 1;
pd{1,2} – входная последовательность [p2(t–1), p2(t–2)] для входа 2 на слое 1;
pd{2,1} – последовательность сигналов, поступающая со слоя 1 на слой 2;
pd{3,2} – последовательность сигналов, поступающая со слоя 2 на слой 3.
Рассмотрим описатель матрицы весов на примере весов входа для слоя 1 (рис. 11.5).
Рис. 11.5
Эта схема использует следующие обозначения:
pd{1,1} – вектор входной последовательности;
IW{1,1}(1,:) – строка матрицы весов;
dotprod1 – скалярное произведение z = w*p;
iz{1,1} – массив взвешенных входов.
Установим параметры нейронной сети и векторов входа:
net.inputs{1}.range = [0 1];
net.inputs{2}.range = [0 1];
net.b{1}=–1/4;
net.IW{1,1} = [ 0.5 0.5 ]; net.IW{1,2} = [ 0.5 0.25];
net.LW{2,1} = [ 0.5 ];
net.LW{3,2} = [ 0.5 0.25 1];
P = [0.5 1; 1 0.5];
После этого модель нейронной сети может быть промоделирована либо используя переопределяемый метод network\sim, либо с помощью системы SIMULINK.
Построенная модель будет использована при описании методов sim и gensim.
Справка:
help network/network
Сопутствующие функции: GENSIM.
Однослойные сети
Персептрон
NEWP
| Создание персептрона
| Синтаксис:
net = newp(PR,s,tf,lf)
Описание:
Персептроны предназначены для решения задач классификации входных векторов, относящихся к классу линейно отделимых.
Функция net = newp(PR, s, tf, lf) формирует нейронную сеть персептрона.
Входные аргументы:
PR – массив размера R´2 минимальных и максимальных значений для R векторов входа;
s – число нейронов;
tf – функция активации из списка {hardlim, hardlims}, по умолчанию hardlim;
lf – обучающая функция из списка {learnp, learnpn}, по умолчанию learnp.
Выходные аргументы:
net – объект класса network object.
Свойства:
Персептрон – это однослойная нейронная сеть с функциями взвешивания dotprod, накопления потенциала netsum и выбранной функцией активации. Слой характеризуется матрицей весов и вектором смещений, которые инициализируются М-функцией initzero.
Адаптация и обучение выполняются М-функциями adaptwb и trainwb, которые модифицируют значения весов и смещений до тех пор, пока не будет достигнуто требуемое значение критерия качества обучения в виде средней абсолютной ошибки, вычисляемой М-функцией mae.
Пример:
Создать персептрон с одним нейроном, входной вектор которого имеет 2 элемента, значения которых не выходят за пределы диапазона (рис. 11.6):
net = newp([0 1; 0 1],1);
gensim(net) % Рис.11.6
Рис. 11.6
Определим следующую последовательность двухэлементных векторов входа P, составленных из 0 и 1:
P = {[0; 0] [0; 1] [1; 0] [1; 1]};
Обучим персептрон выполнять операцию ЛОГИЧЕСКОЕ И. С этой целью для полного набора входных векторов сформируем последовательность целей:
P1 = cat(2, P{:});
T1 = num2cell(P1(1, :) & P1(2, :))
T1 = [0] [0] [0] [1]
Применим процедуру адаптации, установив число проходов равным 10:
net.adaptParam.passes = 10;
net = adapt(net,P,T1);
Вектор весов и смещение можно определить следующим образом:
net.IW{1}, net.b{1}
ans = 2 1
ans = –3
Таким образом, разделяющая линия имеет вид:
L: 2p1 + p2 – 3 = 0.
Промоделируем спроектированную нейронную сеть, подав входную обучающую последовательность:
Y = sim(net,P)
Y = [0] [0] [0] [1]
Настройка параметров сети выполнена правильно.
Обучим персептрон выполнять операцию НЕИСКЛЮЧАЮЩЕЕ ИЛИ. С этой целью для полного набора входных векторов Р сформируем последовательность целей:
P1 = cat(2, P{:});
T2 = num2cell(P1(1, :) | P1(2, :))
T2 = [0] [1] [1] [1]
Применим процедуру обучения, установив число циклов равным 20:
net.trainParam.epochs = 20;
net = train(net,P,T2);
Вектор весов и смещение можно определить следующим образом:
net.IW{1}, net.b{1}
net.IW{1}, net.b{1}
ans = 2 2
ans = –2
Таким образом, разделяющая линия имеет вид:
L: 2p1 + 2p2 – 2 = 0.
Промоделируем спроектированную нейронную сеть, подав входную обучающую последовательность:
Y = sim(net,P)
Y = [0] [1] [1] [1]
Обучение и настройка сети выполнены правильно.
Замечание:
Персептроны решают задачу классификации линейно отделимых входных векторов за конечное время. В случае больших по длине входных векторов функция обучения learnpn может быть по времени выполнения предпочтительнее функции обучения learnp.
Сопутствующие функции: SIM, INIT, ADAPT, TRAIN, HARDLIM, HARDLIMS, LEARNP, LEARNPN.
Линейные сети
Синтаксис:
net = newlin(PR,s,id,lr)
net = newlin(PR,s,0,P)
Описание:
Линейные слои находят применение при решении задач аппроксимации, фильтрации и предсказания сигналов, построении моделей динамических систем в задачах управления.
Функция net = newlin(PR, s, id, lr) формирует нейронную сеть в виде линейного слоя.
Входные аргументы:
PR – массив размера R´2 минимальных и максимальных значений для R векторов входа;
s – число нейронов;
id – описание линии задержки на входе сети, по умолчанию [0];
lr – параметр скорости настройки, по умолчанию 0.01.
Выходные аргументы:
net – объект класса network object с архитектурой линейного слоя.
Функция net = newlin(PR, s, 0, P), где P – матрица векторов входа, формирует линейный слой с параметром скорости настройки, гарантирующим максимальную степень устойчивости слоя для данного входа P.
Пример:
Сформировать линейный слой, который для заданного входа воспроизводит заданный отклик системы.
Архитектура линейного слоя: линия задержки типа [0 1 2], 1 нейрон, вектор входа с элементами из диапазона [–1 1], параметр скорости настройки 0.01.
net = newlin([–1 1], 1, [0 1 2], 0.01);
gensim(net) % Рис.11.7
Элементы линейного слоя показаны на рис. 11.7. Характерная особенность этого слоя – наличие линии задержки, что свидетельствует о том, что такая нейронная сеть является динамической.
Сформируем следующие обучающие последовательности векторов входа и цели:
P1 = {0 –1 1 1 0 –1 1 0 0 1};
T1 = {0 –1 0 2 1 –1 0 1 0 1};
P2 = {1 0 –1 –1 1 1 1 0 –1};
T2 = {2 1 –1 –2 0 2 2 1 0};
Выполним обучение, используя только обучающие последовательности P1 и T1:
net = train(net,P1,T1);
Характеристика процедуры обучения показана на рис. 11.8. Из ее анализа следует, что требуемая точность обучения достигается на 73-м цикле. Соответствующие значения весов и смещения следующие:
net.IW{1}, net.b{1}
ans = 0.8751 0.8875 –0.1336
ans = 0.0619
Рис. 11.8
Выполним моделирование сети для всех значений входа, объединяющих векторы Р1 и Р2:
Y1 = sim(net,[P1 P2]);
Результаты моделирования показаны на рис. 11.10 в виде зависимости Y1; последовательность целей, объединяющая векторы T1 и T2, соответствует зависимости Т3.
Теперь выполним обучение сети на всем объеме обучающих данных, соответствующем объединению векторов входа {[P1 P2]} и векторов целей {[T1 T2]}:
net = init(net);
P3 = [P1 P2];
T3 = [T1 T2];
net.trainParam.epochs = 200;
net.trainParam.goal = 0.01;
net = train(net,P3,T3);
Рис. 11.9
В этом случае процедура обучения не достигает предельной точности в течение 200 циклов обучения и, судя по виду кривой, имеет статическую ошибку.
Значения весов и смещений несколько изменяются:
net.IW{1}, net.b{1}
ans = 0.9242 0.9869 0.0339
ans = 0.0602
Соответствующая дискретная модель динамического линейного слоя имеет вид:
yk = 0.9242rk + 0.9869rk –1 + 0.0339rk –2 + 0.0602.
Результаты моделирования показаны на рис. 11.10 в виде зависимости Y3.
Y3 = sim(net,[P1 P2])
Рис. 11.10
Из сравнения кривых Y3 и Y1 следует, что точность воспроизведения целевой последовательности на интервале тактов времени с 11-й по 19-й стала выше и несколько уменьшилась на 5-м и 9-м тактах. В целом сформированный динамический линейный слой достаточно точно отслеживает кривую цели на последовательностях входов, не участвовавших в обучении.
Алгоритм:
Линейный слой использует функцию взвешивания dotprod, функцию накопления потенциала netsum и функцию активации purelin. Слой характеризуется матрицей весов и вектором смещений, которые инициализируются М-функцией initzero.
Адаптация и обучение выполняются М-функциями adaptwb и trainwb, которые модифицируют веса и смещения, используя М-функцию learnwh, до тех пор пока не будет достигнуто требуемое значение критерия качества обучения в виде средней квадратичной ошибки, вычисляемой М-функцией mse.
Сопутствующие функции: NEWLIND, SIM, INIT, ADAPT, TRAIN.
NEWLIND
| Линейный слой LIND
| Синтаксис:
net = newlind(P, T)
Описание:
Линейный слой LIND использует для расчета весов и смещений процедуру решения систем линейных алгебраических уравнений на основе метода наименьших квадратов, и поэтому в наибольшей степени он приспособлен для решения задач аппроксимации, когда требуется подобрать коэффициенты аппроксимирующей функции. В задачах управления такой линейный слой можно применять для идентификации параметров динамических систем.
Функция net = newlind(P, T) формирует нейронную сеть, используя только обучающие последовательности входа P размера R´Q и цели T размера S´Q. Выходом является объект класса network object с архитектурой линейного слоя.
Пример:
Требуется сформировать линейный слой, который обеспечивает для заданного входа P выход, близкий к цели T, если заданы следующие обучающие последовательности:
P = 0:3;
T = [0.0 2.0 4.1 5.9];
Анализ данных подсказывает, что требуется найти аппроксимирующую кривую, которая близка к зависимости t = 2p. Применение линейного слоя LIND в данном случае вполне оправдано.
net = newlind(P,T);
gensim(net) % Рис.11.11
| Рис. 11.11
| Значения весов и смещений равны:
net.IW{1}, net.b{1}
ans = 1.9800
ans = 0.3000
Соответствующая аппроксимирующая кривая описывается соотношением
yk = 1.9800rk + 0.3000.
Выполним моделирование сформированного линейного слоя:
Y = sim(net,P)
Y = 0.0300 2.0100 3.9900 5.9700
Читатель может самостоятельно убедиться, построив соответствующие графики зависимостей, что аппроксимирующая кривая в полной мере соответствует правилу наименьших квадратов.
Алгоритм:
Функция newlind вычисляет значения веса W и смещения B для линейного уровня с входом P и целью T, решая линейное уравнение в смысле метода наименьших квадратов:
[W b] * [P; ones] = T.
Сопутствующие функции: sim, newlin.
Многослойные сети
NEWFF
| Сеть прямой передачи FF
| Синтаксис:
net = newff(PR,[S1 S2...SNl],{TF1 TF2...TFNl},btf,blf,pf)
Описание:
Функция newff предназначена для создания многослойных нейронных сетей прямой передачи сигнала с заданными функциями обучения и настройки, которые используют метод обратного распространения ошибки.
Функция net = newff(PR, [S1 S2 ... SNl], {TF1 TF2 ... TFNl}, btf, blf, pf) формирует многослойную нейронную сеть.
Входные аргументы:
PR – массив размера R´2 минимальных и максимальных значений для R векторов входа;
Si – количество нейронов в слое i;
TFi – функция активации слоя i, по умолчанию tansig;
btf – обучающая функция, реализующая метод обратного распространения, по умолчанию trainlm;
blf – функция настройки, реализующая метод обратного распространения, по умолчанию learngdm;
pf – критерий качества обучения, по умолчанию mse.
Выходные аргументы:
net – объект класса network object многослойной нейронной сети.
Свойства сети:
Функциями активации могут быть любые дифференцируемые функции, например tansig, logsig или purelin.
Обучающими функциями могут быть любые функции, реализующие метод обратного распространения: trainlm, trainbfg, trainrp, traingd и др.
Функция trainlm является обучающей функцией по умолчанию, поскольку обеспечивает максимальное быстродействие, но требует значительных ресурсов памяти. Если ресурсы памяти недостаточны, воспользуйтесь следующими рекомендациями:
· установите значение свойства net.trainParam.mem_reduc равным 2 или более, что снизит требования к памяти, но замедлит обучение;
· воспользуйтесь обучающей функцией trainbfg, которая работает медленнее, но требует меньшей памяти, чем М-функция trainlm;
· перейдите к обучающей функции trainrp, которая работает медленнее, но требует меньшей памяти, чем М-функция trainbfg.
Функциями настройки могут быть функции, реализующие метод обратного распространения: learngd, learngdm.
Критерием качества обучения может быть любая дифференцируемая функция: mse, msereg.
Пример:
Создать нейронную сеть, чтобы обеспечить следующее отображение последовательности входа P в последовательность целей T:
P = [0 1 2 3 4 5 6 7 8 9 10];
T = [0 1 2 3 4 3 2 1 2 3 4];
Архитектура нейронной сети: двухслойная сеть с прямой передачей сигнала; первый слой – 5 нейронов с функцией активации tansig; второй слой – 1 нейрон с функцией активации purelin; диапазон изменения входа [0 10].
net = newff([0 10],[5 1],{'tansig' 'purelin'});
gensim(net) % Рис.11.12
Рис. 11.12
Выполним моделирование сети и построим графики сигналов выхода и цели (рис. 11.13):
Y = sim(net,P);
plot(P, T, P, Y, 'o') % Рис.11.13
Рис. 11.13
Обучим сеть в течение 50 циклов:
net.trainParam.epochs = 50;
net = train(net,P,T);
Характеристика точности обучения показана на рис. 11.14; установившаяся среднеквадратичная ошибка составляет приблизительно 0.02.
Рис. 11.14
Выполним моделирование сформированной двухслойной сети, используя обучающую последовательность входа:
Y = sim(net,P);
plot(P,T,P,Y,'o') % Рис.11.15
Результаты моделирования показаны на рис. 11.15 и свидетельствуют о хорошем отображении входной последовательности в выходную последовательность.
Рис. 11.15
Алгоритм:
Многослойная сеть прямой передачи сигнала включает Nl слоев с функциями взвешивания dotprod, накопления netsum и заданными пользователем функциями активации.
Первый слой характеризуется матрицей весов входа, другие слои – матрицами весов выхода предшествующего слоя; все слои имеют смещения. Выход последнего слоя является выходом сети. Веса и смещения каждого слоя инициализируются с помощью М-функции initnw.
Режим адаптации реализуется М-функцией adaptwb. Для режима обучения выбирается обучающая функция, реализующая метод обратного распространения ошибки.
Оценка качества обучения основана на функциях оценки качества, выбираемых из списка {mae | mse | msereg | sse}.
Сопутствующие функции: NEWCF, NEWELM, SIM, INIT, ADAPT, TRAIN.
neWFFTD
| Динамическая нейронная сеть FFTD
| Сеть прямой передачи с запаздыванием
Синтаксис:
net = newfftd(PR, ID, [S1 S2 ... SNl], {TF1 TF2 ... TFNl}, btf, blf, pf)
Описание:
Функция newfftd предназначена для создания многослойных нейронных сетей прямой передачи сигнала с линиями задержки и заданными функциями обучения и настройки, использующими метод обратного распространения ошибки.
Функция net = newfftd(PR, ID, [S1 S2 ... SNl], {TF1 TF2 ... TFNl}, btf, blf, pf) формирует динамическую многослойную нейронную сеть.
Входные аргументы:
PR – массив размера R´2 минимальных и максимальных значений для R векторов входа;
ID – вектор параметров линии задержки на входе сети;
Si – количество нейронов в слое i;
TFi – функция активации слоя i, по умолчанию tansig;
btf – обучающая функция, реализующая метод обратного распространения, по умолчанию trainlm;
blf – функция настройки, реализующая метод обратного распространения, по умолчанию learngdm;
pf – критерий качества обучения, по умолчанию mse.
Выходные аргументы:
net – объект класса network object динамической многослойной нейронной сети.
Свойства сети:
Функциями активации могут быть любые дифференцируемые функции, например tansig, logsig или purelin.
Обучающими функциями могут быть любые функции, реализующие метод обратного распространения: trainlm, trainbfg, trainrp, traingd и др.
Функция trainlm является обучающей функцией по умолчанию, поскольку обеспечивает максимальное быстродействие, но требует значительных ресурсов памяти. Если ресурсы памяти недостаточны, воспользуйтесь следующими рекомендациями:
· установите значение свойства net.trainParam.mem_reduc равным 2 или более, что снизит требования к памяти, но замедлит обучение;
· воспользуйтесь обучающей функцией trainbfg, которая работает медленнее, но требует меньшей памяти, чем М-функция trainlm;
· перейдите к обучающей функции trainrp, которая работает медленнее, но требует меньшей памяти, чем М-функция trainbfg.
Функциями настройки могут быть функции, реализующие метод обратного распространения: learngd, learngdm.
Критерием качества обучения может быть любая дифференцируемая функция: mse, msereg.
Пример:
Создать нейронную сеть, чтобы обеспечить следующее отображение последовательности входа P в последовательность целей T:
P = {1 0 0 1 1 0 1 0 0 0 0 1 1 0 0 1};
T = {1 –1 0 1 0 –1 1 –1 0 0 0 1 0 –1 0 1};
Архитектура нейронной сети: двухслойная сеть с прямой передачей сигнала и линией задержки [0 1]; первый слой – 5 нейронов с функцией активации tansig; второй слой – 1 нейрон с функцией активации purelin; диапазон изменения входа [0 10].
net = newfftd([0 1],[0 1],[5 1],{'tansig' 'purelin'}); % Рис.11.16
Обучим сеть в течение 50 циклов и промоделируем, используя в качестве теста обучающую последовательность входа:
net.trainParam.epochs = 50;
net = train(net,P,T);
Y = sim(net,P)
Y = [1] [–1] [0] [1] [0] [–1] [1] [–1] [0] [0] [0] [1] [0] [–1] [0] [1]
Выход сети точно совпадает с целевой последовательностью.
Алгоритм:
Многослойная динамическая сеть прямой передачи включает Nl слоев с функциями взвешивания dotprod, функциями накопления netsum и заданными пользователем функциями активации.
Первый слой характеризуется матрицей весов входа, другие слои – матрицами весов выхода предшествующего слоя; все слои имеют смещения. Выход последнего слоя является выходом сети. Веса и смещения каждого слоя инициализируются с помощью М-функции initnw.
Режим адаптации реализуется М-функцией adaptwb. Для режима обучения выбирается обучающая функция, использующая метод обратного распространения ошибки.
Оценка качества обучения основана на функциях оценки качества, выбираемых из списка {mae | mse | msereg | sse}.
Сопутствующие функции: NEWCF, NEWELM, SIM, INIT, ADAPT, TRAIN.
neWCF
| Каскадная сеть прямой передачи CF
| Синтаксис:
net = newcf(PR,[S1 S2...SNl],{TF1 TF2...TFNl},btf,blf,pf)
Описание:
Функция newcf предназначена для создания каскадных нейронных сетей прямой передачи сигнала с заданными функциями обучения и настройки, использующими метод обратного распространения ошибки.
Функция net = newcf(PR, [S1 S2 ... SNl], {TF1 TF2 ... TFNl}, btf, blf, pf) формирует каскадную нейронную сеть.
Входные аргументы:
PR – массив размера R´2 минимальных и максимальных значений для R векторов входа;
Si – количество нейронов в слое i;
TFi – функция активации слоя i, по умолчанию tansig;
btf – обучающая функция, реализующая метод обратного распространения, по умолчанию trainlm;
blf – функция настройки, реализующая метод обратного распространения, по умолчанию learngdm;
pf – критерий качества обучения, по умолчанию mse.
Выходные аргументы:
net – объект класса network object каскадной нейронной сети с прямой передачей и обучением методом обратного распространения.
Свойства сети:
Функциями активации могут быть любые дифференцируемые функции, например tansig, logsig или purelin.
Обучающими функциями могут быть любые функции, реализующие метод обратного распространения: trainlm, trainbfg, trainrp, traingd и др.
Функция trainlm является обучающей функцией по умолчанию, поскольку обеспечивает максимальное быстродействие, но требует значительных ресурсов памяти. Если ресурсы памяти недостаточны, воспользуйтесь следующими рекомендациями:
· установите значение свойства net.trainParam.mem_reduc равным 2 или более, что снизит требования к памяти, но замедлит обучение;
· воспользуйтесь обучающей функцией trainbfg, которая работает медленнее, но требует меньшей памяти, чем М-функция trainlm;
· перейдите к обучающей функции trainrp, которая работает медленнее, но требует меньшей памяти, чем М-функция trainbfg.
Функциями настройки могут быть функции, реализующие метод обратного распространения: learngd, learngdm
Критерием качества обучения может быть любая дифференцируемая функция: mse, msereg.
Пример:
Создать каскадную нейронную сеть, чтобы обеспечить следующее отображение последовательности входа P в последовательность целей T:
P = [0 1 2 3 4 5 6 7 8 9 10];
T = [0 1 2 3 4 3 2 1 2 3 4];
Архитектура нейронной сети: каскадная двухслойная сеть с прямой передачей сигнала; первый слой – 5 нейронов с функцией активации tansig; второй слой – 1 нейрон с функцией активации purelin; диапазон изменения входа [0 10].
net = newcf([0 10],[5 1],{'tansig' 'purelin'});
gensim(net) % Рис.11.17
Результат представлен на рис. 11.17.
Рис. 11.17
Обучим сеть в течение 50 циклов:
net.trainParam.epochs = 50;
net = train(net,P,T);
Характеристика точности обучения показана на рис. 11.18; установившаяся среднеквадратичная ошибка составляет приблизительно 0.002, что на порядок выше, чем для сети FF ( см. рис. 11.14).
Рис. 11.18
Выполним моделирование каскадной двухслойной сети, используя обучающую последовательность входа:
Y = sim(net,P);
plot(P,T,P,Y,'o')
Результат моделирования представлен на рис. 11.19.
Рис. 11.19
Алгоритм:
Каскадная сеть прямой передачи использует функции взвешивания dotprod, накопления netsum и заданные пользователем функции активации.
Первый каскад характеризуется матрицей весов входа, другие каскады – матрицами весов выхода предшествующего каскада; все каскады имеют смещения. Выход последнего каскада является выходом сети. Веса и смещения инициализируются с помощью М-функции initnw.
Режим адаптации реализуется М-функцией adaptwb. Для режима обучения выбирается обучающая функция, реализующая метод обратного распространения ошибки.
Оценка качества обучения основана на функциях оценки качества, выбираемых из списка {mae | mse | msereg | sse}.
Сопутствующие функции: NEWFF, NEWELM, SIM, INIT, ADAPT, TRAIN.
Радиальные базисные сети
neWRB
| Радиальная базисная сеть RB
| Синтаксис:
net = newrb(P,T,goal,spread)
Описание:
Радиальные базисные сети предназначены для аппроксимации функций. Функция newrb добавляет нейроны к скрытому слою радиальной базисной сети, пока не будет достигнута допустимая средняя квадратичная ошибка обучения.
Функция net = newrb(P, T, goal, spread) формирует радиальную базисную сеть и имеет следующие входные и выходные аргументы.
Входные аргументы:
P – массив размера R´Q из Q входных векторов, R – число элементов вектора входа;
T – массив размера S´Q из Q векторов цели;
goal – средняя квадратичная ошибка, по умолчанию 0.0;
spread – параметр влияния, по умолчанию 1.0.
Выходные аргументы:
net – объект класса network object радиальной базисной сети.
Свойства сети:
Параметр влияния spread существенно влияет на качество аппроксимации функции: чем его значение больше, тем более гладкой будет аппроксимация. Слишком большое значение параметра spread приведет к тому, что для получения гладкой аппроксимации быстро изменяющейся функции потребуется большое количество нейронов; слишком малое значение параметра spread потребует большого количества нейронов для аппроксимации гладкой функции.
Пример:
Создадим радиальную базисную сеть для следующей обучающей последовательности при средней квадратичной ошибке 0.1 (рис. 11.20):
P = 0:3;
T = [0.0 2.0 4.1 5.9];
net = newrb(P,T,0.1);
net.layers{1}.size
ans = 3
gensim(net) % Рис.11.20
Рис. 11.20
Сформированная радиальная базисная сеть имеет 3 нейрона с функцией активации radbas.
Выполним моделирование сети для нового входа (рис. 11.21):
plot(P,T,'*r','MarkerSize',2,'LineWidth',2)
hold on
V = sim(net,P); % Векторы входа из обучающего множества
plot(P,V,'ob','MarkerSize',8, 'LineWidth',2)
P1 = 0.5:2.5;
Y = sim(net,P1)
plot(P1,Y,'+k','MarkerSize',10, 'LineWidth',2) % Рис.11.21
Рис. 11.21
Алгоритм:
Функция newrb создает радиальную базисную сеть с двумя слоями. Первый слой включает нейроны с функцией активации radbas и использует функции взвешивания dist и накопления netprod. Второй, линейный слой включает нейроны с функцией активации purelin и использует функции взвешивания dotprod и накопления netsum.
Сеть формируется следующим образом. Изначально первый слой не имеет нейронов. Сеть моделируется и определяется вектор входа с самой большой погрешностью, добавляется нейрон с функцией активации radbas и весами, равными вектору входа, затем вычисляются весовые коэффициенты линейного слоя, чтобы не превысить допустимой средней квадратичной погрешности.
Сопутствующие функции: SIM, NEWRBE, NEWGRNN, NEWPNN.
neWRBE
| Радиальная базисная сеть с нулевой ошибкой RBE
| Синтаксис:
net = newrbe(P,T,spread)
Описание:
Функция net = newrb(P, T, spread) формирует радиальную базисную сеть с нулевой ошибкой и имеет следующие входные и выходные аргументы.
Входные аргументы:
P – массив размера R´Q из Q входных векторов, R – число элементов вектора входа;
T – массив размера S´Q из Q векторов цели;
spread – параметр влияния, по умолчанию 1.0.
Выходные аргументы:
net – объект класса network object радиальной базисной сети с нулевой ошибкой.
Чем больше значение параметра spread, тем более гладкой будет аппроксимация. Слишком большое значение spread может привести к вычислительным проблемам.
Пример:
Создадим радиальную базисную сеть с нулевой ошибкой для следующей обучающей последовательности:
P = 0:3;
T = [0.0 2.0 4.1 5.9];
net = newrbe(P,T);
net.layers{1}.size
ans = 4
Сформированная радиальная базисная сеть с нулевой ошибкой имеет 4 нейрона в первом слое. Сравните с предыдущим случаем, когда число нейронов было равно трем.
Выполним моделирование сети для нового входа (рис. 11.22):
plot(P,T,'*r','MarkerSize',2,'LineWidth',2)
hold on
V = sim(net,P); % Векторы входа из обучающего множества
plot(P,V,'ob','MarkerSize',8, 'LineWidth',2)
P1 = 0.5:2.5;
Y = sim(net,P1)
plot(P1,Y,'+k','MarkerSize',10, 'LineWidth',2) % Рис.11.22
Рис. 11.22
Алгоритм:
Функция newrbe создает радиальную базисную сеть с двумя слоями. Первый слой включает нейроны с функцией активации radbas и использует функции взвешивания dist и накопления netprod. Второй, линейный слой включает нейроны с функцией активации purelin и использует функции взвешивания dotprod и накопления netsum.
Функция newrbe устанавливает веса первого слоя равными P', а смещения – равными 0.8326/spread, в результате радиальная базисная функция пересекает значение 0.5 при значениях взвешенных входов ±spread. Веса второго слоя IW{2,1} и смещения b{2} определяются путем моделирования выходов первого слоя A{1} и последующего решения системы линейных уравнений:
[W{2,1} b{2}] * [A{1}; ones] = T
Сопутствующие функции: SIM, NEWRB, NEWGRNN, NEWPNN.
neWGRNN
| Обобщенная регрессионная сеть GRNN
| Синтаксис:
net = newgrnn(P,T,spread)
Описание:
Обобщенные регрессионные сети являются разновидностью радиальных базисных сетей и используются для анализа временных рядов, решения задач обобщенной регрессии и аппроксимации функций. Характерной особенностью этих сетей является высокая скорость их обучения.
Функция net = newgrnn(P, T, spread) формирует обобщенную регрессионную сеть и имеет следующие входные и выходные аргументы.
Входные аргументы:
P – массив размера R´Q из Q входных векторов, R – число элементов вектора входа;
T – массив размера S´Q из Q векторов цели;
spread – параметр влияния, по умолчанию 1.0.
Выходные аргументы:
net – объект класса network object обобщенной регрессионной сети.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|