Meta AI Announces the Beta Release of ‘Bean Machine’: A PyTorch-Based Probabilistic Programming System Used to Understand the Uncertainty in the Machine Learning Models

Meta AI releases the beta version of Bean Machine, a probabilistic programming framework based on PyTorch that makes it simple to describe and learn about uncertainty in machine learning models used in various applications. Bean Machine makes it possible to create probabilistic models that are domain-specific. It also uses multiple autonomous, uncertainty-aware learning algorithms to learn about the model’s unseen features. Bean Machine gets an early beta version from Meta.

What is unique about probabilistic modeling?

  • Estimation of uncertainty:

Probability distributions are used to quantify predictions using reliable measurements of uncertainty. It is feasible to understand the relative likelihood of other alternative predictions using such distributions.

  • Expressivity:

It is possible to encode a complex model in source code explicitly. This helps one fit the model’s structure to the problem’s structure.

  • Interpretability:

Since the model fits the domain, intermediate learning properties within the model can be queried. This provides consumers with a clear understanding of why a specific prediction was made and how it might help develop the model.

Bean Machine has been built within the PyTorch ecosystem with a declarative mindset in mind. A declarative language allows data scientists and machine learning engineers to write out their model’s math in Python directly. Bean Machine can now conduct the actual lifting of inferring probable distributions for predictions based on this model declaration. Working with it will be intuitive and straightforward as a result of this.

Steps involved in probabilistic modeling:

  • Modeling
  • Handling Data
  • Learning
  • Analysis


The concept of a “generative model” is central to Bean Machine’s modeling. A generative model is a domain-specific probabilistic model. Such a model specifies the underlying model for a study area before any data has been collected. A Gaussian mixture model can be used to explain Bean Machine’s syntax.

Some features to be taken into account are:

  • Bean Machine’s style is declarative. This means that every random quantity in the model corresponds to a random variable decorated Python function declaration that returns a distribution.
  • Although Bean Machine uses a declarative language, a random variable function can contain any Python code, including stochastic control flow.
  • Parameters are used to specify the logical identity of random variable functions.
  • The model is entirely generative. This indicates that the model has no concept of data or observations. This pattern is a crucial feature that allows Bean Machine to support a wide range of prediction and diagnostic procedures efficiently.


Data is stored in Python dictionaries linked to random variables in a given model. The model captures a hypothesis about a generative process. The syntax of Bean Machine makes it simple to “bind” observable data to specific random variables. Following that, the obtained inference can be utilized to sample other random variables that are consistent with the data. Binding data to any set of random variables unlocks the power of generative models. This can be used to investigate the hypothesis space further.


Learning is the process of gaining new information through observation. Learning is known as “inference” in the probabilistic environment, and it consists of constructing distributions for variables of interest known as “queried variables.”

Bean Machine can be configured to compute the distributions for the queries using the observations. Bean Machine returns empirical distributions that are a collection of samples that constitute a distribution rather than closed-form parametric statistical distributions.

The variable samples now have values corresponding to query distributions. Using an inference process known as Compositional Inference, they are consistent with the presented observations. Compositional Inference is a strong abstraction that can be thought of as a versatile inference method suitable for a wide range of models. It includes discrete random variables, stochastic control flow, and high dimensionality.


Each search has a value in samples, a complex DataFrame-like object that depicts the distribution. It may be indexed using the same simple syntax to bind observations and specify queries.


To provide correct inference findings rapidly, probabilistic Inference for continuous variables relies exclusively on gradient information. However, gradient information is not provided for discrete random variables.

How is this problem tackled?

Bean Machine has an extensive library of inference methods to choose from. The Compositional Inference approach, in particular, is capable of combining and composing various ways as needed for the task at hand.

Bean Machine uses Compositional Inference to choose the best inference methods for each random variable automatically. Compositional Inference has a lot of power by default, but it’s typically better to have more precise control over the inference technique.


Bean Machine samples a value for a random variable iteratively based on the assignments of other random variables on the inside. It then moves on to the following random variable and repeats the procedure. This modularity makes it possible to create models with complex structures and site-specific inference methods without worrying about the technical specifics of how the Inference is made.

Several random variables are tightly connected in many models. On the other hand, models frequently wish to use data from several places. Using correlation information during Inference in these situations can assist reduce the number of samples required for your model to converge to the proper findings. Another modular feature provided by Bean Machine allows you to use correlations in your model. This tool is referred to as Multi-site Inference.


When sampling new values for a random variable, one of the benefits of single-site Inference is that it allows Bean Machine to deal with a small subcomponent of your model. This attribute benefits operations that don’t scale well with the model’s size.

Furthermore, the BeanMachine research team is building inference algorithms that leverage 2nd-order gradient information. To use 2nd-order gradients, Bean Machine includes the Newtonian Monte Carlo (NMC) inference method.

For tensorized models, Bean Machine provides good inference performance. On the other hand, many probabilistic models have a complex or sparse structure that is challenging to express using only a few massive tensor operations. The researchers are developing a bean Machine Graph (BMG) Inference to overcome this issue. BMG combines a specialized compiler and a fast, independent runtime that is optimized to conduct Inference even for un-tensorized models.


The interface for BMG Inference is nearly identical to that of other Bean Machine inference methods. The goal is to make it simple to use with your modeling code right away. BMGInference interprets the Bean Machine model and converts it to a specific implementation with no Python dependencies using a custom compiler.

BeanMachine is still a hot topic in scientific circles. When appropriate, the researchers encourage feedback and pull requests along the route.