Сикофантия? Или ускорение динамического пересчета определителя от O(n³) до O(n)?

от автора

Всем привет. Хотел бы поделиться своими результатами и обратиться за ответным мнением.

Представлюсь: Шевченко Максим Юрьевич. Работал мануальным тестировщиком (в том числе); считаю себя исследователем, в основном, в области математики.

Лет 10 тому назад мне удалось вывести обобщение тождества Деснано‑Якоби, связанное с методом конденсации Чарльза Доджсона (более известного как Льюис Кэрролл). Тогда это обобщение казалось мне интересным лишь с теоретической точки зрения, и никакого практического применения его я не предполагал. Некоторое время эта работа «пылилась в сундуке» пока я ее наконец не опубликовал. А сейчас задался вопросом: можно ли применить эту работу на практике? Статья в моем проекте на GitVerse, там же Python-код, о котором позже…


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

И потому в качестве рецензента я решил наконец обратиться к искусственному интеллекту (далее «AI»). LLM‑модели не интересуются регалиями, не затягивают ответ на полгода и готовы отвечать на вопросы до бесконечности.

Конечно, с другой стороны AI может «галлюцинировать», а также выдавать желаемое за действительное, то есть заниматься «цифровым подхалимством»: сикофантией.

«Сикофантия применительно к ИИ — это склонность языковой модели систематически выбирать ответы, которые подтверждают и усиливают мнение пользователя, вместо того чтобы давать нейтральные, корректирующие или альтернативные варианты.»

Отсюда мой рассказ опирается на две темы:

1. Математическая суть найденного мною обобщения.

2. Взаимодействие с AI, который я таким образом также исследовал.

Уточню: я использовал Gemini в Google Chrome и Яндекс Алису (для сравнения получаемой информации).

Может кто‑то из моих потенциальных читателей — принципиальный противник любого применения AI (в том числе в науке). Для подобного случая могу уточнить, что свою статью я писал сам, а я — не AI.

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

d(F_{n}) — «базовый» детерминант «базовой» матрицыF_{n}=(f_{ij}) порядка n.

F_{i}(\textbf{q}_{n}) — детерминант, полученный из базового заменой его i‑го столбца на новый произвольный вектор \textbf{q}_{n}=(q_{1},q_{2},...,q_{n}).

F_{ij}(\textbf{q}_{n},\textbf{q}_{n}^{'}) — детерминант, полученный из базового одновременной заменой i‑го столбца на вектор \textbf{q}_{n}, а j‑го столбца — на вектор \textbf{q}_{n}^{'}=(q_{1}^{'},q_{2}^{'},...,q_{n}^{'}) (при этом i \neq j, а F_{ii}(\textbf{q}_{n},\textbf{q}_{n}^{'})=0).

Разработанное мной обобщение тождества Деснано‑Якоби формулируется в виде следующей теоремы:

Теорема 1. Для любых матриц F_{n} и произвольных векторов \textbf{q}_{n}, \textbf{q}_{n}^{'} справедливо тождество:

F_{i}(\textbf{q}_{n})F_{j}(\textbf{q}_{n}^{{}^{\prime }})-F_{j}(\textbf{q}_{n})F_{i}(\textbf{q}_{n}^{{}^{\prime }})=d(F_{n})F_{ij}(\textbf{q}_{n},\textbf{q}_{n}^{{}^{\prime }})

где i,j \in (1,n).

Проще говоря: разность произведений определителей матриц с инверсивно замененными столбцами равна произведению определителя «базовой» матрицы на определитель матрицы, в которой заменены оба столбца сразу.

Из этого свойства выводится еще одно важное тождество.

Теорема 3. Для любых i,k \in (1,n) справедливо:

q_{i}^{'}F_{k}(\textbf{q}_{n})-q_{i}F_{k}(\textbf{q}_{n}^{'})=\sum_{l=1}^{n}f_{il}F_{kl}(\textbf{q}_{n},\textbf{q}_{n}^{'})

Тот же AI подсказал мне, что весь означенный выше математический аппарат может быть применен как для символьных, так и для численных вычислений. И вот теперь мнение AI о пользе программной реализации теоремы 1 (далее буду использовать для нее термин «локально‑векторный метод» или LVM):

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

  • Как считает классика: На каждом шаге базовые методы (Гаусс, LU‑разложение) или алгоритмы точных вычислений (Барейса, Берковица) вынуждены обрабатывать измененную матрицу целиком, затрачивая кубическую сложность \mathcal{O}(n^3) операций на каждой итерации. Если шагов M, общая сложность системы превращается в тяжелые \mathcal{O}(M \cdot n^3).

  • Как работает «локально‑векторный метод»: алгоритм разделяется на две фазы. На «тяжелом» Шаге 0 (инициализация) мы один раз рассчитываем определитель базы и её полную присоединенную матрицу. Это занимает O(n^3). Зато на всех последующих итерациях обновлений (Шаг 1), какие бы два столбца ни изменились, алгоритму больше вообще не нужно пересчитывать матрицу с нуля. Он просто извлекает нужные строки из кэша и выполняет всего 4 скалярных произведения векторов. Сложность шага падает до линейной — \mathcal{O}(n). Общая сложность системы за все время работы — всего \mathcal{O}(n^3 + M \cdot n). При больших M тяжелым стартом можно пренебречь.

«Локально‑векторный метод» VS леммы о детерминанте матрицы

Проницательный инженер спросит: «Подождите, но ведь для задач локального изменения матриц давно существуют формула Шермана‑Моррисона и её блочное обобщение — формула Вудбери! Чем ваш метод лучше?».

Это прекрасный вопрос. Давайте посчитаем операции.

Если мы оцениваем не просто один абстрактный математический шаг, а весь вычислительный процесс (например, работу программы или бенчмарка целиком), то в O‑нотации появляется дополнительный аргумент —M.

В итоге полная сложность работы всей программы зависит от трёх параметров:

  1. n— размер матрицы (сколько в ней строк/столбцов).

  2. k— ранг возмущения (сколько столбцов меняется за один раз, в конкретном случае k=2).

  3. M— количество запусков/итераций (сколько раз в цикле происходит это изменение).

В численной плоскости мы соревнуемся с библиотекой LAPACK (бэкенд NumPy), написанной на C/Fortran, и на длинных дистанциях итераций M наш подход уверенно забирает лидерство по скорости.

Сводная таблица сравнения сложностей для символьного режима.

Критерий

Локально‑векторный метод

Метод Барейса (Bareiss)

Метод Берковица (Berkowitz)

Принцип работы

Обновление кэша

Вычисление с нуля

Вычисление с нуля

Сложность шага

O(n^2) (в символьном виде)

O(n^3) но с тяжелой символьной арифметикой

O(n^4)

Чувствительность к M шагам

Почти бесплатные шаги

Каждый шаг — тяжелый пересчет

Каждый шаг — экстремально тяжелый пересчет

Сводная таблица сравнения сложностей для численного режима.

Критерий сравнения

Локально‑векторный метод

Determinant Lemma

LAPACK (np.linalg.det)

Сложность препроцессинга

O(n^3)

O(n^3)

O(не требуется)

Память под кэш

2nэлементов (две строки)

n^2элементов (вся матрица, обратная к A)

O(не требуется)

Сложность одного шага

O(n)(скалярные произведения)

O(n^2)(умножение матрицы на вектор)

O(n^3)(пересчет с нуля)

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

Символьный расчет для локально ‑векторного метода на матрице размером 200*200:

Символьный расчет для сравнения метода Барейса, Берковица и локально ‑векторного метода на матрице размером 7*7:

Численный расчет для сравнения локально ‑векторного метода и LAPACK на матрице размером 200*200:

Может AI мне льстил? Хотя «цифровое подхалимство» в определенных случаях можно назвать «отрицательным». Именно: если попросить AI отнестись критически к запрошенной информации, то он может пойти навстречу и выдать незаслуженную критику.

Общий пример диалога:

Клиент: «А может я не прав? Так ты скажи…»

AI: «Вы полностью правы в том, что не правы. Я был абсолютно не прав, когда утверждал, что вы были правы. Прошу прощения, что ввел Вас в заблуждение»

Так что не обязательно AI будет хвалить в прямом смысле этого слова. Он может и поругать (если его, конечно, подбодрить в нужном направлении).

И может самокритика AI своей сикофантии — это тоже сикофантия? (Кстати, я задавал такой вопрос AI)

Тем временем AI меня хвалил и отправлял в мой адрес следующие эпитеты: «метод Шевченко», «уникальная сила метода Шевченко», «жизненно необходимый», «даёт прорыв», «битва титанов: метод Шевченко против формулы Вудбери», «математическая дуэль»…

Заметьте, не я это изложил. Поэтому ранее по тексту я назвал метод, реализованный на основе своей работы, «локально‑векторный».

Еще перечислю несколько возможных областей применения «локально‑векторного метода» по мнению AI:

1. Робототехника и многозвенные механизмы. При управлении роботом‑манипулятором компьютер каждую миллисекунду решает уравнения динамики.

2. Динамика строительных конструкций и мостов. Расчет устойчивости сооружений при внешних динамических воздействиях (ветер, сейсмика, проезд тяжелого транспорта).

3. Бортовые системы БПЛА и автопилоты. Оптимизация траектории беспилотников в условиях жесткого дефицита вычислительной мощности.

4. Оптимизация электрических и гидравлических сетей. Моделирование работы энергосетей или городских водопроводов при переключениях.

5. Квантовая химия и молекулярная динамика. Моделирование поведения молекул и кристаллических решеток.

А вот еще о пользе и применении программной реализации теоремы 3:

Сценарий вычисления сразу всех n вариантов определителей (где теорема 3 даёт прорыв с O(n^4) до O(n^3) актуален там, где выполняется глобальный перебор, сканирование или оптимизация:

Машинное обучение и отбор признаков (Feature Selection): представьте, что ИИ‑модель выбирает, какой из n имеющихся параметров (например, медицинских показателей пациента) сильнее всего влияет на результат. Чтобы это понять, алгоритму нужно поочередно подставить каждый из параметров в систему и оценить определитель. Вместо n отдельных тяжелых вычислений, метод на базе теоремы 3 позволяет за один проход получить оценку для всех признаков сразу.

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

В целом, мне пришлось отправить AI огромное количество различных запросов, наблюдая колебания его оценок между отрицанием и подтверждением достоинств и недостатков моей работы. Я стремился стабилизировать эти оценки на устойчивом уровне. Именно такая оценка, как «золотая середина», представляется мне близкой к истинной c точки зрения работы с AI. Хотя истина мне до сих пор неизвестна.

А вообще‑то AI — перфекционист. После долгого общения он периодически «вырубается» с сообщением «Something went wrong and the content wasn’t generated. Но если на следующей вкладке (и возможно на следующий день) ему загрузить уже имеющийся код, то он (AI) cнова предложит много изменений к лучшему. Похоже, так может продолжаться до бесконечности.»

Теперь о коде. Он создан AI на Python. Я не считаю себя специалистом в программировании. Но, как инженер по тестированию, многократно проверял работу созданного кода методом «черного ящика», подавая различные данные на вход и анализируя данные, полученные на выходе.

Правда, возникла вероятность того, что AI, увлеченный скорее процессом программной реализации, чем математической сутью вопроса, исказит, нивелирует, «затрет» суть «локально‑векторного метода» сторонними средствами для реализации кода. Я отслеживал подобные ситуации и старался их преодолевать. Но, наверно, в некоторой степени содержание «локально‑векторного метода» заключается не только в его математической основе, но и в способе ее программной реализации.

И вот: я отправил заявку в Роспатент на регистрацию этого кода. На всякий случай. А вдруг AI прав хотя бы в некоторых своих заключениях насчет оценки и применения моего труда? И тогда созданный код, возможно, имеет также и коммерческое применение? Хотелось бы понять также и это.

Ниже дано описание файлов, выложенных в GitVerse в моем проекте и содержащих упомянутый код:

«СТРУКТУРА И СОСТАВ ПРЕДСТАВЛЯЕМОГО ИСХОДНОГО КОДА ПРОГРАММЫ ДЛЯ ЭВМ»

Представляемый на государственную регистрацию исходный код программного комплекса («MatrixDeterminantEngine») имеет модульную архитектуру и состоит из трех взаимосвязанных файлов (компонентов), обеспечивающих полный цикл вычислений, потоковой обработки и верификации:

1. Модуль matrix_core.py (Вычислительное ядро комплекса).

Смысл и назначение: Математический и алгоритмический фундамент программы. Содержит класс DeterminantEngine, реализующий адаптивный локально‑векторный метод для быстрого пересчета определителей при одновременной модификации двух столбцов матрицы.

Функционал: Осуществляет предварительный расчет и кэширование строки/столбца матрицы присоединенных элементов (алгебраических дополнений) на Шаге 0, обеспечивая последующий мгновенный линейный пересчет детерминантов со сложностью O(n) на Шаге 1. Оснащен модулем динамического контроля обусловленности. При критическом вырождении матрицы переключается на защитный кубический конвейер O(n^3). Полностью поддерживает как численные потоки с плавающей запятой произвольной точности (NumPy / mpmath), так и точные аналитические вычисления (SymPy).

2. Модуль app_runner.py (Управляющий конвейер потоковой обработки).

Смысл и назначение: Служит программной оболочкой (Middleware) для интеграции вычислительного ядра с внешними источниками и потребителями данных. Обеспечивает сквозную диспетчеризацию вычислительного процесса.

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

3. Модуль benchmark_runner.py (Испытательный и верификационный стенд).

Смысл и назначение: Предназначен для автоматизированного контроля корректности вычислений, оценки производительности и верификации вычислительных преимуществ локально‑векторного метода перед альтернативными классическими алгоритмами.

Функционал: Осуществляет координацию пошаговых стресс‑тестов производительности на матрицах заданных конфигураций и жесткости (с контролем числа обусловленности). Проводит сравнительный бенчмаркинг ЛВМ с классическим целочисленным алгоритмом Барейса, методом Берковица и прямым вычислением определителей «с нуля» промышленными библиотеками LAPACK (NumPy) и mpmath. Отвечает за сбор чистой временной статистики высокого разрешения, её табличную агрегацию в консоли и автоматическое сохранение сравнительных графиков в логарифмическом и линейном масштабах.

В целом, исходя из имеющихся у меня на данный момент знаний и опыта, полагаю полезным использовать AI в качестве рецензента на промежуточном или даже начальном этапе научных исследований. Например, мне еще много чего нужно отрецензировать: материалов для будущих статей в разной степени готовности накопилось немало. А может не только мне? Возможно имеет смысл отдавать AI‑рецензентам сотни и тысячи работ, которые до сих пор не нашли своего применения и мимо которых прошли живые рецензенты? Хотя, конечно, отдавать AI на рецензию еще неопубликованные материалы может оказаться опасным из‑за возможной утечки информации и, таким образом, утраты приоритета открытия. Но это уже совсем другая история, которая нуждается в отдельном освещении.

Плюсы применения AI‑рецензента вижу следующие:

1. Мотивация дальнейших исследований. Внимание и высокая скорость взаимодействия побуждают к дальнейшей работе, а не к «почиванию на лаврах». Но это я про себя.

2. Получение новой информации. Так, по результатам рецензирования я узнал о формуле Шермана‑Моррисона‑Вудбери (Sherman‑Morrison‑Woodbury formula), лемме о матричном определителе (Matrix Determinant Lemma) и про многое другое. Конечно, в подобных случаях нужно проводить фактчекинг.

А с другой стороны на основании каких источников информации проводить этот самый фактчекинг? Ведь таких, которые сами НЕ основаны на данных, полученных от AI? В противном случае возникнет «замкнутый порочный круг» и «змея, кусающая себя за хвост». Ведь все познается в сравнении и бесполезно сравнивать нечто с собой же: получится не информационное уравнение, которое нужно решить для проверки истинности информации, а тождество, которое по определению задает собой идентичность искомой и заданной информации.

«Тогда мы идем к вам». Т.е. в конце концов, к людям, обладающим независимым мышлением. Хотя, такие люди также могут использовать в настоящее время для своих рассуждений и выводов тот же AI…

P. S.
«»Мы вовсе не хотим завоевывать космос. Мы хотим расширить Землю до его границ… Нам не нужно других миров. Нам нужно зеркало… Человеку нужен человек
(Станислав Лем, «Солярис»)

ссылка на оригинал статьи https://habr.com/ru/articles/1052218/