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