Известный, и во многом печальный, факт: Реальные физические системы обсчитываются сложными численными методами за очень большое время на суперкомпьютерах.
Менее известный, но более радостный, факт: Есть нейронные сети, которые делают это быстрее (пусть и с меньшей точностью).
В реальных сложных производствах, вроде создания тонких пленок, разработке мембран и т.д., требуются либо сакральные знания технологов, передающиеся из поколений в поколения, либо хотя бы какие то приблизительные оценки на входные параметры процессов, которые необходимы для производства (параметры установки, ее геометрия, соотношения веществ, etc). К сожалению, сколь-нибудь адекватные физические оценки получить можно лишь с помощью длительных расчетов динамики происходящих процессов. И валидны они будут в лучшем случае для одной конкретной установки и конкретных условий. Что же делать? Аппроксимировать!
Типичная задача физика-программиста
Допустим, мы захотели посмотреть, как себя будет вести сильно разряженный газ в каких то конкретных условиях.
Подобные явления описываются некоторыми дифференциальными уравнениями с граничными условиями. Т.е. задачей Коши.
Для примера: одномерное уравнение Больцмана без столкновений
где f — функция распределения, v — скорость.
Для решения подобных задач вводятся так называемые разностные сетки, в узлах которых мы определяем параметры нашей системы, вводим сеточные функции, вычисляем дискретизованные производные и ищем решения наших уравнений. Типичная дискретизованная версия уравнения Больцмана выглядит так:
где t — шаг по временной сетке, h — шаг по пространственной.
Точность итоговых вычислений зависит от размерности сеток, и от них же зависит длительность и сложность вычислений.
Типичное число точек для сетки координатной для реальных задач — порядка сотен тысяч точек. Такие сетки вводятся для всех переменных. Для многомерных задач ситуация драматично ухудшается — необходимо вводить сетки для каждой из координат.
Подобные вычисления для реальных задач обычно затрачивают месяца на суперкомпьютерах.
Аппроксимируем аппроксимацию
В бытность мою студентом, мы часто шутили про то, что публикации в физических журналах о нейронных сетях — это обычно попытка аппроксимировать какой то приближенный метод нейронной сетью. Т.е. получить приближение в квадрате.
Ну, в целом, мы не то чтобы ошибались.
Итак. У нас есть нейронные сети и множество различных архитектур для них. Наивное решение: Возьмем произвольную архитектуру и прогоним через нее наши данные.
На выходе мы получим некоторую нейронную сеть, которая будет играть роль нашей функции распределения.
Допустим даже, что данная нейронная сеть имеет очень низкую ошибку в том числе и на тестовом датасете.
Но вот проблема: для ряда случаев нарушаются законы сохранения, пусть и не сильно. Гарантированно избежать этого мы не можем.
К сожалению, это означает, что такая аппроксимация становится абсолютно бесполезной, ибо решения с нарушением законов сохранения — нефизичны и ведут к появлению абсолютно магических явлений вроде взявшихся неоткуда источников энергии в системе. Динамические системы достаточно чувствительны к таким проблемам, так что почти все решение становится бесполезным.
Другой ландшафт
С формальной точки зрения мы решали задачу оптимизации произвольной функции распределения по произвольному пространству параметров.
Но что, если мы заранее зададим в функцию потерь в таком виде, чтобы удовлетворялись законы сохранения?
Например: Напрямую добавим в лосс функцию слагаемое, которое будет зануляться только в случае выполнения законов сохранения.
Таким образом мы ограничили пространство параметров только теми, которые лежат в некотором подпространстве — считай, выделили поверхность, на котором выполняются законы сохранения.
Достаточное ли это решение?
Ну, почти. На самом деле, мы в качестве дополнительного слагаемого нужно выбрать такое, которое будет учитывать все свойства аппроксимируемых уравнений, которые мы знаем. Граничных условий, законов сохранения, etc. То есть:
где BC — boudary condition — граничные условия, а DE — differential equation — дифференциальное уравнение. Таким образом такая функция потерь должна минимизироваться на тех решениях, для которых выполняются и граничные условия, и само дифференциальное уравнение.
Нейронная сеть с таким типом Loss функцией и называется PINN — Physics-informed neural network.
Такой тип функции потерь решает сразу несколько проблем:
-
Сохранение физичности решения.
-
Ускорение обучения — за счет уменьшения пространства поиска параметров сети.
-
Уменьшение количества необходимых для обучения данных — ведь мы напрямую заложили в сеть априорные сведения о свойствах решения.
А что же дальше?
На самом деле PINN — это частный случай более глубокой идеи, которая сейчас активно развивается в нейронных сетях.
Добавление дополнительных членов, связанных не только с самими признаками, которые мы изучаем, но и с их производными (в данном случае — дифференциальными уравнениями) порождает требование к нейронной сети учитывать гладкость пространства решений. Таким образом мы как бы учитываем некоторые инварианты нашего многообразия. Конструировать сети с учетом геометрических свойств изучаемой задачи можно разными способами. Подробности, не связанные с PINN, можно посмотреть в достаточно спорной, но интересной статье: линк.
ссылка на оригинал статьи https://habr.com/ru/articles/748538/
Добавить комментарий