Git Product home page Git Product logo

qbm's Introduction

Quantum Boltzmann Machines

The qbm Python package is designed for training and analyzing quantum Boltzmann machines (QBMs) using either a simulation or a D-Wave quantum annealer. The QBM implemented here is based on the work in Quantum Boltzman Machine by Amin et al. [1]. This package originated as part of the thesis Quantum Boltzmann Machines: Applications in Quantitative Finance.

Table of Contents

Installation

The qbm package itself can be installed with

git clone [email protected]:qip/qbm.git
cd qbm
pip install .

Conda Environment

A predefined conda environment is already configured and ready for installation. This can be installed by running

conda env create -f environment.yml

or alternatively, running the conda-create-env.sh script (make sure to properly set the env vars in the script).

Extra dev dependencies can be installed with

conda env update --file environment-dev.yml

Usage

Basic Configuration

The qbm package is mainly configured around the project directory, which can be set with the QBM_PROJECT_DIR environment variable. Once the environment variable is set one can use the qbm.utils.get_project_dir() function to get a path object to the directory.

BQRBM Model

The BQRBM, or bound-based quantum restricted Boltzmann machine, is a quantum Boltzmann machine that has intra-layer restrictions and is trained via maximization of the log-likelihood lower bound. The model currently only has the ability to train in the specific case where s_freeze = 1, i.e., when it reduces to a classical RBM trained with quantum assistance, because estimating the effective inverse temperature is nontrivial for the general case.

All of the arguments to the methods below are further explained in their respective docstrings.

Instantiation

A BQRBM model can be instantiated as (for example)

model = BQRBM(
    V_train,
    n_hidden,
    A_freeze,
    B_freeze,
    beta_initial=1.0,
    simulation_params={"beta": 1.0},
    seed=0,
)

One needs to choose whether or not they want to train a model using a simulation or an annealer, and this is done by passing either simulation_params or annealer_params. Whichever is passed decides how the model is trained.

Training

The model can be trained by running

model.train(
    n_epochs=100,
    learning_rate=1e-1,
    learning_rate_beta=1e-1,
    mini_batch_size=10,
    n_samples=10_000,
    callback=None,
)

Sampling

The model can generate samples by running

model.sample(
    n_samples,
    answer_mode="raw",
    use_gauge=True,
    binary=False,
)

Saving and Loading

The model can be saved with

model.save("/path/to/model.pkl")

and loaded again with

model = BQRBM.load("/path/to/model.pkl")

Example

An example notebook can be found here

References

[1] Mohammad H. Amin et al. “Quantum Boltzmann Machine”. In: Phys. Rev. X 8 (2 May 2018), p. 021050. doi: 10.1103/PhysRevX.8.021050. url: https://link.aps.org/doi/10.1103/PhysRevX.8.021050.

qbm's People

Contributors

cameronperot avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.