Привет, Хабр! Мы продолжаем серию статей о суррогатном моделировании, на этот раз расскажем, как мы применили нейросети при создании сложных технических систем – приспособили GRU в качестве суррогатной модели для испытаний. Реальный кейс для клиента в рамках реального проекта.

Итак, давайте поставим нейросети обучение на службу проектировщику. Полетели!

Photo by Jerry Zhang on Unsplash
Photo by Jerry Zhang on Unsplash

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

Собственно, элерон, о котором идет речь в нашей статье – небольшая отклоняемая поверхность на задней кромке крыла, ближе к законцовке. Элеронов обычно два, их основная роль состоит в управлении креном самолета. Как они это делают? В режиме управления креном, левый и правый элероны отклоняются дифференциально, а поскольку они расположены далеко от фюзеляжа, даже легкое отклонение создает заметный крутящий момент, которой и кренит самолёт.

Arne Nordmann (user:norro), 2006.
Собственная работа, Illustration based on the illustration Image:PlaneWing.png of Piotr Jaworski (PioM)
Arne Nordmann (user:norro), 2006. Собственная работа, Illustration based on the illustration Image:PlaneWing.png of Piotr Jaworski (PioM)

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

Слева гидропривод элерона 737, за фотографию огромное спасибо lx-photos: https://lx-photos.livejournal.com/337851.html
Слева гидропривод элерона 737, за фотографию огромное спасибо lx-photos: https://lx-photos.livejournal.com/337851.html

Так что, если заглянуть внутрь ниши шасси, мы увидим другой, не менее прекрасный инженерный ландшафт: гидробаки, фильтры, патрубки, насосы... Но чего мы не увидим, так это нейросетей... Интересно, откуда тут возьмутся MATLAB, Python и фреймворки машинного обучения?

"А давайте протестируем нашу программу управления на паре триллионов сценариев" скажет кто-то... и все резко изменится.

Или, имея только аэродинамические характеристики, сгенерировать код для стенда имитатора, не рисуя никаких промежуточных схем. Суррогатные модели находят свое применение как в модельно-ориентированном проектировании, так и в программно-аппаратном тестировании, но есть одно "но".

Нужны модели. Много моделей.

Включайте аэродинамические трубы, несите мешки с песком… На всех этапах модельно-ориентированного проектирования нам нужны детальные и точные модели. Как минимум, они нам пригодятся для следующих применений:

  1. При проектировании – чтобы найти оптимальную конфигурацию системы, протестировав модель в большом количестве сценариев;

  2. При разработке – компоненты нужно согласовывать между собой, для этого нужно прогнать много интеграционных тестовых сценариев;

  3. При развертке – из моделей моделей можно генерировать код компонентов и настраивать среду на основе испытаний;

  4. При валидации и верификации – некоторые критические компоненты придется протестировать на всем диапазоне входных значений и их комбинаций.

Главная проблема, которая у нас возникнет – как запустить модель несколько триллионов раз, в пространстве всех комбинаций параметров, за разумное время, да еще и на имеющихся компьютерах?

Суррогатные модели, на помощь!

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

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

Чтобы ускорить эксперименты над моделью такой системы, нужно как-то ускорить ее выполнение (симуляцию).

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

Суррогатные модели на замену детальной симуляции, https://habr.com/ru/company/etmc_exponenta/blog/663620/
Суррогатные модели на замену детальной симуляции, https://habr.com/ru/company/etmc_exponenta/blog/663620/

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

  1. Введение в суррогатные модели. Часть 1: Актуальность

  2. Введение в суррогатные модели. Часть 2: Прикладной пример

  3. Введение в суррогатные модели. Часть 3: Выходим в топ

А теперь, к практике – о том, как мы в динамической модели отдали часть расчетов нейронной сети, и что из этого вышло.

Модель системы управления элероном

Наша базовая модель была представлена вычислительным графом в Simulink. Перед нами модель привода (2) и модель его электронного блока управления (1).

Модель блока управления (ECU) и объекта управления (гидравлического привода)
Модель блока управления (ECU) и объекта управления (гидравлического привода)

Входные сигналы – нагрузка от элерона и сигнал управления на входе электронного блока. А на выходе – положение штока привода, оно же выступает в качестве сигнала обратной связи для блока управления.

Предположим, что мы отлаживаем параметры ЭБП. Для этого нам нужна модель привода, которую можно запускать много раз в разных условиях. Ее мы и будем заменять на суррогатную модель. Сценарий нагрузки у нас не меняется, значит – либо моделируем небольшие отклонения, либо ждем более обширного кейса, ведь это только начало нашей серии рассказов об практике применения суррогатных моделей.

Входят нейросети!

Цель этого проекта заключалась в том, чтобы заменить модель привода на рекуррентную сеть GRU (управляемый рекуррентный блок).

Один классический слой GRU рассчитывается по такой системе уравнений:

\begin{matrix} z_t = \sigma(W_z \cdot [h_{t-1},x_t])\\  r_t = \sigma(W_r \cdot [h_{t-1},x_t])\\  h_t = (1-z_t) \ast h_{t-1} + z_t \ast \tilde{h}_t\\  \tilde h_t = tanh(W \cdot [r_t \ast h_{t-1}, x_t]_j) \end{matrix}

Собственно, в отличие от нейронов обычной нейросети, в GRU-нейроне сразу три функции активации. Вектор h (hidden state) хранит состояние слоя GRU. Он используется нейросетью сразу и как вектор выходных значений, и как память, из которой нейрон может доставать что-то, выученное много шагов назад. Векторы z и r – просто внутренние данные каждого нейрона. Ну, и матрицы W – это наборы весов, которые сеть должна выучить (смещения, судя по всему, уже занесены во входной вектор; нотация отсюда).

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

Замена модели объекта управления на GRU нейросеть
Замена модели объекта управления на GRU нейросеть

Кроме рекуррентного слоя, нам понадобится слой пакетной нормализации (BatchNorm) для стабилизации и ускорения обучения нейронной сети. На выходе также располагается полносвязный слой для предсказания нового положения штока нашего привода. Например:

  1. на случай нескольких выходных переменных, или

  2. для усложнения архитектуры нейросети, когда слой GRU предсказывает ряд компонентов выходной переменной (эмбеддинг), а линейный слой учится их объединять.

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

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

Суррогатная модель объекта управления в Simulink
Суррогатная модель объекта управления в Simulink

Сеть можно обучать в MATLAB Deep Learning App или в Python (и импортировать через ONNX), поэтому тут легко учесть все пожелания и создать удобную и гибкую методику обучения.

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

Результаты моделирования

На этом раннем этапе проекта мы просто хотели применить довольно классическую процедуру обучения GRU, поэтому договорились о довольно грубых параметрах оценки: при расчете с заданным шагом 0.001, относительная ошибка не должна превышать 10%.

Эти параметры сеть выбивает легко и просто. Например, вот так сеть прогнозировала поведение нашего объекта в ходе колебательных процессов (шаг за шагом):

Участок моделирования с резкими колебательными процессами
Участок моделирования с резкими колебательными процессами
Участок моделирования с резкими колебательными процессами
Участок моделирования с резкими колебательными процессами

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

Заключение

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

Поэтому нам так важно делиться с вами своими соображениями и выслушивать ваши мысли.

Какие преимущества имеют нейросети как суррогатные модели?

  • Легко управлять скоростью и точностью модели

    • Чем больше нейронов в слое, тем медленнее (и точнее) будет работать нейросеть;

    • GRU слой нейросети позволяет сэкономить память по сравнению с LSTM-слоем за счет меньшего числа параметров;

  • Нейросети легко можно распараллелить

    • Но только те, которые работают без обратной связи;

    • В пакетном режиме вычисление всей кривой происходило бы мгновенно.

Рекуррентные нейросети, пожалуй, не стоит рассматривать как первую модель в списке:

  • если у вас в целом небольшая модель, которую не особо нужно ускорять (как было в нашем случае);

  • если модель должна работать в потоковом режиме;

  • если в динамической системе есть обратная связь.

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

В целом, мы уверены что внедрение суррогатного моделирования в вашей команде может перевернуть весь рабочий процесс. Или уже перевернул? Расскажите!

PS: Основную работу по кейсу выполнил Игорь Матвеев, инженер Экспоненты (@Igorec_matveev). ????

Комментарии (0)