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

Менее известный, но более радостный, факт: Есть нейронные сети, которые делают это быстрее (пусть и с меньшей точностью).

В реальных сложных производствах, вроде создания тонких пленок, разработке мембран и т.д., требуются либо сакральные знания технологов, передающиеся из поколений в поколения, либо хотя бы какие то приблизительные оценки на входные параметры процессов, которые необходимы для производства (параметры установки, ее геометрия, соотношения веществ, etc). К сожалению, сколь-нибудь адекватные физические оценки получить можно лишь с помощью длительных расчетов динамики происходящих процессов. И валидны они будут в лучшем случае для одной конкретной установки и конкретных условий. Что же делать? Аппроксимировать!

Типичная задача физика-программиста

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

Подобные явления описываются некоторыми дифференциальными уравнениями с граничными условиями. Т.е. задачей Коши.

Для примера: одномерное уравнение Больцмана без столкновений

\frac{\partial f}{\partial t} + v\frac{\partial f}{\partial x} = 0,

где f - функция распределения, v - скорость.

Для решения подобных задач вводятся так называемые разностные сетки, в узлах которых мы определяем параметры нашей системы, вводим сеточные функции, вычисляем дискретизованные производные и ищем решения наших уравнений. Типичная дискретизованная версия уравнения Больцмана выглядит так:

\frac{f^{j+1}_{i} - f^{j}_{i}}{t} + v\frac{f^{j}_{i} - f^{j}_{i-1}}{h} = 0

где t - шаг по временной сетке, h - шаг по пространственной.

Точность итоговых вычислений зависит от размерности сеток, и от них же зависит длительность и сложность вычислений.

Типичное число точек для сетки координатной для реальных задач - порядка сотен тысяч точек. Такие сетки вводятся для всех переменных. Для многомерных задач ситуация драматично ухудшается - необходимо вводить сетки для каждой из координат.

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

Аппроксимируем аппроксимацию

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

Ну, в целом, мы не то чтобы ошибались.

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

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

f' = NN(x, t)


Допустим даже, что данная нейронная сеть имеет очень низкую ошибку в том числе и на тестовом датасете.

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

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

Другой ландшафт

С формальной точки зрения мы решали задачу оптимизации произвольной функции распределения по произвольному пространству параметров.

Но что, если мы заранее зададим в функцию потерь в таком виде, чтобы удовлетворялись законы сохранения?

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

Loss = MSE(f, f') + L_{phys}


Таким образом мы ограничили пространство параметров только теми, которые лежат в некотором подпространстве - считай, выделили поверхность, на котором выполняются законы сохранения.

Достаточное ли это решение?

Ну, почти. На самом деле, мы в качестве дополнительного слагаемого нужно выбрать такое, которое будет учитывать все свойства аппроксимируемых уравнений, которые мы знаем. Граничных условий, законов сохранения, etc. То есть:

L_{phys} = L_{BC} + L_{DE}

где BC - boudary condition - граничные условия, а DE - differential equation - дифференциальное уравнение. Таким образом такая функция потерь должна минимизироваться на тех решениях, для которых выполняются и граничные условия, и само дифференциальное уравнение.

Нейронная сеть с таким типом Loss функцией и называется PINN - Physics-informed neural network.

Такой тип функции потерь решает сразу несколько проблем:

  1. Сохранение физичности решения.

  2. Ускорение обучения - за счет уменьшения пространства поиска параметров сети.

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

А что же дальше?

На самом деле PINN - это частный случай более глубокой идеи, которая сейчас активно развивается в нейронных сетях.

Добавление дополнительных членов, связанных не только с самими признаками, которые мы изучаем, но и с их производными (в данном случае - дифференциальными уравнениями) порождает требование к нейронной сети учитывать гладкость пространства решений. Таким образом мы как бы учитываем некоторые инварианты нашего многообразия. Конструировать сети с учетом геометрических свойств изучаемой задачи можно разными способами. Подробности, не связанные с PINN, можно посмотреть в достаточно спорной, но интересной статье: линк.

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