Как стать автором
Обновить

Параметризация нейросетью физической модели для решения задачи топологической оптимизации

Время на прочтение 10 мин
Количество просмотров 12K
Недавно на arXiv.org была загружена статья с не очень интригующим названием "Neural reparameterization improves structural optimization" [arXiv:1909.04240]. Однако оказалось, что авторы, по сути, придумали и описали весьма нетривиальный метод использования нейросети для получения решения задачи структурной/топологической оптимизации физических моделей (хотя и сами авторы говорят, что метод более универсален). Подход очень любопытный, результативный и судя по всему, — совершенно новый (впрочем, за последнее не поручусь, но ни авторы работы, ни сообщество ODS, ни я, аналогов припомнить не смогли), поэтому его может быть полезно знать интересующимся как использованием нейросетей, так и решением разнообразных задач оптимизации.

О чём речь? Что за задача топологической оптимизации?


Вот представьте, что нужно, например, задизайнить какой-нить мост, многоэтажное здание, крыло самолёта, лопатку турбины или да не важно что. Обычно, это решается путём нахождения специалиста, например, архитектора, который бы с помощью своих знаний матана, сопромата, целевой области, а так же своего опыта, интуиции, тестовых макетов и т.д. и т.п. создавал бы нужный проект. Тут важно, что этот полученный проект был бы хорош только в меру хорошести этого специалиста. А этого, очевидно, не всегда достаточно. Поэтому когда компьютеры стали достаточно мощными, мы стали пытаться переложить подобные задачи на них. Ибо очевидно же, что компьютер может держать в памяти и обсчитывать... почему нет?

Такие задачи получили название "задачи структурной оптимизации", т.е. генерации оптимального дизайна несущих нагрузку механических структур [1]. Подразделом задач структурной оптимизации являются задачи топологической оптимизации (собственно, именно на них конкретно сфокусирована рассматриваемая работа, но это сейчас совершенно не суть и об этом потом). Типовая задача топологической оптимизации выглядит примерно так: для некого заданного концепта (мост, дом, и т.д.) в пространстве в двух или трёх измерениях, имея конкретные ограничения в виде материалов, технологий и иных требований, имея некоторые внешние нагрузки, нужно задизайнить оптимальную структуру, которая будет держать нагрузки и удовлетворять ограничениям.

  • "Задизайнить" по сути означает найти/описать некоторое подпространство исходного пространства, которое надо заполнить строительным материалом.
  • Оптимальность может быть выражена, например, в виде требования минимизации общего веса структуры при ограничениях в виде максимально допустимых напряжений в материале и возможных смещениях при заданных нагрузках.

Чтобы решить эту задачу на компьютере, целевое пространство решений дискретизируется в набор конечных элементов (пикселей для 2D и вокселей для 3D) и далее с помощью какого-то алгоритма компьютер решает, заполнить ли этот каждый индивидуальный элемент материалом или оставить его пустым?


(Изображение из "Developments in Topology and Shape Optimization", Chau Hoai Le, 2010)

Так вот, уже из постановки задачи видно, что её решение — вполне себе крупная заноза для учёных. Желающим некоторых подробностей могу предложить, например, посмотреть весьма старый (2010 года, что всё же много для активно развивающейся области), зато достаточно подробный и легко гуглящийся диссер Chau Hoai Le с названием "Developments in Topology and Shape Optimization" [2], откуда я стащил верхнюю и нижнюю картинки.


(Изображение из "Developments in Topology and Shape Optimization", Chau Hoai Le, 2010)

В качестве примера, на этой картинке хорошо видно, как очень по разному разными алгоритмами генерится решение вроде бы простой проблемы дизайна L-образного подвеса.

Так вот, теперь вернёмся к рассматриваемой работе.

Авторы весьма остроумно предложили решать такие задачи оптимизации с помощью генерирования кандидатного решения нейронной сетью и последующего эволюционирования решения методами градиентного спуска по целевой функции податливости. Податливость получаемой конструкции оценивается с помощью дифференцируемой физической модели, что, собственно, и позволяет использовать градиентный спуск. По их словам (авторы опубликовали исходные коды работы [5]), это даёт или такой же результат, как и лучшие традиционные алгоритмы на простых задачах, или лучшие этих алгоритмов, используемых как бейслайны, на сложных.

Метод


Дальше я попробую описать, что и как конкретно авторы предложили делать, но сразу предупреждаю, что не гарантирую 100% правильности, ибо к моей уже несколько заржавевшей эрудиции в области ещё следует добавить кроме крайне скудной краткости описания ещё и некоторую общую "незрелость" статьи, находящейся, судя по наличию двух редакций за 4 дня, в процессе доработки (добавлено: на текущий момент, полагаю, что, по меньшей мере, в основном, всё описано верно).

Авторы, в целом, следуют подходу решения подобных задач оптимизации, называемому «modified SIMP method», и достаточно подробно описанному в работе [3] «Efficient topology optimization in MATLAB using 88 lines of code». Препринт этой работы и связанный с ней код можно отыскать на http://www.topopt.mek.dtu.dk/Apps-and-software/Efficient-topology-optimization-in-MATLAB. Эту работу часто используют для начала обучения студентов вопросам топологической оптимизации, поэтому для того, чтобы дальнейшее было понятнее, рекомендуется быть с ней знакомым.

В «modified SIMP» оптимизация решения выполняется напрямую, модифицируя пиксели картинки физических плотностей. Авторы работы предложили модифицировать не картинку напрямую (хотя такой алгоритм с прочими равными был контрольным), а изменять параметры и вход свёрточной нейросети, которая генерирует картинку физических плотностей. Вот как глобально выглядит весь метод:


(Изображение из рассматриваемой публикации)

Шаг 1, генерация кандидата


Нейросеть (далее НС) используя случайный первичный входной вектор _beta (он так же, как и веса сети, является тренируемым параметром), генерит (какую-то) картинку решения (работа идет с 2D, но на 3D, думаю, так же можно распространить). В качестве НС-генератора используется апсемплинговая часть известной архитектуры U-Net.

Шаг 2, применение ограничений и конвертация кандидата в каркас физ.модели


Значения пикселей конвертируются в значения физических плотностей в два шага:
  1. Сначала в один шаг решается вопрос нормализации ненормированных значений сгенерированных пикселов (НС устроена так, что выдаёт на выходе т.н. логиты — значения в диапазоне (-inf, +inf) ) и применения ограничения на общий объём получаемого решения. Для этого к картинке поэлементно применяется сигмоида, аргумент которой смещается на константу, зависящую от самого преобразуемого изображения и объёма желаемого решения (значение этой константы-bias'а подбирается бинарным поиском так, чтобы общий объём полученных таким образом плотностей был бы равен некоторому наперёд заданному объёму V0). Подробный разбор этого этапа см. в комментарии);
  2. Далее получившаяся нормированная картинка плотностей конструкции обрабатывается т.н. фильтром плотности (density filter) с радиусом 2. В более известных терминах этот фильтр представляет собой ни что иное, как обычное взвешенное среднее соседних точек картинки. Веса в этом фильтре (ядро фильтра) можно представить в виде значений высоты точек, находящихся на поверхности правильного конуса, лежащего основанием на плоскости так, что его вершина находится в текущей точке, поэтому авторы работы называют его cone-filter (более подробно на эту тему см. описание density filter в главе 2.3 Filtering работы [3]).


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

Шаг 3, оценка полученного каркаса физической моделью


Полученный каркас прогоняется через дифференцируемый физический движок, чтобы получить вектор(/тензор?) сдвига конструкции под нагрузкой (в т.ч. гравитацией) U. Ключевое здесь — дифференцируемость движка, что позволяет получать градиенты (напомню, что градиентом функции является в общем случае тензор, составленный из частных производных функции по всем её аргументам. Градиент показывает направление и скорость изменения функции в текущей точке, поэтому, зная его, можно "подкручивать" аргументы так, чтобы с функцией происходило нужное изменение — она уменьшалась или увеличивалась). Такой дифференцируемый физический движок не надо писать с нуля, — они давно существуют и хорошо известны. Авторам потребовалось лишь сделать их сопряжение с пакетами расчёта нейросетей, типа TensorFlow/PyTorch.

Шаг 4, вычисление значения целевой функции для каркаса/кандидата


Рассчитывается подлежащая минимизации скалярная целевая функция с(x), описывающая податливость (она обратна жесткости) полученного каркаса. Функция податливости зависит от полученного на прошлом шаге вектора сдвига U и матрицы жесткости конструкции К (мне не хватает знаний по topology optimization, чтобы понять, откуда берётся К, — предположу, что, похоже, она напрямую считается из каркаса).

/*
см. также комментарии (1) от kxx и (2) от 350Stealth, хотя за основным просветлением стоит идти в работу [3].
*/

И далее — готово. Поскольку всё создаётся в среде с автоматическим дифференцированием, то на этом этапе мы автоматически получаем все градиенты целевой функции, которые проталкиваются благодаря дифференцируемости всех преобразований по каждому шагу обратно вплоть до весов и входного вектора генерирующей нейросети. Веса и вх.вектор соответственно своим частным производным изменяются, вызывая необходимое изменение — минимизацию целевой функции. Далее происходит новый цикл прямого прохода по НС -> применение ограничений -> просчёт физ.модели -> расчёт целевой функции -> новые градиенты и обновление весов. И так до схождения алго.

Важный момент, описания которого я не нашёл в работе, — как выбирается общий объём конструкции V0, с помощью которого выполняется конвертация кандидатного решения в каркас на шаге 2. От его выбора, очевидно, чрезвычайно зависят свойства получаемого решения. По косвенным признакам (все примеры полученных решений [4] имеют по несколько экземпляров, отличающихся как раз по ограничению объёма), предположу, что они просто фиксируют V0 на некой сетке из диапазона [0.05, 0.5] и затем сами глазками смотрят получаемые решения с разными V0. Ну, для концептуальной работы этого, в общем, и так достаточно, хотя, конечно, было б ужасно интересно посмотреть вариант с подбором так же и этого V0, но, это пойдёт, видимо, на следующий этап развития работы.

Второй важный момент, которого я так и не понял, это как они накладывают ограничения/требования на конкретный вид нужного решения. Т.е. если отделить мост от здания ещё можно благодаря физической модели (здание имеет полную опору, а мост — только в граничных концах), то как отделить, допустим, здание в 3 этажа от здания в 4 этажа?

Как это работает?


Оказалось, что для маленьких (в терминах размера пространства решения = количества пикселей) проблем, метод даёт ± аналогичное качество результатов, как и лучшие традиционные методы топологической оптимизации, но на больших (размер сетки от 2^15 и более пикселей, т.е., напр, от 128*256 и более) получение качественных решений методом более вероятно, чем лучшим традиционным (из 116 тестированных задач метод дал предпочтительное решение в 99 задачах, против 66 предпочтительных у лучшего традиционного).

Более того, вот тут начинается кое-что особенно интересное. Традиционные методы топологической оптимизации в больших задачах страдают от того, что на ранних этапах работы быстро формируют мелкомасштабную паутину, которая потом мешает развитию крупномасштабных структур. Это приводит к тому, что полученный результат бывает трудно/невозможно воплотить физически в жизнь. Поэтому вынужденно существует целое направление в задачах оптимизации топологии, которое изучает/придумывает методы, как же сделать получаемые решения более технологически удобными.

Здесь же, судя по всему, благодаря свёрточной сети, оптимизация происходит одновременно на нескольких пространственных масштабах одновременно, что позволяет избежать/сильно уменьшить "паутину" и получать более простые, но качественные и технологически-friendly решения!

Кроме того, опять же благодаря свёрточности сети, получаются вообще принципиально иные, чем в стандартных-традиционных методах, решения.

Например, в дизайнах:

  • консольной балки (cantilever beam) метод нашёл решение всего из 8 составных частей, в то время как лучший традиционный — 18.
  • моста с тонкими опорами (thin support bridge) метод выбрал одну опору с древоподобным паттерном ветвления, а традиционный — две опоры
  • крыши (roof) метод использует колонны, а традиционный — ветвящийся паттерн. И т.д.


(Изображение из рассматриваемой публикации)

Что в целом в этой работе особенного?


Я никогда не видел такого использования нейросети. Обычно нейросети используют для получения некоторой очень хитрой и сложной функции y=F(x, theta) (где х — аргумент, а theta — настраиваемые параметры), которая умеет делать что-нибудь полезное. Например, если х — картинка с камеры автомобиля, то значением y функции может быть, например, признак есть ли в опасной близости к машине пешеход. Т.е. тут важно, что ценным является сам конкретный вид функции, которая многократно используется для решения какой-то задачи.

Здесь же — нейросеть используется как хитрое хранилище-модификатор-настройщик параметров некоторой физической модели, которое в силу самой своей архитектуры накладывает определённые ограничения на значения и вариации изменений этих параметров (собственно, примеры под заголовком Pixel-LBFGS представляют собой попытку оптимизировать пиксели напрямую, не используя нейросеть для их генерации, — результаты видны, НС важна). Вот тут-то становится критически важным свёрточность использованной нейросети, потому что именно её архитектура позволяет "поймать" концепт инвариантности переноса и немного поворота (представьте, что вы распознаёте текст с картинки — вам важно извлечь именно текст и при этом совершенно не важно, в какой части картинки он расположен и как повёрнут, — т.е. вам нужны инвариантность по переносу и повороту). В данной же задаче, какая-нибудь физическая палка, являющейся единицей строения и множество которых мы оптимизируем, всё так же остаётся ею независимо от положения и ориентации в пространстве.

Классическая полносвязная сеть, к примеру, тут бы, скорее всего, не сработала (так же хорошо), потому что её архитектура позволяет слишком многое/малое (ну вот да, такой дуализм, как посмотреть). В то же время, несмотря на то, что НС остаётся тут всё той же очень хитрой и сложной функцией y=F(x, theta), в этой задаче нам в конечном счёте вообще наплевать и на её аргумент х, и на её параметры theta, и на то, как будет использоваться функция. Нас волнует только лишь одно-единственное её значение y, которое получается в процессе оптимизации одной конкретной целевой функции для одной конкретной физической модели, в которой {x, theta} — всего лишь настраиваемые параметры!

Вот это, по-моему, афигенно крутая и новая идея! (хотя, конечно, потом, как всегда, может оказаться, что Шмидхубер описал её ещё в начале 90х, но поживём — увидим)

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

Ну и последнее. Интересный момент бросился в глаза.

Вот так выглядят оптимальные решения для задачи многоэтажного здания:


(Изображение из рассматриваемой публикации)

А вот так:



устроена внутри фантастическая Sagrada Familia, — Храм Святого Семейства, расположенный в Барселоне, Испания, который «дизайнил» гениальный Антонио Гауди.



Благодарности


Благодарю первого автора статьи Stephan Hoyer за оперативную помощь в разъяснении некоторых непонятных деталей работы, а так же участников Хабра, внёсших свои дополнения и/или полезные провокативные идеи.



[1] вариант определения задачи структурной/топологической оптимизации

[2] "Developments in Topology and Shape Optimization"

[3] Andreassen, E., Clausen, A., Schevenels, M., Lazarov, B. S., and Sigmund, O. Efficient topology optimization in MATLAB using 88 lines of code. Structural and Multidisciplinary Optimization,43(1):1–16, 2011. Препринт этой работы и код доступны на http://www.topopt.mek.dtu.dk/Apps-and-software/Efficient-topology-optimization-in-MATLAB

[4] примеры решений работы

[5] Исходные коды работы: https://github.com/google-research/neural-structural-optimization




См. также







Последнее обновление этой публикации 2020.01.23 09:18
Теги:
Хабы:
+49
Комментарии 68
Комментарии Комментарии 68

Публикации

Истории

Работа

Data Scientist
58 вакансий

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн