Линейный нейрон обучен находить минимальное решение ошибки для задачи y с линейно зависимыми входными векторами. Если линейная зависимость y во входных векторах не согласована в целевых векторах, задача нелинейна и не имеет линейного решения с нулевой ошибкой y.
X определяет три двухэлементных входных шаблона (векторы столбцов). Обратите внимание, что 0,5-кратная сумма векторов 1 и 3 в векторе 2. Это называется линейной зависимостью.
X = [ 1.0 2.0 3.0; ...
4.0 5.0 6.0];T определяет связанный 1-элементный целевой объект (векторы столбцов). Обратите внимание, что 0,5-кратная сумма -1,0 и 0,5 не равна 1,0. Поскольку линейная зависимость в X не согласована в T, эта задача является нелинейной и не имеет линейного решения с нулевой ошибкой y.
T = [0.5 1.0 -1.0];
MAXLINLR находит самый быстрый стабильный уровень обучения для TRAINWH. NEWLIN создает y линейный нейрон. NEWLIN принимает следующие аргументы: 1) Rx2 матрица значений min и max для R входных элементов, 2) количество элементов в выходном векторе, 3) вектор задержки ввода и 4) скорость обучения.
maxlr = maxlinlr(X,'bias');
net = newlin([0 10;0 10],1,[0],maxlr);TRAIN по умолчанию использует правило Widrow-Hoff для обучения линейных сетей. Мы покажем каждые 50 эпох и тренируемся для y максимум 500 эпох.
net.trainParam.show = 50; % Frequency of progress displays (in epochs). net.trainParam.epochs = 500; % Maximum number of epochs to train. net.trainParam.goal = 0.001; % Sum-squared error goal.
Теперь сеть обучается на входах X и мишенях T. Обратите внимание, что из-за линейной зависимости между входными векторами проблема не достигла цели ошибки, представленной черной линией.
[net,tr] = train(net,X,T);
Теперь мы можем проверить ассоциатор с одним из исходных входных данных, [1; 4], и посмотрите, возвращает ли он цель, 0,5. Результат не равен 0,5, так как линейная сеть не может соответствовать нелинейной проблеме, вызванной линейной зависимостью между входными векторами.
p = [1.0; 4]; y = net(p)
y = 0.8971