← Back to all sparks
B

brulee

ANALYTICS
Velocity0.0

High-Level Modeling Functions with torch. Contribute to tidymodels/brulee development by creating an account on GitHub.

tidymodels' torch backend grew from MLPs into a tabular deep learning suite with foundation models.

deep-learningtabular-modelstorchtidymodelsfoundation-modelsgpu
Current state
brulee fits neural networks for tidymodels on torch, and 1.0.0 redefined what that means: alongside the original MLP it now ships Regularization Learning Networks, ResNet with skip connections and batch normalization, AutoInt with columnwise attention, SAINT with row and column attention, and Chronos2, a foundational forecasting model. GPU acceleration arrived in the same release with automatic CUDA selection and opt-in MPS. Version 1.1.0 added TabICL, an open-source tabular foundation model, and 1.1.1 spent its time cleaning up the consequences of shipping models that need weight downloads.
Where it's heading
The package has crossed from a torch convenience wrapper into a catalog of current tabular architectures, and the recent releases show it absorbing what that costs. Pretrained weights meant a 400MB download, so 1.1.1 stopped fetching them on attach and moved the cache to the platform-appropriate R_user_dir location. Numerical robustness is the other constant thread — 64-bit tensors, Gaussian initialization, gradient clipping extended architecture by architecture, and a ResNet batch-normalization bug where a single-row trailing batch produced all-NA predictions.
Prediction
Gradient clipping has been rolled out one architecture at a time and TabICL is the newest arrival, so the likely next step is bringing the foundation models to parity with the trained ones on device selection, prediction types, and the tuning surface.

Recent moves

  1. 1mo ago

    Model weights no longer download on package attach

    brulee_tab_icl() and brulee_chronos() stop pulling pretrained weights automatically when the package loads, prompting in interactive sessions and erroring otherwise, with tab_icl_download_weights() for explicit fetches. Caching moves to tools::R_user_dir(). Also fixes brulee_resnet() returning all-NA predictions when a trailing single-row batch made batch normalization compute variance over one sample.

    View source ↗
  2. 1mo ago

    TabICL foundation model added, gradient clipping extended

    Adds brulee_tab_icl() for the open-source TabICL foundational model, extending the foundation-model surface 1.0.0 opened with Chronos2. Gradient clipping reaches brulee_saint() and brulee_auto_int(), matching the MLP and ResNet defaults, and predict.brulee_chronos() gains a type argument to return point predictions, quantiles, or both.

    View source ↗
  3. 1mo ago

    Five new architectures and GPU support arrive at 1.0.0

    ⚡ SPARK

    The release that changes what brulee is: Regularization Learning Networks, ResNet, AutoInt, SAINT, and the Chronos2 forecasting foundation model, plus GPU acceleration across every modeling function. A torch wrapper for MLPs becomes a catalog of contemporary tabular architectures in one version.

    View source ↗
  4. 11mo ago

    64-bit tensors and new optimizers to stop loss overflow

    A concerted attack on numerical overflow: tensors move to 64-bit floats, starting values switch to a narrower Gaussian, initial results are retained as a fallback when the first epoch overflows, and brulee_mlp() gains gradient clipping parameters. Adds ADAMw, Adadelta, Adagrad, and RMSprop optimizers, with the mixture parameter restricted for those requiring L2 penalties.

    View source ↗
  5. 1y ago

    Numerical overflow unit test removed

    Drops a unit test for numerical overflow that had become hard to reproduce as the condition grew rarer. Indirect evidence that the 0.6.0 stability work held.

    View source ↗
  6. 1y ago

    brulee_mlp_two_layer() convenience wrapper for parsnip

    Adds brulee_mlp_two_layer() so two-layer networks are straightforward to fit through parsnip, alongside error and warning message cleanup and a fix for linear activation. Small, and typical of the pre-1.0.0 period when the package was still a single-architecture wrapper.

    View source ↗