データポイントの集合から DeepSets + LSTM(記号回帰) モデル。数式文字列を直接生成し、フィッティング係数だけを出力するのではありません。66K パラメーター、自己完結ディレクトリでローカル実行が可能で、HuggingFace Hub と完全互換。
与えられた N 個のデータポイント(それぞれ D 個の独立変数 x とひとつの従属変数 y を含む)から、データ背後に隠れた関数解析式 f(x)(y ≈ f(x) を満たす)を逆推定します。
物理 / 工学の実験データ → 解釈可能な経験式を自動復元。
ブラックボックス関数の関係を調べたい → 解釈可能な数式を獲得。
異常式検出、式簡約化などのシンボルレベルタスク。
通常の回帰(係数のみ)とは異なる決定的な能力
sin(x0)*x1 + exp(x0) のような式文字列を出力し、フィッティング係数だけではありません。
DeepSets φ→池化→ρ 経路が点集合の置換不変性を保証し、順序なし可変長点集合に対応。
約 6.6 万パラメーター、CPU で高速推論可能、一般的なハードウェアで展開可能。
モデルの当てはまりは学習サブセットの R² を自己評価の報酬として使用
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) │
└──────────────────────────────────────────────────────┘
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/τ) からサンプリングし、より多様な式を探索、多様な候補生成に適する。
低 τ はより決定的・反復的、高 τ はよりランダム・探索的で多様性に寄与。
エンコーダー 37,952 + デコーダー 27,901 = 総計 65,853 パラメーター(約 66K)
| エンコーダー合計 | デコーダー合計 | モデル総計 |
|---|---|---|
| φ network | Embedding 29×32 | 65,853 |
| pooling (mean+max) | LSTM (input & hidden gates) | (约 66K) |
| ρ network | output projection |
数字は桁ごとに展開、変数は <VAR> に統一、括弧 / 演算子 / 単目関数 / 定数 / 数字を含む
フォルダ全体を取得すれば、親プロジェクトのファイル不要で推論と自己学習を実行可能
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 入口
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 のみで推論と自己学習が可能
$ 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) を提供するだけで、式の正解は不要。プログラムが全パイプラインを自動実行
事前学習は深い式を偏愛し、単純な目標のカバレッジが不十分、自己学習で補完
まれに括弧不一致や未定義域の式を出力、自己評価でフィルタリング
変数数は 4(D_MAX)まで、それ以上は設定拡張と再学習が必要
Apache License 2.0。研究・学習・商用(閉源商用含む)利用を許可し、自由な改変と再配布を認めます。