Main menu

Разреженные матрицы и их хранение: форматы CSR, CSC и COO

Экономия памяти в гигантских системах

В задачах математического моделирования, о которых мы многократно упоминали (метод конечных элементов для прочностных расчетов, метод конечных разностей в гидродинамике, расчет графов в социальных сетях), возникают матрицы колоссальных размеров. Матрица системы из миллиона уравнений содержит триллион элементов. Если попытаться сохранить ее в оперативной памяти компьютера в обычном плотном двумерном формате (каждое число типа double precision занимает 8 байт), потребуется 8 терабайт оперативной памяти! Таких ресурсов нет у обычных серверов.

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

Координатный формат (COO)

Самым интуитивно понятным и простым способом сохранения разреженной матрицы является координатный формат (Coordinate format, COO). В этом формате матрица хранится в виде трех одномерных массивов одинаковой длины (равной количеству ненулевых элементов, NNZ). Первый массив хранит сами значения (ненулевые числа). Второй массив хранит индексы строк для этих значений. Третий массив хранит индексы столбцов.

Например, если число 5.4 находится во 2-й строке и 3-м столбце, то в массив значений пишется 5.4, в массив строк — 2, в массив столбцов — 3. Этот формат великолепно подходит для первоначальной сборки матрицы по частям (например, при агрегации конечных элементов), так как в него очень легко добавлять новые числа. Однако для быстрого матричного умножения он не является оптимальным из-за недостаточной структурированности.

Форматы сжатого хранения строк (CSR) и столбцов (CSC)

Индустриальным стандартом для быстрых вычислений (решения СЛАУ и умножения матрицы на вектор) стал Формат Сжатого Хранения Строк (Compressed Sparse Row, CSR). Этот формат также использует три одномерных массива, но упаковывает индексы строк гораздо умнее, чем COO. Массив значений и массив индексов столбцов остаются такими же (хранятся элементы, перебираемые слева направо и сверху вниз). Но массив строк заменяется на массив «указателей на начало строк» (row_ptr).

Массив row_ptr имеет размер, равный количеству строк в матрице плюс один. Каждый элемент этого массива показывает, на каком индексе в массиве значений начинается новая строка матрицы. Вычисляя разность между соседними элементами массива row_ptr, компьютер мгновенно узнает, сколько ненулевых элементов содержится в конкретной строке. Это обеспечивает феноменально быстрый доступ к элементам при умножении. Абсолютно симметричным является Формат Сжатого Хранения Столбцов (Compressed Sparse Column, CSC), где сжимаются индексы столбцов, а элементы записываются сверху вниз и слева направо. CSR оптимизирован для умножения y = A*x, а CSC — для y = A^T*x. Все современные библиотеки линейной алгебры (Intel MKL, SciPy.sparse, cuSPARSE на видеокартах) построены на глубокой аппаратной оптимизации этих форматов упаковки.

Подробнее

Спектральный анализ временных рядов: оконное преобразование Фурье

Проблема нестационарности в цифровой обработке сигналов

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

Однако большинство реальных сигналов в природе и технике являются нестационарными. Мелодия состоит из нот, которые звучат последовательно. Человеческая речь — это чередование согласных и гласных звуков с разным спектром. Землетрясение имеет четкое начало, фазу максимальных разрушений и затухание. Если мы применим классическое преобразование Фурье к 10-секундной аудиозаписи песни, мы получим один усредненный спектр. Этот спектр покажет нам все ноты, которые присутствовали в песне, но он абсолютно ничего не скажет о том, когда именно была сыграна каждая нота. Мы теряем информацию о времени. Для решения этой фундаментальной проблемы было изобретено Оконное преобразование Фурье (Short-Time Fourier Transform, STFT).

Скользящее окно: компромисс между временем и частотой

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

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

Весовые окна и предел Габора (принцип неопределенности)

На практике просто грубо обрезать сигнал (прямоугольное окно) нельзя. Это порождает резкие скачки на краях кадра, что по законам математики приводит к размазыванию спектра (эффект спектральной утечки — spectral leakage). Поэтому инженеры используют гладкие весовые окна (окна Ханна, Хэмминга, Блэкмана), которые плавно сводят амплитуду сигнала к нулю на краях кадра, минимизируя искажения.

Однако оконное преобразование Фурье имеет жесткое физико-математическое ограничение, аналогичное квантовому принципу неопределенности Гейзенберга. Оно известно как предел Габора. Суть его в том, что мы не можем одновременно получить идеальное разрешение и по времени, и по частоте. Если мы возьмем короткое временное окно, мы будем точно знать, когда произошло событие, но спектр станет размытым (плохое частотное разрешение). Если мы возьмем длинное окно, мы получим идеальное разрешение по частоте (точно отличим близкие ноты), но размоем сигнал во времени (потеряем резкость быстрых ударов барабана). Инженеру всегда приходится искать компромисс, подбирая размер окна под конкретную задачу, что и послужило стимулом для дальнейшего развития вейвлет-анализа.

Подробнее

Методы сглаживания данных: скользящие средние и экспоненциальное сглаживание

Борьба с высокочастотным шумом в реальных измерениях

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

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

Простое и взвешенное скользящее среднее (SMA и WMA)

Самым известным и интуитивно понятным алгоритмом является простое скользящее среднее (Simple Moving Average, SMA). Принцип его работы тривиален: мы берем «окно» заданного размера (например, 5 точек), суммируем значения внутри этого окна и делим на 5. Полученное число становится новым сглаженным значением для центральной точки окна. Затем окно сдвигается на один шаг вправо, и операция повторяется. Чем шире окно, тем сильнее сглаживается график, но тем сильнее он отстает от резких изменений реального тренда (эффект запаздывания).

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

Экспоненциальное сглаживание и фильтр Савицкого-Голея

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

Однако все методы усреднения имеют фатальный недостаток при обработке физических и химических спектров: они «срезают» острые пики полезного сигнала. Для сохранения формы пиков и точного вычисления производных в 1964 году был разработан Фильтр Савицкого-Голея. Этот метод проводит локальную полиномиальную регрессию (по методу наименьших квадратов) внутри движущегося окна. Сглаженное значение вычисляется не арифметическим усреднением, а подстановкой в найденный полином (обычно 2-й или 3-й степени). Благодаря этому фильтр Савицкого-Голея великолепно сглаживает шум, сохраняя при этом амплитуду, ширину и центры физических резонансов в спектроскопии.

Подробнее

Соц. сети