オープンソース · Apache-2.0 License

Symbolic Regression

データポイントの集合から DeepSets + LSTM(記号回帰) モデル。数式文字列を直接生成し、フィッティング係数だけを出力するのではありません。66K パラメーター、自己完結ディレクトリでローカル実行が可能で、HuggingFace Hub と完全互換。

このモデルは何を解決するのか?

与えられた N 個のデータポイント(それぞれ D 個の独立変数 x とひとつの従属変数 y を含む)から、データ背後に隠れた関数解析式 f(x)(y ≈ f(x) を満たす)を逆推定します。

経験式の逆引き

物理 / 工学の実験データ → 解釈可能な経験式を自動復元。

ブラックボックス関係の解釈

ブラックボックス関数の関係を調べたい → 解釈可能な数式を獲得。

式の検出と簡約化

異常式検出、式簡約化などのシンボルレベルタスク。

コアな強み

通常の回帰(係数のみ)とは異なる決定的な能力

式を直接生成

sin(x0)*x1 + exp(x0) のような式文字列を出力し、フィッティング係数だけではありません。

置換不変エンコーディング

DeepSets φ→池化→ρ 経路が点集合の置換不変性を保証し、順序なし可変長点集合に対応。

超軽量

約 6.6 万パラメーター、CPU で高速推論可能、一般的なハードウェアで展開可能。

主要指標

モデルの当てはまりは学習サブセットの R² を自己評価の報酬として使用

65,853
総パラメーター数(約 66K)
29
式ボキャブラリー token 数
50
最大生成ステップ(自己回帰)
64
エンコードベクトル z の次元

全体アーキテクチャ

DeepSets エンコーダー + LSTM デコーダー。入力点集合を条件ベクトルにエンコードし、条件付きで式を生成

┌────────────────── DeepSets Encoder ──────────────────┐
│  X [B,N,4] · y [B,N]  ──concat──▶  v [B,N,5]        │
│       │                                              │
│     φ network (shared per point):                    │
│       Linear 5→128  ReLU  Linear 128→128  ReLU       │
│       Linear 128→64  ReLU  → h [B,N,64]              │
│       │                                              │
│     pooling: mean + max  → [B,128]                   │
│       │                                              │
│     ρ network (set-level):                           │
│       Linear 128→64  ReLU  Linear 64→64  → z [B,64]  │
└───────────────────────┬──────────────────────────────┘
                        │  h0 = z, c0 = z
┌───────────────────────▼──────────────────────────────┐
│  LSTM Decoder:                                       │
│   → Embedding(29→32)                            │
│        → LSTM(hidden=64)                            │
│        → Linear(64→29) → logits                     │
│        → argmax / temperature sample                │
│        → decode  ▶  sin(x0)*x1 + exp(x0)            │
└──────────────────────────────────────────────────────┘

DeepSets エンコーダー

  • 入力と目標を [x|y] の5次元ベクトルに連結
  • 逐点共有重み MLP φ(置換不変の鍵)
  • mean + max の二重プーリング
  • 集合レベル MLP ρ が条件ベクトル z を出力

LSTM デコーダー

  • z で初期状態 h₀ と記憶 c₀ を初期化
  • 29 → 32 次元の token 埋め込み
  • 単層 LSTM、64 次元の隠れ状態で段階的に推進
  • 線形投影でボキャブラリーへ、貪欲 / 温度サンプリングで生成

LSTM ゲート機構

PyTorch では LSTM の重みが2つの大きな行列(4ゲート連結)にまとめられ、各タイムステップでゲートによりメモリと隠れ状態を更新します

ゲート 数式 役割
入力ゲート i it = σ(Wiiet + bii + Whiht-1 + bhi) 新しい情報の書き込み量を決める
忘却ゲート f ft = σ(Wifet + bif + Whfht-1 + bhf) 古い記憶の保持量を決める
候補記憶 c̃ c̃t = tanh(Wiget + big + Whght-1 + bhg) 新しい候補値を生成する
出力ゲート o ot = σ(Wioet + bio + Whoht-1 + bho) 出力量を決める
記憶更新 c ct = ft ⊙ ct-1 + it ⊙ c̃t 新旧の記憶を融合する
隠れ状態 h ht = ot ⊙ tanh(ct) 最終的な隠れ状態出力

復号戦略(生成時)

自己回帰ループ:Embedding → LSTM → Linear、<EOS> 生成まで、または T_max=50 ステップまで

貪欲復号

x*t = arg maxk ℓt,k

各ステップで確率最大のトークンを選ぶ、決定性が高く再現可能。

温度サンプリング

p(k) = softmax(ℓt / τ)k

softmax(logits/τ) からサンプリングし、より多様な式を探索、多様な候補生成に適する。

温度 τ の影響

τ < 1 → より決定的 τ > 1 → よりランダム / 探索的

低 τ はより決定的・反復的、高 τ はよりランダム・探索的で多様性に寄与。

パラメーター規模

エンコーダー 37,952 + デコーダー 27,901 = 総計 65,853 パラメーター(約 66K)

エンコーダー合計 デコーダー合計 モデル総計
φ networkEmbedding 29×3265,853
pooling (mean+max)LSTM (input & hidden gates)(约 66K)
ρ networkoutput projection

式ボキャブラリー(29 token)

数字は桁ごとに展開、変数は <VAR> に統一、括弧 / 演算子 / 単目関数 / 定数 / 数字を含む

( ) { parens } <PAD> <SOS> <EOS> <VAR> + - * / ^ sin cos tan exp log sqrt pi e 0 1 2 3 4 5 6 7 8 9

自己完結パッケージ

フォルダ全体を取得すれば、親プロジェクトのファイル不要で推論と自己学習を実行可能

HuggingFace スタイルのファイル

huggingface/
├── configuration_symbolic_regression.py  配置类
├── tokenization_symbolic_regression.py   分词器
├── modeling_symbolic_regression.py       模型
├── hf_symbolic_regression/               内置权重(约270KB)
│   ├── config.json
│   ├── pytorch_model.bin
│   └── tokenizer.json
├── data_generator.py                     随机表达式生成器
├── self_train.py                         自我训练算法
└── run_hf_self_train.py                  demo + selftrain 入口

PyTorch のみで実行可能

  • ローカル HF 重みを内蔵(約270KB)、オフラインで直接ロード
  • ランダム式生成器 + 自己学習アルゴリズムのスクリプト完備
  • demo(推論)+ selftrain(自己学習)の2つのエントリ
  • HuggingFace Hub への公開と完全互換
  • 任意の作業ディレクトリから実行可能(sys.path 自己誘導)

Python API の例

transformers と同様の使い方:from_pretrained + generate で点集合から式を生成

from modeling_symbolic_regression import SymbolicRegressionModel
from tokenization_symbolic_regression import SymbolicRegressionTokenizer

tok = SymbolicRegressionTokenizer()
model = SymbolicRegressionModel.from_pretrained(
    "hf_symbolic_regression", tokenizer=tok)

X = torch.randn(1, N, D_MAX)    # 自变量点集 [B,N,4]
y = torch.randn(1, N)           # 因变量    [B,N]
exprs = model.generate(X, y, n_samples)
print(tok.decode(exprs[0].tolist()))
# ▶ 输出 sin(x0)*x1 + exp(x0)

クイックスタート

自己完結ディレクトリ、外部の親プロジェクト依存なし。PyTorch のみで推論と自己学習が可能

推論 demo の実行

$ cd huggingface
$ python run_hf_self_train.py demo

ユーザーデータでの自己学習

$ cd huggingface
$ python run_hf_self_train.py selftrain \
    --x "0.1,0.6,1.1,1.6,2.1,2.6,3.0" \
    --y "0.60,1.07,1.34,1.40,1.27,0.96,0.64" \
    --rounds 15 --candidates 96

ユーザーデータでの自己学習

自分の (X, y) を提供するだけで、式の正解は不要。プログラムが全パイプラインを自動実行

学習 / テストサブセットに分割(デフォルト 7:3)

温度 + 初期状態ノイズで候補式をサンプリング生成

学習サブセットの R² を自己評価の報酬として使用

高 R² 候補を疑似ラベルとして微調整 + REINFORCE 更新

エリート保留とロールバック、履歴最良をラウンド横断で保持

テスト R² > 0.995 または数ラウンド改善なしで早期停止

既知の制限

事前学習は深い式を偏愛し、単純な目標のカバレッジが不十分、自己学習で補完

まれに括弧不一致や未定義域の式を出力、自己評価でフィルタリング

変数数は 4(D_MAX)まで、それ以上は設定拡張と再学習が必要

ライセンス

Apache License 2.0。研究・学習・商用(閉源商用含む)利用を許可し、自由な改変と再配布を認めます。

Apache-2.0

記号回帰を今すぐ体験

Hugging Face で完全なモデルとコードを入手するか、技術相談についてはお問い合わせください。