Что такое LLM для symbolic regression (AI Feynman) и как это работает?

Краткий тезис

Symbolic regression — это задача поиска математической формулы, которая наилучшим образом описывает набор данных. AI Feynman — фреймворк от MIT, который комбинирует нейросетевую аппроксимацию, генетическое программирование и, в расширенной версии, LLM для ускорения поиска. LLM здесь выступает как генератор гипотез: на основе текстового описания задачи модель предлагает вероятные формулы, сужая пространство поиска и делая regression|symbolic regression применимым к более сложным реальным задачам.


1. Термин: Symbolic Regression (символьная регрессия)

Symbolic regression — это метод машинного обучения, который ищет не числовые коэффициенты для заданной структуры (как в обычной регрессии), а саму структуру формулы в виде комбинации математических операций (+, -, *, /, sin, log, exp и т.д.) и констант.

Обычная регрессияSymbolic regression
Задана форма: y = a·x + bФорма неизвестна: y = f(x)
Ищем коэффициенты a, bИщем и структуру, и коэффициенты
Результат — числаРезультат — выражение (дерево)
Быстро, но ограниченоМедленно, но гибко

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


2. Проблема поиска математической формулы

Даже для простой зависимости вроде y = sin(2πx) количество возможных деревьев глубиной 5 с 4 операциями и 2 переменными превышает 10¹². Без эвристик и предварительного знания задача нерешаема за разумное время.

Традиционные подходы:

  • Genetic programming (GP) — эволюция популяции формул (мутации, скрещивание). Медленно сходится, часто застревает в локальных оптимумах.
  • Байесовские методы — требуют априорного распределения на формулы.
  • Нейросетевые подходы — используют RNN или трансформеры для генерации выражений, но требуют много данных.

AI Feynman решает эту проблему, комбинируя несколько методов и используя LLM как «подсказчика».


3. AI Feynman: общая архитектура

AI Feynman (разработан в MIT, назван в честь Ричарда Фейнмана) состоит из четырёх ключевых компонентов:

  1. Нейросеть (MLP) — аппроксимирует функцию по данным.
  2. Модуль извлечения свойств — анализирует производные, симметрии, сепарабельность.
  3. Библиотека операций — набор базовых функций (+, -, *, /, sin, cos, exp, log, sqrt, power).
  4. Генетическое программирование — эволюционный поиск формулы.
  5. LLM (опционально) — генерирует начальные формулы на основе текстового описания задачи.

Работает итеративно: сначала нейросеть учится, затем анализируются упрощения, затем запускается GP, и если результат неудовлетворительный — привлекается LLM.


4. Этап 1: аппроксимация нейросетью

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

import torch
import torch.nn as nn

class SimpleMLP(nn.Module):
    def __init__(self, input_dim=1, hidden=64):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(input_dim, hidden),
            nn.ReLU(),
            nn.Linear(hidden, hidden),
            nn.ReLU(),
            nn.Linear(hidden, 1)
        )
    def forward(self, x):
        return self.net(x)

После обучения нейросеть даёт возможность вычислить частные производные (через autograd) и проверить, не является ли функция сепарабельной, не зависит ли от некоторых переменных и т.д.


5. Этап 2: извлечение упрощённых зависимостей

AI Feynman использует нейросеть для обнаружения структурных свойств:

  • Сепарабельность: если f(x,y) = g(x) + h(y), то задача разбивается на две одномерные.
  • Симметрии: например, f(x) = f(-x) — чётная функция.
  • Монотонность: позволяет заменить переменную.
  • Вычисление производных: если производная по одной переменной константа, то функция линейна по этой переменной.

Эти свойства резко сокращают пространство поиска. Например, если обнаружена сепарабельность, то GP ищет две независимые формулы вместо одной двумерной.


6. Этап 3: генетическое программирование (GP)

Genetic programming — эволюционный алгоритм, где каждая особь — это дерево выражения.

  • Начальная популяция: случайные деревья из библиотеки операций.
  • Фитнес-функция: среднеквадратичная ошибка (MSE) между предсказанием формулы и данными, плюс штраф за сложность (длину выражения).
  • Операторы:
    • Кроссовер: обмен поддеревьями между двумя формулами.
    • Мутация: замена узла на другой, добавление/удаление поддерева.
  • Селекция: турнирный отбор (лучшие особи выживают).

GP работает десятки-сотни поколений. AI Feynman использует библиотеку DEAP или собственную реализацию.


7. Роль LLM: ускорение поиска через текстовое описание

В расширенной версии AI Feynman (иногда называемой LLM-SR) добавляется Large Language Model (например, GPT-4). LLM получает:

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

LLM генерирует кандидатные формулы в виде строк, например: T = 2*pi*sqrt(L/g). Эти формулы парсятся в деревья и добавляются в начальную популяцию GP или используются как «подсказки» для мутации.

Преимущества:

  • LLM использует свои знания физики/математики, чтобы предложить правдоподобные структуры.
  • Значительно сокращает количество поколений GP (с сотен до десятков).
  • Позволяет решать задачи, где данные зашумлены или разрежены.

Ограничения:

  • LLM может ошибаться или генерировать нереалистичные формулы.
  • Зависимость от качества текстового описания.
  • Дополнительные затраты на вызов LLM.

8. Пример работы AI Feynman: закон Ома

Задача: по данным (напряжение U, сила тока I) восстановить формулу U = I * R.

  1. Нейросеть аппроксимирует зависимость, вычисляет производную ∂U/∂I — она оказывается константой. Значит, функция линейна по I.
  2. GP ищет формулу вида U = a*I + b. Быстро находит U = 0.5*I (если R=0.5).
  3. LLM (если используется) по тексту «закон Ома» сразу предлагает U = I*R, что даёт точное решение за одну итерацию.

9. Сравнение AI Feynman с другими методами symbolic regression

МетодПодходСкоростьТочностьТребует текстового описания
EureqaGP + нейросетьСредняяВысокаяНет
PySRGP + мутацииВысокаяВысокаяНет
AI FeynmanНейросеть + GP + LLMВысокая (с LLM)Очень высокаяОпционально
NeSymReSТрансформерыСредняяСредняяНет

AI Feynman выигрывает за счёт комбинации методов и возможности использовать LLM для «интуитивных» подсказок.


10. Ограничения и вызовы

  • Масштабируемость: при большом числе переменных ( > 10 ) нейросеть и GP работают медленно.
  • Зашумлённые данные: производные становятся неточными, сепарабельность трудно обнаружить.
  • Интерпретируемость: хотя формула — это выражение, сложные формулы (с вложенными sin, exp) могут быть неинтерпретируемы.
  • Зависимость от LLM: если описание задачи неполное или вводит в заблуждение, LLM может увести поиск в неверном направлении.
  • Ресурсы: обучение нейросети и вызов LLM требуют вычислительных мощностей.

Пет-проект для закрепления

Задача: Реализовать упрощённую версию AI Feynman для одномерной регрессии (например, восстановить y = sin(2x) + 0.5*x).

Инструменты: Python, PyTorch (нейросеть), DEAP (GP), OpenAI API (LLM, опционально).

Шаги:

  1. Сгенерировать данные: x = np.linspace(0, 2*np.pi, 100), y = np.sin(2x) + 0.5x + noise.
  2. Обучить MLP (2 скрытых слоя по 32 нейрона) аппроксимировать y(x).
  3. Вычислить производную dy/dx через autograd. Если производная не константа, перейти к GP.
  4. Реализовать GP с операциями add, mul, sin, cos, constant. Фитнес = MSE + λ * complexity.
  5. (Опционально) Написать промпт для LLM: «Given data (x, y), suggest a formula of the form y = f(x)». Добавить лучшие предложения в начальную популяцию.
  6. Запустить GP на 50 поколений, выбрать лучшую формулу.
  7. Сравнить результат с истинной формулой.

Ожидаемый результат: программа найдёт выражение, близкое к sin(2*x) + 0.5*x, с MSE < 0.01. Без LLM потребуется больше поколений, с LLM — быстрее.


Связь с другими вопросами

ВопросТема
725Что такое Agentic RAG и как он отличается от обычного RAG?
726Как LLM-агенты принимают решения (ReAct, Plan-and-Solve)?
728Как использовать LLM для генерации кода и формул?
731Какие существуют методы нейросимволического обучения?
732Как LLM помогает в научных открытиях (AI for Science)?
715Что такое fine-tuning и когда он нужен?

Навигация