Main menu

Метод конечных объемов (МКО): фундамент вычислительной гидродинамики

Законы сохранения как основа физики сплошных сред

Ранее мы рассматривали метод конечных разностей (МКР) и метод конечных элементов (МКЭ). Однако, когда дело доходит до моделирования течений газов и жидкостей (аэродинамика самолетов, течения в газопроводах, взрывы, горение в двигателях), инженеры обращаются к третьему, специализированному инструменту — методу конечных объемов (МКО, или Finite Volume Method, FVM). Именно этот алгоритм заложен в основу большинства ведущих коммерческих и открытых пакетов вычислительной гидродинамики (CFD), таких как ANSYS Fluent, CFX и OpenFOAM.

Причина такого выбора кроется в самой сути дифференциальных уравнений газовой динамики (системы уравнений Эйлера или Навье-Стокса). Эти уравнения являются математической записью фундаментальных законов природы: сохранения массы, сохранения импульса и сохранения энергии. МКР и МКЭ оперируют узлами сетки и пытаются аппроксимировать дифференциальные операторы. При грубой сетке они могут математически «потерять» часть массы или энергии. Метод конечных объемов, напротив, строится не на дифференциальных, а на интегральных формах законов сохранения, гарантируя строгий баланс физических величин на любой, даже самой грубой сетке.

Контрольные объемы и расчет потоков на гранях

Суть МКО состоит в следующем: расчетная область со сложной геометрией разбивается на множество мелких, непересекающихся ячеек (многогранников). Эти ячейки называются контрольными объемами. Искомые величины (плотность, давление, скорость) хранятся не в узлах, а в центрах этих объемов и представляют собой средние значения внутри ячейки.

Поскольку масса, импульс или тепло не могут просто исчезнуть или появиться из ниоткуда, изменение этих величин внутри контрольного объема во времени может происходить только по одной причине: из-за перетекания (потока) этих величин через границы (грани) ячейки в соседние объемы или из них. Математически интеграл по объему преобразуется в интеграл по поверхности с помощью теоремы Остроградского-Гаусса. Таким образом, главная задача МКО сводится к максимально точному расчету потоков на гранях между ячейками. Что вытекло из ячейки А, то со стопроцентной точностью втекло в ячейку Б (консервативность метода).

Улавливание ударных волн и решатели Римана

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

Для решения этой проблемы российский математик Сергей Годунов в 1959 году предложил гениальную идею. Он предложил рассматривать разрыв параметров на гране между двумя ячейками как локальную задачу о распаде произвольного разрыва (задачу Римана в газовой динамике). Решая задачу Римана на каждой грани, алгоритм получает точные, физически обоснованные потоки, которые естественным образом учитывают направление распространения волн (скорость звука). Развитие этой идеи привело к созданию современных высокоразрешающих схем с ограничителями потоков (TVD-схемы, алгоритмы Roe, HLLC). Благодаря им МКО способен рассчитывать сложнейшие сверхзвуковые течения с резкими фронтами ударных волн без численных осцилляций, обеспечивая человечество инструментами для проектирования гиперзвуковых аппаратов и турбин.

Подробнее

Оптимизация в машинном обучении: стохастический градиентный спуск (SGD)

Большие данные и паралич классических методов

Мы уже рассматривали классический метод градиентного спуска (GD), который шаг за шагом приближается к минимуму функции, вычисляя градиент (вектор частных производных). В машинном обучении, и особенно при обучении глубоких нейронных сетей, мы минимизируем функцию потерь (Loss function), которая показывает, насколько сильно нейросеть ошибается на обучающих данных. Параметрами оптимизации здесь выступают миллионы весовых коэффициентов синапсов сети.

Проблема заключается в масштабах. Функция потерь нейросети складывается из ошибок на каждом отдельном примере из обучающей выборки. Если ваша выборка состоит из 10 миллионов изображений (как в датасете ImageNet), то для того, чтобы сделать всего один крошечный шаг градиентного спуска, компьютеру нужно прогнать через огромную нейросеть все 10 миллионов картинок, вычислить ошибку для каждой, сложить их и найти производные. Это чудовищно долго. Классический (полнопакетный) градиентный спуск в эпоху Big Data оказался вычислительно парализован.

Стохастичность: скорость в обмен на шум

Гениальный выход из этой ситуации — Стохастический Градиентный Спуск (SGD). Идея SGD состоит в том, чтобы не вычислять точный градиент по всем миллионам примеров, а оценивать его приблизительно, используя только один случайно выбранный пример из выборки на каждом шаге.

Это кардинально меняет картину. Вместо того чтобы ждать часы ради одного абсолютно точного шага, нейросеть делает тысячи приблизительных шагов в секунду. Да, каждый отдельный шаг SGD сильно зашумлен — градиент от одного примера может указывать не совсем в сторону глобального минимума, заставляя траекторию поиска сильно «дрожать» и петлять. Однако, согласно закону больших чисел, математическое ожидание (среднее направление) этих хаотичных скачков верно ведет алгоритм к минимуму функции. Более того, доказано, что этот стохастический шум работает как форма регуляризации: он помогает алгоритму «выскакивать» из мелких локальных минимумов, что крайне полезно в невыпуклом ландшафте функций потерь глубоких сетей.

Мини-батчи и адаптивные оптимизаторы (Adam)

В чистом виде SGD (по одному примеру) плохо использует возможности современных видеокарт (GPU), которые созданы для параллельных матричных вычислений. Поэтому золотым стандартом индустрии стал компромисс — SGD по мини-батчам (Mini-batch SGD). Выборка делится на небольшие случайные пакеты (от 32 до 512 примеров). Градиент вычисляется по этому пакету. Это дает и достаточную скорость благодаря матричным вычислениям на GPU, и спасительный стохастический шум.

Чтобы справиться с проблемой подбора скорости обучения (learning rate) и зигзагообразными колебаниями SGD в оврагах, математики разработали мощные надстройки. Введение «импульса» (Momentum) позволяет алгоритму накапливать скорость, двигаясь в постоянном направлении, и пробивать мелкие препятствия по инерции. Вершиной этой эволюции стал алгоритм Adam (Adaptive Moment Estimation), который для каждого отдельного из миллионов параметров нейросети вычисляет свою собственную, адаптивную скорость обучения, базируясь на скользящих средних градиентов и их квадратов. Сегодня Adam и его модификации (AdamW) являются инструментами по умолчанию для обучения подавляющего большинства систем искусственного интеллекта, от распознавания образов до больших языковых моделей.

Подробнее

Оценивание состояния систем: фильтр Калмана и анализ зашумленных данных

Проблема скрытых состояний и неточных датчиков

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

Решение этой задачи было найдено в 1960 году Рудольфом Калманом. Его алгоритм, получивший название Фильтр Калмана, стал одним из важнейших открытий в истории вычислительной математики и теории управления. Именно этот фильтр позволил бортовым компьютерам миссии «Аполлон» точно оценивать траекторию спускаемого модуля и успешно приземлиться на Луну, несмотря на сильнейшие шумы радаров.

Математика предсказаний и коррекций

Фильтр Калмана работает по принципу рекурсивного байесовского оценивания. Он не требует хранения огромного массива прошлых данных; ему нужны только результаты предыдущего шага и текущее измерение. Алгоритм элегантно объединяет два источника информации: физическую (математическую) модель системы и показания датчиков. Работа фильтра состоит из бесконечно повторяющегося двухтактного цикла: Предсказание (Predict) и Коррекция (Update).

На этапе Предсказания фильтр использует уравнения физики (например, законы Ньютона), чтобы рассчитать, где должна оказаться система на следующем шаге. Поскольку модель не идеальна, фильтр также рассчитывает матрицу ковариации ошибок (степень своей неуверенности в этом предсказании). Затем наступает этап Коррекции. Датчик присылает новое, зашумленное измерение. Фильтр сравнивает предсказанное значение с измеренным.

Магия коэффициента усиления Калмана

Суть алгоритма скрыта в вычислении специальной матрицы — коэффициента усиления Калмана (Kalman Gain). Этот коэффициент определяет, кому алгоритм должен доверять больше в данный момент: своей математической модели или показаниям датчика. Если модель очень точная, а датчик сильно шумит (например, во время бури), коэффициент усиления уменьшается, и фильтр игнорирует скачки показаний, опираясь на физику. Если же модель неточна (возник непредсказуемый порыв ветра), а датчик высокоточный, коэффициент усиления возрастает, и фильтр жестко корректирует свою внутреннюю оценку по данным прибора.

Путем умножения матриц и обновления ковариаций, фильтр Калмана математически доказывает, что его оценка является оптимальной (минимизирует среднеквадратичную ошибку) для линейных систем с нормальным гауссовским шумом. Для нелинейных систем (с которыми мы работаем в 99% случаев) был разработан Расширенный фильтр Калмана (EKF), который на каждом шаге линеаризует уравнения с помощью матриц Якоби, оставаясь сегодня абсолютным стандартом в робототехнике, навигации дронов и системах автопилотов.

Подробнее

Соц. сети