Моделирование Маглева

Этот пример иллюстрирует, как нейронная сеть NARX (Nonlinear AutoRegressive with eXternal input) может моделировать динамическую систему левитации магнитов.

Задача: Моделируйте магнитную систему левитации

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

Система характеризуется положением магнита и управляющим током, оба из которых определяют, где магнит будет мгновенно позже.

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

Почему нейронные сети?

Нейронные сети очень хороши в задачах временных рядов. Нейронная сеть с достаточным количеством элементов (называемых нейронами) может моделировать динамические системы с произвольной точностью. Они особенно хорошо подходят для решения нелинейных динамических проблем. Нейронные сети являются хорошим кандидатом для решения этой задачи.

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

Подготовка данных

Данные для задач подгонки функции настраиваются для нейронной сети путем организации данных в две матрицы, входные временные ряды X и целевые временные ряды T.

Серия входа X является строкой массивом ячеек, где каждый элемент является сопоставленным временным интервалом управляющего тока.

Целевой ряд T является строкой массивом ячеек, где каждый элемент является сопоставленным временным интервалом положения левитированных магнитов.

Здесь загружается такой набор данных.

[x,t] = maglev_dataset;

Мы можем просмотреть размеры входов X и целей T.

Обратите внимание, что и X, и T имеют 4001 столбец. Они представляют 4001 временной интервал управляющего тока и положения магнитов.

size(x)
size(t)
ans =

           1        4001


ans =

           1        4001

Моделирование временных рядов с помощью нейронной сети

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

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

setdemorandstream(491218381)

Двухслойные (то есть однослойные) нейронные сети NARX могут соответствовать любой динамической зависимости вход-выход, учитывая достаточное количество нейронов в скрытом слое. Слои, которые не являются выходными слоями, называются скрытыми слоями.

Мы попробуем один скрытый слой из 10 нейронов для этого примера. В целом более сложные проблемы требуют большего количества нейронов, а может быть, и большего количества слоев. Более простые проблемы требуют меньшего количества нейронов.

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

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

Выход y (t) также является входом, задержанная версия которого подается назад в сеть.

net = narxnet(1:2,1:2,10);
view(net)

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

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

Функция PREPARETS готовит данные временных рядов для симуляции и обучения для нас. Xs будет состоять из сдвинутых входных и целевых рядов, которые будут представлены сети. Xi является начальными входными состояниями задержки. Ai является состояниями задержки слоя (в этом случае пустыми, так как нет задержек между слоями), и Ts является сдвинутым рядом обратной связи.

[Xs,Xi,Ai,Ts] = preparets(net,x,{},t);

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

Neural Network Training Tool показывает обучаемую сеть и алгоритмы, используемые для ее обучения. В нем также отображается состояние обучения во время обучения, и критерии, которые остановили обучение, будут выделены зеленым цветом.

Кнопки внизу открывают полезные графики, которые можно открыть во время и после обучения. Ссылки рядом с именами алгоритмов и кнопками графика открывают документацию по этим темам.

[net,tr] = train(net,Xs,Ts,Xi,Ai);
nntraintool

nntraintool('close')

Чтобы увидеть, как улучшилась производительность сети во время обучения, либо нажмите кнопку «Эффективность» в обучающем инструменте, либо вызовите PLOTPERFORM.

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

Эффективность показана для каждого из наборов обучения, валидации и тестирования.

plotperform(tr)

Проверка нейронной сети

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

Y = net(Xs,Xi,Ai);

perf = mse(net,Ts,Y)
perf =

   2.9245e-06

PLOTRESPONSE покажет нам ответ сети по сравнению с фактическим положением магнитов. Если модель точна, точки '+' будут отслеживать алмазные точки, и ошибки в нижней оси будут очень маленькими.

plotresponse(Ts,Y)

PLOTERRCORR показывает корреляцию ошибки в момент t, e (t) с ошибками по изменяющимся лагам, e (t + lag). Осевая линия показывает среднюю квадратичную невязку. Если сеть была хорошо обучена, все другие линии будут намного короче, и большинство, если не все, будут находиться в пределах красных доверительных границ.

Функция GSUBTRACT используется для вычисления ошибки. Эта функция обобщает вычитание, чтобы поддержать различия между данными массива ячеек.

E = gsubtract(Ts,Y);

ploterrcorr(E)

Точно так же PLOTINERRCORR показывает корреляцию ошибки относительно входов с различными степенями задержки. В этом случае большинство или все линии должны находиться в пределах доверительных границ, включая осевую линию.

plotinerrcorr(Xs,E)

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

net2 = closeloop(net);
view(net2)

Мы можем симулировать сеть в форме замкнутого цикла. В этом случае сети задаются только начальные положения магнитов, и затем она должна рекурсивно использовать свои собственные предсказанные положения, чтобы предсказать новые положения.

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

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

[Xs,Xi,Ai,Ts] = preparets(net2,x,{},t);
Y = net2(Xs,Xi,Ai);
plotresponse(Ts,Y)

Если приложение требовало, чтобы мы получили доступ к предсказанному положению магнита на временной интервал перед тем, когда это происходит на самом деле, мы можем удалить задержку из сети, поэтому в любой заданный момент t, выход является оценкой положения в момент t + 1.

net3 = removedelay(net);
view(net3)

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

[Xs,Xi,Ai,Ts] = preparets(net3,x,{},t);
Y = net3(Xs,Xi,Ai);
plotresponse(Ts,Y)

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

Исследуйте другие примеры и документацию для получения дополнительной информации о нейронных сетях и их приложениях.