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

    Недавно на 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



    Последнее обновление статьи 2019.10.24 08:58
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 68

      +2
      >максимально допустимых стрессов в материале
      Напряжений. Просто напряжений, нет?
        0
        исправил на «напряжений», спасибо. Не знаю устоявшейся терминологии в этой области.
      • НЛО прилетело и опубликовало эту надпись здесь
          0
          Тут наверное имеется ввиду в одном линейном направлении, то бишь 32768*32768 ~ 1млрд элементов.

          Нет, думаю, что моя оценка верна. Столь большие модели они не пробовали делать, это довольно ясно следует из статьи и сопроводительного файла примеров.
          • НЛО прилетело и опубликовало эту надпись здесь
              0
              Потому что это Академия, а не Продакшен. У них задача — придумать новый метод, опробовать его и показать возможности и потенциальные бенефиты. Для этого мегаразмеров в задачах не нужно.
              • НЛО прилетело и опубликовало эту надпись здесь
            +2
            >> И чем мельче сетка, тем более оптимальную конструкцию вроде можно выжать. И тем более «фрактальной»(ажурной) она будет.

            Если штрафовать за фрактальность в кост функции — то может и не быть.
              +1
              Как Вы хотите описать то, что Вы называете «фрактальностью» в целевой функции?
              (это не фрактальность, конечно. Более того, фрактальность может быть ценным и полезным качеством — посмотрите на древоподобные решения опор, они и надёжны и красивы. И фрактальны)
                0
                Ограничение на толщину эелемента вполне себе убивает фрактальность (это не мой мопет — выше так назвали, но мы то знаем о чем мы говорим, да?).

                >> фрактальность может быть ценным и полезным качеством

                Несомненно, вот только реальный мир подразумевает дефекты изготовления и самой структуры материала. Нужно как-то задавать запас, а-то получится структура из «паутинок», которая по теории супер прочная. А что будет, если одна паутинка сломается? Не повлечет ли это цепной реакции, которая сложит весь домик?

                Во всем должен быть баланс.
                • НЛО прилетело и опубликовало эту надпись здесь
                    +1
                    Тем более я в другом комменте предлагал сделать еще надежнее — залить смолой пустоты.

                    Блин, Вы о чём вообще? Какой смолой Вы собрались заливать пустоты в конструкции моста? Вы, похоже, держите в голове одну конретную модель нужного изделия и подгоняете под неё всё, что видите. Работа не об этом. Пожалуйста, не надо зашумлять коменты.
                    • НЛО прилетело и опубликовало эту надпись здесь
                        0
                        Какой смешной))))
                        Юноша, Вы, совершенно очевидно, не в себе, поэтому ни на какие Ваши коменты я больше отвечать не буду. Хотя, конечно, запретить Вам продолжать мусорить я не могу, но посмотрим, как на это всё будет реагировать сообщество, — говорят, оно тут немного саморегулирующееся.
                        • НЛО прилетело и опубликовало эту надпись здесь
                    +1
                    Ограничение на толщину эелемента вполне себе убивает фрактальность (это не мой мопет — выше так назвали, но мы то знаем о чем мы говорим, да?).

                    Хотел было пораздражаться на отсутствие конкретики реализации этого ограничения, но потом пришла в голову более интересная мысль по теме… На втором шаге после нормирования логитов сигмоидой они там используют некий cone-filter с радиусом 2 (который, скорее всего является известным инструментом, поэтому о нём нет никаких деталей, однако его до сих пор никто из отметившихся не опознал)… Так вот судя по тому, что, скорее всего, это морфологический фильтр, тогда он может в том числе налагать некоторые имплицитные ограничения на вид результирующей структуры, как раз убирая слишком мелкие детали. У них в статье нет сведений, использовался ли он в бейслайновых методах (и если да, с какими параметрами? — впрочем, если это стандартный фильтр, то мог использоваться) и в контрольном Pixel-LBFGS… Если он был только в НС-версии оптимизатора, то вполне возможно, что это он влияет на отсутствие паутины… Попробую связаться с авторами и уточнить. Момент любопытный.

                    Несомненно, вот только реальный мир подразумевает дефекты изготовления и самой структуры материала. Нужно как-то задавать запас, а-то получится структура из «паутинок», которая по теории супер прочная. А что будет, если одна паутинка сломается? Не повлечет ли это цепной реакции, которая сложит весь домик?

                    Ну да, думаю, это как раз одна из важных причин, кроме нетехнологичности, почему паутина обычно(!) вредна.
                    • НЛО прилетело и опубликовало эту надпись здесь
                      0
                      В продолжение прошлого комента.

                      Уже получил ответ от первого автора, Stephan Hoyer (вот это я понимаю подход к работе!). Сейчас нет времени разбирать всё подробно, в течение пары-тройки дней сделаю. Кратко — да, я правильно нашёл описание cone-filter, это именно он, и да, они использовали его с одинаковыми параметрами в каждом алгоритме, что уже само по себе делает гипотезу о его (существенном) влиянии на паутину, в общем, скорее неверной. Но ещё подумаю, потом напишу апдейт.

                      зы: ещё Стефан сказал, что они планируют скоро выложить код работы на Гитхаб. Снова могу только сказать «вот это я понимаю подход к работе!» :) Пока это ещё не стало нормой, и очень круто, что они проталкивают и эту тему.
                        0
                        Итак, продолжаем тему.
                        После получения ответа Стефана я внёс в статью необходимые поправки и уточнения.

                        Главные следствия вкратце:
                        • cone-filter не имеет ни малейшего отношения к фильтрам мат.морфологии, а есть ни что иное, как простейшее взвешенное среднее с ядром, линейно зависящим от расстояния до текущей точки. Принципиальных причин использовать его, а не какой-нибудь Gaussian Blur (отличие просто в том, что в Gaussian Blur ядро фильтра — тот самый колокольчик, а здесь просто конус), насколько я понимаю, нет. Просто он даёт другое сглаживание.
                        • Соответственно, конечно же, никакой (существенной) регуляризации это не даёт, поэтому та моя гипотеза, что он влияет на паутину, совершенно не валидна (более того, он же используется и во всех бейслайн методах, сильно более активно генерящих паутину).
                        • Поэтому именно эффект сверточной сети в убирании паутины максимален.


                        Теперь, что касается Вашей идеи:
                        Ограничение на толщину эелемента вполне себе убивает фрактальность (это не мой мопет — выше так назвали, но мы то знаем о чем мы говорим, да?).

                        Наверное, мы можем придумать и добавить в целевую функцию слагаемое, которое будет отвечать за «ажурность» конструкции, штрафуя мелкие элементы. Такой себе регуляризатор… Вполне. Однако я здесь вижу две тонкости, которые… скажем так… не делают очевидными мне пользу этого подхода:
                        1. Мы получаем ещё один набор гиперпараметров, которые надо подбирать — по меньшей мере это один скаляр, характеризующий минимальную нештрафуемую толщину, и ещё один скаляр, составляющий величину штрафа. Лишние гиперпараметры — лишний геморрой.
                        2. А что будем делать, когда нам может быть полезна ажурность? Мелкие элементы ведь могут быть совершенно полноценными, нужными и полезными частями решения в ряде случаев. Нас то волнует именно ненужная паутина, а не мелкость, но убирая таким образом паутину, мы вообще не сможем получить нужного решения. Оно просто будет перештрафовано и никогда не появится.


                        зы офф: я так понимаю, теперь можно ожидать появление nickname22 и новой порции отжигов…
                      • НЛО прилетело и опубликовало эту надпись здесь
                          0
                          То же самое, что и всё научно-инженерное сообщество. У слова «фрактал» и образованного от него прилагательного я знаю только одно определение и только один смысл (это про другой Ваш комент, на который отвечать не буду). В Википедии и определение раскрыто, и приблизительные критерии даны, и примеры (с деревьями в том числе).
                          Паутина — не фрактал и даже не псевдофрактал, т.к. ни одному критерию не соответствует.
                          • НЛО прилетело и опубликовало эту надпись здесь
                        • НЛО прилетело и опубликовало эту надпись здесь
                          • НЛО прилетело и опубликовало эту надпись здесь
                        • НЛО прилетело и опубликовало эту надпись здесь
                      • НЛО прилетело и опубликовало эту надпись здесь
                          0
                          «Можно делать» не значит «нужно делать». 3D печать ещё очень дорогое удовольствие и будет таковым скорее всего ещё долго. Поэтому проста и дешевизна тех.процесса — почти всегда и везде очень важны.
                          • НЛО прилетело и опубликовало эту надпись здесь
                              0
                              Не согласен. Их как раз много где нужно решать (да практически везде найдётся что-то, что можно/нужно сделать эффективнее и лучше), но вот позволить себе ими пользоваться могут очень немногие. В т.ч. и из-за нетехнологичности даваемых результатов.
                              • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            То что точность до микрон, еще не означает, что размер изделия достаточен. По вполне понятным причинам чем больше размер принтера — тем сложнее сделать сам принтер достаточно жестким и точным (это в общем верно для любого станка). Так что да, дорогое удовольствие, если хочется и размеры и точность.

                            Насчет композита — не уверен, что для таких изделий применяли, но в целом почему нет? Все эти тонкие структуры — они хорошо работают на растяжение, и плохо на сжатие (потеря устойчивости). Это вполне верно даже для точких стенок обычных баков, так что проблема давно известна, как и много лет известны некоторые решения (типа сотовых конструкций).
                            0
                            Интересно, как справился бы генетический алгоритм.
                              +1
                              О том, что их можно использовать пишут практические везде, но реальных примеров успешных использований не видел. Предположу, что как и в почти всех остальных случаях — очень медленно и, вероятно, плохо. Тут эффективный градиентный спуск, а ГА лишь несколько лучше случайного блуждания. И тоже подвержен локальным оптимумам.
                              Короче, в большинстве мне известных случаев, к ГА приходят совсем от безысходности, когда ничего умнее придумать не удаётся…
                              0
                              матрицы жесткости конструкции К

                              Матрица жесткости рассчитывается на основе свойств материала (модуль Юнга), длин стержней (если говорить про стрежневые системы типа ферм) и моментов инерции сечений. В простейшем случае (круг, квадрат) можно связать площадь сечения и момент инерции. Возможно, U-Net субоптимально генерирует базовую структуру и «толщины» стержней, что позволяет вычислить и матрицу жесткости. А далее минимизируется truss compliance, т.е. Fu/2 с учетом Ku=F, где F — нагрузки, u — смещения узлов системы, K — матрица жесткости.
                                0
                                Спасибо за ценное уточнение! (первый комент по делу, не зря писал!)
                                Добавил в текст со ссылкой.

                                Немного уточню.
                                U-Net не то, что бы «субоптимально генерирует базовую структуру»… Она сначала вообще генерирует шум, который потом под давлением градиента целевой функции эволюционирует в решение. U-Net всегда генерирует просто монохромную картинку (примеры есть на врезках). На шаге 2 эта картинка с помощью нескольких хитрых трюков нормализуется (с точки зрения картинки — на общее количество нужного чёрного пигмента, с точки зрения физики — на общее количество нужного конструкции материала) и бинаризуется в чёрно-белую (я назвал полученное изображение каркасом, но я не уверен, что это общепринятый термин, — пока другого нет, оставляю). В этих шагах я уверен, и они описаны в статье. Соответственно, далее, учитывая Ваш комментарий, остаётся предположить, что зная свойства материала (допустим, бетона), можно ответить на вопрос, какая была бы матрица жесткости для конструкции из такого материала, описываемой таким каркасом.
                                  0
                                  Еще небольшое дополнение насчет того,
                                  как выбирается общий объём конструкции V0

                                  общий объем можно задать как 1, а решением задачи будут соотношения между объемами элементов конструкции (которые суммируются к 1).
                                    +1
                                    Наверное, это работает в обычных методах, но здесь так нельзя. Я не останавливался подробно на этом моменте в описании, думал и так понятно, но поясню.
                                    Сначала цитата из работы (самый конец второй страницы):



                                    Значения выходного слоя использованной НС представляют собой то, что в Машинном Обучении стали называть «логитами», — «сырой» результат (как правило, линейной, = скалярное произведение) комбинации входов нейрона с весами этих входов. Они потенциально могут иметь значения (-inf,+inf). Для дальнейшего использования логиты, надо, очевидно, как-то нормализовать в какой-то ограниченный диапазон, причём так, чтобы выполнялось ограничение на максимально допустимое количество «включённых» значений (другими словами, на максимально допустимое количество чёрного пигмента, который потребуется, чтобы нарисовать полученную картинку).

                                    Второй нюанс. Посмотрите на этот фрагмент картинки этапов метода:



                                    Красной стрелкой я указал вариант графического изображения выдаваемых сетью логитов (очищенная картинка справа — это уже обработанный «каркас»). НС, особенно пока настройка параметров ещё сошлась окончательно, не даст идеальной картинки. Там будет присутствовать некий шум и артефакты. Хотя со временем донастройки он и будет уменьшаться, но он никогда не сойдёт в нуль, а само его присутствие будет «размывать» полезный сигнал, влиять на градиент там, где этого не нужно и т.д. и т.п. Короче, надо бы как-то сделать так, чтобы усилить сильные логиты и ослабить слабые (опять же, выполняя при этом ограничения на объём).

                                    Вот что сделали авторы. Есть логистическая функция image (у авторов почему-то отсутствует знак «минус» перед х^, но это скорее всего просто опечатка). Вот для наглядности её график:
                                    image
                                    Эта функция хороша тем, что отображает область определения (-inf,+inf) в область значений (0,1) так, что за счёт экспоненты даже небольшое отклонение аргумента от 0 очень быстро начинает отображаться почти в граничные значения (~0 для х<<0 или ~1 для x>>0). Соответственно, применив её к ненормированному изображению за счёт нелинейности мы получим почти-бинарное изображение (но оно всё ещё будет дифференцироваться, в отличие от пороговой функции).

                                    Теперь вспоминая нюанс номер 2, мы можем сразу увидеть, что если применять сигмоиду к логитам «в лоб», то у нас возможна ситуация, когда, например, даже полезный сигнал может оказаться сильно ниже «порога отсечения» (условно, значения, при котором аргумент сигмоиды отображается почти в нуль), или шум окажется сильно выше «порога отсечения». Соответственно, чтобы изменить порог отсечения, надо просто уменьшить или увеличить аргумент сигмоиды на какую-то величину, — ей является в терминах авторов работы величина b(x^,V0). Если её выбирать для исходного изображения (x^) так, чтобы «объём» (сумма значений всех точек-пикселей отнесённая к общей площади?) преобразованного изображения оказалась бы равна V0, то одновременно с улучшением соотношения сигнал/шум и нормализацией картинки в (0,1) мы ещё получим и выполнение требования на общий объём конструкции.

                                    Таким образом, я думаю, что просто так взять и задать общий объём в 1 (или любое другое наперёд выбранное число) нельзя, потому что это одновременно влияет и на «порог» сигмоиды, — можно случайно отсечь полезный сигнал. По этой причине авторы и пробовали несколько значений V0, вместо того, чтобы просто использовать соотношения элементов конструкции
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                    • НЛО прилетело и опубликовало эту надпись здесь
                                        0
                                        Ну так-то в пакетах типа ANSYS для типовых элементов (link, beam, shell и т.д.) матрицы жесткости уже заданы — иначе просчет конечно-элементных моделей длился бы вечность.

                                        А вообще в статье как-то слишком поверхностно описана сама НС.
                                          0
                                          А вообще в статье как-то слишком поверхностно описана сама НС.


                                          Наверное, потому, что для достижения заявленной цели статьи — описания метода, она не важна. Не?
                                          Вы ещё, судя по всему, оригинальную работу не открывали. Там большинство из того, что я развёрнуто на несколько страниц тут описывал, там — полтора абзаца и отдельные фразы по тексту. И в целом — и не нужно иного, для понимания метода достаточно. Кому нужно — для того список ссылок и гугл…
                                            0
                                            Я как раз про оригинальную статью и говорю — там по каждому вопросу буквально пара фраз. Не совсем понятно, как увязали опоры, нагрузки и точки их приложения с этой «картинкой плотностей», как потом определяли, достаточно ли прочна и устойчива конструкция.
                                              0
                                              Понятно. Да, есть такое… и это ещё далеко не самая плохая статья, кстати…

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

                                              Предположу, что положение опоры, приложение нагрузки и прочее просто запрограммировано как частью физ.модели для данной конкретной задачи. Соответственно, прочность, устойчивость и некоторые иные качества будут являться следствиями целевой функции податливости. Большое её значение говорит, что «что-то явно не так», а градиент позволяет двигаться в сторону «более так».
                                          • НЛО прилетело и опубликовало эту надпись здесь
                                              0
                                              Заданы примерно в таком виде (трехмерный стержень):
                                              image

                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                  0
                                                  Речь про конечный элемент, не так ли? Понятно, что потом собирается общая матрица жесткости системы из матриц жесткости КЭ.
                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                      0
                                      В чём отличие от этого (где-то на Хабре был перевод)?
                                        0
                                        На хабре не нашел что-то. Есть статья про Генеративный дизайн, но там про алгоритмы ничего не говорится.
                                          +3
                                          Ну, если Вы читали то, на что Вы дали ссылку, то не могли не заметить, что там описаны только волнующие пассы руками вроде: «deep learning… уууу...blockchain generative models… уууу...» а потом так «Вжух!!!» и красивая картинка. И ни малейшей конкретики.
                                            0
                                            Это, конечно, правда. Но они, видать, посчитали это ноу-хау и решили не публиковать. Но, очевидно, вот эта новая статья не первый результат подобного рода.
                                              0
                                              А я вот очень в этом неуверен. Дьявол в деталях и что и как там было сделано (если было сделано, чего я всё же не исключаю) может чрезвычайно и принципиально отличаться от подхода, изложенного в описанной работе. Без конкретного описания что и как там делалось писать какие-то умозаключения абсолютно бессмысленно; они не стоят электричества потраченного на их передачу.
                                                0
                                                Ой, я не внимателен.
                                                Они же написали, что основа — генеративные модели. Это совершенно другой инструмент.
                                            0
                                            Кстати, вот интересное видео, где в числе прочего показано из каких предпосылок разрабатывался дизайн Sagrada Familia и как Гауди обошёлся без нейронных сетей для решения задачи оптимизации: www.youtube.com/watch?v=JlL6ZHChhQE
                                              +1
                                              Интересная статья!
                                              Несколько комментариев по ходу.
                                              Матрица жесткости — это понятие из метода конечных элементов (МКЭ), нахождение которой там является целевой функцией и которая позволяет по заданным граничным условиям (загрузкам, закреплениям) и свойствам материала найти перемещения конечных элементов и деформацию всей конструкции. (Крылов О.В. «Метод конечных элементов»)
                                              Обычно при решении задач оптимизации топологии используется SIMP-метод (Solid Isotropic Material with Penalization), суть которого — для решенной МКЭ-задачи, на основе матрицы напряжений создается матрица условных «плотностей» (матрица вещественных коэффициентов от 0 до 1), которая множится на матрицу жесткости модели. Те элементы, напряжения в которых были близки к 0, получают, соответственно, плотность (для расчета веса) и жесткость (для расчета деформаций) близкую к 0 и из последующего расчета выпадают. После этого МКЭ-задача заново запускается на расчет и т.д. до достижения заданных ограничений.
                                              Собственно алгоритм построения матрицы «плотностей» и был (как я понял) сутью работы из статьи. Обычно используются различные статичные методы преобразования матриц, но здесь авторы решили каждому элементу МКЭ-модели присвоить отдельный нейрон сети и в качестве матрицы «плотностей» использовать весовые коэффициенты самой нейронки. Довольно оригинально, хотя и лежит на поверхности.
                                                0
                                                Спасибо за ценные дополнения! Добавлю ссылку на комент в статью.

                                                SIMP-метод (Solid Isotropic Material with Penalization)


                                                Действительно, авторы использовали «modified SIMP» из Andreassen, E., Clausen, A., Schevenels, M., Lazarov, B. S., and Sigmund, O. Efficient topologyoptimization in MATLAB using 88 lines of code.Structural and Multidisciplinary Optimization,43(1):1–16, 2011.

                                                здесь авторы решили каждому элементу МКЭ-модели присвоить отдельный нейрон сети


                                                поправка — выходной нейрон, точнее нейрон последнего слоя.

                                                в качестве матрицы «плотностей» использовать весовые коэффициенты самой нейронки


                                                Нет, веса и вход НС являются лишь параметрами, влияющими на значение выходных нейронов. Если НС представить за чёрный ящик, то его выходом (в данной задаче) являются значения нейронов последнего слоя.
                                                  0
                                                  Ясно. Спасибо за разъяснения по поводу использования здесь нейронки. Надо будет внимательней перечитать оригинал :)

                                                  По поводу V0 — обычно в SIMP-методах задается Design Space (это вся доступная область модели, из которой потом убираются элементы), объем модели, который должен остаться (обычно в процентах от Design Space, я так понял это и есть V0) и допустимый предел деформаций конструкции, чаще всего в виде максимального перемещения какого-то одного элемента модели. Собственно, Design Space и предельные деформации задаются изначально, а величиной V0 играют, чтобы получить приемлемое соотношение веса (объема) и предельных напряжений.
                                                    0
                                                    Да, это про V0 понятно…

                                                    Вот тут в коменте ещё дописал объяснение про V0. Видимо его действительно «в лоб» универсально не задать, надо перебирать и играцца и смотреть как влияет.
                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                  0
                                                  Есть такой САПР, SolidThinking Inspire. Используется в индустрии, эффективно решает подобные задачи… Не знаю, какой там алгоритм, давно смотрел.
                                                    0
                                                    Можно чуть поподробнее про «дифференцируемый физический движок». Он по чему дифференцируемый?
                                                      0
                                                      По входам дифференцируемый, очевидно :)
                                                      Смотрите, вся эта конструкция (метод) работает, когда существует возможность вычислить градиент целевой функции, т.е. набор значений всех частных производных целевой функции по весам и входу НС. Т.е. иметь возможность для каждого конкретного значения веса/входа вычислить как (на сколько и в какую сторону) изменяется целевая функция в данной точке (пространства весов+входов). Чтобы это сделать, необходимо, чтобы вся цепочка преобразований, ведущая от данного веса до значения целевой функции, была бы дифференцируемой. Конкретно, с точки зрения физической модели это означает, аналогично, что мы должны иметь возможность вычислить, как бы изменялась целевая функция податливости конструкции при изменении любого из элементов, описывающих составные части каркаса. Соответственно, в таком случае физическая модель, позволяющая рассчитать податливость каркаса, будет являться дифференцируемой. Как-то это можно сделать, очевидно, но я не настоящий сварщик в теме вычислительной физики, конкретных деталей далее не скажу, надо разбираться…
                                                        0
                                                        Вот и я о том. Чем является вход для физического движка? Матрицей/кубом плотностей. Чем является выход движка? Предположим, что скаляром «поддатливости». Стало быть, такой движок кроме скаляра на выходе выдает еще и матрицу/куб производной «поддатливости» по плотности в каждой точке?
                                                          0
                                                          На эту тему в тексте даже написано. Физ.движок рассчитывает тензор (скорее всего матрица) смещения элементов каркаса под нагрузкой. Далее из него и матрицы жесткости получается скаляр — целевая функция, описывающая податливость всей конструкции.
                                                            0
                                                            Попытаюсь ещё раз объяснить. Вы расписали, что на выходе у любого такого движка. У дифференцируемого на выходе еще должна быть и производная/градиент. Производная чего по чему? Производная выхода по входу, так? Выход, по вашим словам — тензор (скорее всего матрица) смещения элементов под нагрузкой. На входе — матрица/куб плотностей. Так что из себя будет представлять производная? Что она описывает? Изменение всего тензора (скорее всего матрицы) при элементарном изменении плотности одного пикселя? Ведь изменение плотности любого из кубиков конструкции влияет на изменение смещения сразу во всей конструкции!
                                                              0
                                                              Изменение всего тензора (скорее всего матрицы) при элементарном изменении плотности одного пикселя? Ведь изменение плотности любого из кубиков конструкции влияет на изменение смещения сразу во всей конструкции!


                                                              Да какое «изменение всего тензора»… Как вы это себе представляете?..
                                                              Изменение составляющих тензора же…
                                                              Вот пусть есть матричная функция Y=F(X), где X={x_ij} — какая-то матрица и Y={y_kl} какая-то матрица произвольной размерности. Градиент DF представляет собой тензор частных производных каждого значения функции по каждому аргумента { d(y_kl)/d(x_ij) }, т.е. иначе — каждому элементу Y в градиенте соответствует матрица производных этого элемента по каждому из входов, т.е. описание как меняется каждый элемент Y при элементарном изменении каждого элемента Х, полагая остальные элементы аргумента неизменными. — Это же самое обычное определение частной производной функции многих переменных, просто расширенное на случай матриц. Если это не понятно, то надо просто разбираться с понятием частных производных и их обобщениями, потом градиентными методами. Либо я, наверное, по прежнему не понимаю, что не понятно…
                                                      0
                                                      (ошибка, не туда ответ ушёл)

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

                                                      Самое читаемое