Адаптивное линейное предсказание

Этот пример показывает, как адаптивный линейный слой может научиться предсказывать следующее значение в сигнале, учитывая текущее и последние четыре значения.

Чтобы узнать, как прогнозировать данные временных рядов с помощью нейронной сети для глубокого обучения, смотрите Прогнозирование временных рядов с использованием глубокого обучения.

Определение формы волны

Здесь два временных сегмента заданы от 0 до 6 секунд в шагах 1/40 секунды.

time1 = 0:0.025:4;      % from 0 to 4 seconds
time2 = 4.025:0.025:6;  % from 4 to 6 seconds
time = [time1 time2];  % from 0 to 6 seconds

Вот сигнал, который начинается с одной частоты, но затем переходит к другой частоте.

signal = [sin(time1*4*pi) sin(time2*8*pi)];
plot(time,signal)
xlabel('Time');
ylabel('Signal');
title('Signal to be Predicted');

Настройка задачи для нейронной сети

Преобразование сигнала затем преобразуется в массив ячеек. Нейронные Сети представляют временные интервалы как столбцы массива ячеек, отличают их от различных выборок в установленный момент времени, которые представлены столбцами матриц.

signal = con2seq(signal);

Чтобы настроить задачу, мы будем использовать первые пять значений сигнала в качестве начальных входных состояний задержки, а остальные для входов.

Xi = signal(1:5);
X = signal(6:end);
timex = time(6:end);

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

T = signal(6:end);

Создание линейного слоя

Линейный слой функции создает линейный слой с одним нейроном с задержкой отвода последних пяти входов.

net = linearlayer(1:5,0.1);
view(net)

Адаптация линейного слоя

The function *adapt* simulates the network on the input, while
adjusting its weights and biases after each timestep in response
to how closely its output matches the target.
It returns the update networks, it outputs, and its errors.
[net,Y] = adapt(net,X,T,Xi);

Сигнал выхода нанесен на график с целями.

figure
plot(timex,cell2mat(Y),timex,cell2mat(T),'+')
xlabel('Time');
ylabel('Output -  Target +');
title('Output and Target Signals');

Ошибка также может быть нанесена на график.

figure
E = cell2mat(T)-cell2mat(Y);
plot(timex,E,'r')
hold off
xlabel('Time');
ylabel('Error');
title('Error Signal');

Заметьте, насколько маленькой является ошибка, за исключением начальных ошибок, и сеть узнает поведение систем в начале и после перехода системы.

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