Repository navigation
Add RealMLP-A, MLP-A, TabM-A and TabICLv2-A (agentic search spaces) - #681
mrsergazinov wants to merge 5 commits into
Conversation
Four models whose stage modules come from agentic-tabular (yandex-research/agentic-hpset, pinned to a commit). The module choice per stage is a categorical hyperparameter next to the base model's own; index 0 in every stage is the base model, so each default config is its base model. - RealMLP-A and TabM-A sample TabArena's RealMLP and TabM search spaces plus the stage indices; MLP-A samples the package's base MLP space plus the indices; TabICLv2-A samples the package's inference recipes over the frozen TabICLv2 (8 members, refit on all training rows as TabICLv2). - Each folder has the AutoGluon wrapper, a seeded 200-config sampler, info.py and _internal/engine.py, which assembles the package's modules on in-memory arrays. - TabArena integration: the fit's time limit stops MLP-A's and TabM-A's training between epochs; MLP-A steps the batch size past a one-row last batch for BatchNorm; TabICLv2-A runs attention in float32; num_cpus sets torch's threads. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Heyho, thanks so much; very cool submissions! This is kind of special and, to some extent, a resubmission of existing models, but also very different. The TabArena team is thinking about how to integrate or accept these submissions. Below, I raise some questions to help with that process.
This is not TabArena's convention. All individual configs must be successful. Why did they fail/diverge? One concern is the differences between the normal models and their agentic versions (like TabICLv2 and RealMLP). The difference might be only noise from using TabArena-Lite. Do you have results for TabArena-Full, e.g., for TabICLv2 and RealMLP (maybe with a smaller budget or just the defaults)? Some other thoughts:
|
|
Hey! Thank you for getting back to us so quickly! Failed configurationsWe (and the agents of course) investigated the failures and found that all of them come from numerical divergence (non-finite loss or predictions).
The likely culprits are high learning rate and low training prevision (bf16), which combined with the agentic modules leads to instabilities during training. We sampled the configurations randomly, so it's sort of expected that this would happen. We see a few options to fix it:
Results on full TabArenaWe do not have TabArena-Full results yet. We agree that some of the gains could be noise. We think we can run TabICLv2-A or RealMLP-A, but full results would take sometime. In the meantime to proceed with the submission to TabArena, would you consider accepting any of the cheaper options:
Tuning for TFMsWe agree that out-of-the-box, it's non-trivial to tune the TFMs: they don't have a pre-defined HP set, nor the guidance on what to touch to make them better. In our case, we have found the following combination to work:
So, possibly with this new recipe, it's a good idea to revisit tuning TFMs. LeakageWe agree that this needs disclosure. TabArena was not the primary benchmark of our paper. The agents only proposed candidate modules: they did not evaluate or score any model on real datasets, and they did not know that the resulting models would be tested on a benchmark. We cannot fully exclude that an LLM proposed a module that exploits a known dataset, so we are happy with a flag on the leaderboard. |
|
Hi again! We ran TabICLv2-A on the full TabArena (all outer train-test splits). We have confirmed that the reported results are most likely not noise from the lite version. TabICLv2-A reaches 1623 Elo vs. 1559 for TabICLv2. Head-to-head, it has a lower error on 39 of 51 datasets. We uploaded these results to HF too: https://huggingface.co/datasets/mrsergazinov/agentic-search-spaces-tabarena-lite. We attach the Elo figures on the full TabArena below.
|
|
Heyho, thanks for the quick replies! A few comments to continue the discussion below.
This would require fixes in the wrapper/model code. We want to ensure that no config breaks or crashes. We guarantee this for our TabM and RealMLP model implementations as well, and we also fixed a bug that caused this for/after BeyondArena. So I would advise first fixing the code so this cannot happen again. Can you replay all the failed configs and fix their crashes? They might need a guard or some dtpye fixes.
Adding these models and their full search config also costs us a significant amount on our side of the submission (I would assume somewhere between 2k-10k$). So the question is whether it's worth adding them. Hence, it would be great to know the results hold up and differ significantly from the existing RealMLP and TabM submissions to avoid duplicate entries. The current risk is mostly that -Lite can be very noisy, as we know from past experiences (like this one: #298) To reduce this risk, I think we can check a few cheaper options, such as:
We can also start by looking into the first three folds. However, as most of the noise comes from the tiny datasets, which need many more folds, it is hard to judge. We sadly don't have a -Core subset for TabArena, only for BeyondArena.
I sadly haven't had time to read your paper fully yet, so to follow up: was it all zero-shot, or did the agents build the search space through some sort of loop based on real-world data? And then how much overlap between this "training" data and TabArena do we expect? I am not too worried about this, but it would be great to know and explore this aspect.
How large is the delta between the default configurations? And where does this delta in the defaults come from? Based on the current results, I am not super convinced that the tuned + ensembled TabICLv2-A would outperform a standard tuned + ensembled TabICLv2. It is all within the CIs of Elo, although the CIs aren't very meaningful here. And as long as the results are very similar, the risk of adding "duplicated" entries to the leaderboard remains a problem. |
The default config (every stage index 0) now uses TabICLv2's ensemble layout (shuffled feature x class permutation pairs, each with both normalizations) and averages logits, so it reproduces TabICLv2. The other recipes are unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A training guard keeps the weights of the epoch with the best validation score and ends training there when a configuration's loss or predictions leave the finite range, instead of the error the package's train modules raise. Regression outputs are clipped to the training targets' range (widened by half its width) before the inverse target transform. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
After training, a model whose validation predictions are not finite goes back to the training guard's best epoch; any prediction that is still not finite is replaced by the training mean (regression) or the training class frequencies. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ed pass n_ens copies of the configured network (own initialization, dropout masks and gradient clipping) are stacked along a member axis and trained together with torch.vmap, as RealMLP's n_ens. Evaluation combines the members (mean for regression, mean probabilities for classification). n_ens=1 (the default) is the previous single network. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>


Summary
This PR adds four models: RealMLP-A, MLP-A, TabM-A and TabICLv2-A. Each model takes the base model then divides it into modules (e.g. numeric embeddings, categorical embeddings, loss, optimizer, etc). For each module, an agent wrote candidate implementations. The candidate choice for each module is a categorical hyperparameter. Index 0 in each module is the base model, so the default config is the base model.
Paper: Agentic Search Spaces for Tabular Machine Learning. Code: yandex-research/agentic-hpset.
Details
Search spaces
n_ens=8.Wrappers
X_val/y_valthat TabArena gives.refit_folds=True). The context is the full training set.Failed configurations
On TabArena-Lite:
Notes
jingang/TabICL, as TabICLv2 does.TABICL_CHUNK_CELL_BUDGET=12000000for it.Tests
ruff checkandruff format --check: pass.pytest -m models -k "RealMLP-A or MLP-A or TabM-A": 9 passed, 3 skipped.pytest -m models -k "TabICLv2-A": 2 passed, 2 skipped. The skipped tests need more than 10 classes.python -m tabarena.tools.sync_pyproject_extras: the four extras agree withinfo.py.Model or system submission
Kind: model (four models: RealMLP-A, MLP-A, TabM-A, TabICLv2-A)
Files
models/<key>/{__init__,model,hpo,info}.py, a lazy entry inmodels/__init__.py, the extra inpackages/tabarena/pyproject.toml(also listed inextended), the family inwebsite/website_format.py. Atests/tabarena/models/smoke_configs.pyoverride only if the toy fit needs it; tests specific to the model inmodels/<key>/tests/(outside CI), never intests/, and no edits to shared test infrastructure.Implementation
_fituses theX_val/y_valthat TabArena passes (no internal cross-validation, hold-out split or tuning on the training data), and the search space inhpo.pysupports about 200 configurations. Variants are search-space parameters, not separate models.time_limit,num_cpus/num_gpusand the seed are wired through; nothing is monkey-patched globally; optional imports stay inside the wrapper; the model pickles for parallel bagging.pip_extraininfo.py; Hugging Face checkpoints pin a revision; maintainers can run it without credentials or gated weights; the license, the paper and documentation links, and the supported problem types are stated.ruff checkandruff format --checkpass. Model:pytest -m models -k <Key>passes.Results (we need these before we re-run the method)
subset="lite") with the official pipeline: the default plus about 25 random HPO configurations where the method has a search space; or the BeyondArenacore2ksubset. The run used the arena's official validation protocol (the default); a run made withofficial_validation_protocol=Falsesays so here and why.expnamefolder with theresults.pklfiles, zipped or as a GitHub / Hugging Face release) so we can verify and integrate the results directly.TabArena-Lite Elo, 51 datasets, default config plus 200 random configs per model:
Results: mrsergazinov/agentic-search-spaces-tabarena-lite (one zip per model,
expnamelayout, with predictions).Hardware: 1 GPU (>= A100 80GB), 8 CPU cores and 96 GB RAM per job.
Command: one job per config and dataset. Each job runs
TabArenaV0pt1ExperimentBundle(models=[(<method>, 200)]).build_experiments(num_cpus=8, memory_limit=90), keeps one config, then runsTabArenaContext().build_and_run_jobs([experiment], subset="lite", build_kwargs={"dataset_names": [<dataset>]}).By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.