Skip to main content

A package for learning basis functions over arbitrary function sets. This allows even high-dimensional problems to be solved via a minimal number of basis functions. This allows for zero-shot transfer within these spaces, and also a mechanism for fully informative function representation via the coefficients of the basis functions. Hilbert spaces are nifty.

Project description

Function Encoder

A function encoder learns basis functions/vectors over arbitrary Hilbert spaces. This allows for zero-shot transfer within this learned by space by using a weighted combination of the basis functions to approximate any function in the space. The coefficients can be calculated quickly from a small amount of data, either using an inner product or the least squares method. The basis functions are learned from data as a neural network, which allows them to scale to high-dimensional function spaces. Furthermore, since the number of basis functions is fixed, this yields a fixed-size representation of the function which can be used for downstream tasks.

See the original paper for a mathematical introduction or the blog for an intuitive explanation of function encoders.

Installation

For the latest stable release:

pip install FunctionEncoder

For the latest version:

pip install git+https://github.com/tyler-ingebrand/FunctionEncoder.git

Examples

Each of the following examples can be found in the Examples/ directory. These examples illustrate the basis use of this repo and algorithm, but are by no means the extent of its applications or scalability.

Euclidean Vectors

This algorithm can be applied to any Hilbert space. To visualize what this algorithm looks like, we can apply it to Euclidean vectors. Watch as the basis vectors (black) converge to the Hilbert space being fit (blue square).

https://github.com/tyler-ingebrand/FunctionEncoder/assets/105821676/174ddf15-de2d-44dc-b7fe-6b5fad831a4b

Quadratics

A figure showing approximations over quadratics.

In the figure above, each panel shows a quadratic function (blue) and its function encoder approximation (orange). Small amounts of data are taken from each quadratic function, and used to compute a representation by taking the Monte Carlo approximation of the inner product between the function and basis functions. Then, the function is approximated as a weighted combination of basis functions. As you can see, a single set of learned basis functions is able to reproduce all nine of these quadratics accurately.

The basis functions look like this:

A figure showing the basis functions

Distributions

As distributions are also Hilbert spaces, we can apply the exact same algorithm. The only difference is the definition of the inner product. The black dots below are example data points, and the red area indicates the approximated probability density function. Just like in the quadratic example, the same basis functions are able to approximate the pdfs of all of these distributions.

A figure showing Gaussian donuts

Related Papers

Citation

If you use this repo for research, please cite

@article{Ingebrand2024,
  author       = {Tyler Ingebrand and
                  Amy Zhang and
                  Ufuk Topcu},
  title        = {Zero-Shot Reinforcement Learning via Function Encoders},
  booktitle    = {{ICML}},
  year         = {2024},
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

functionencoder-0.1.0.tar.gz (21.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

FunctionEncoder-0.1.0-py3-none-any.whl (32.3 kB view details)

Uploaded Python 3

File details

Details for the file functionencoder-0.1.0.tar.gz.

File metadata

  • Download URL: functionencoder-0.1.0.tar.gz
  • Upload date:
  • Size: 21.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for functionencoder-0.1.0.tar.gz
Algorithm Hash digest
SHA256 adb17969d3be448fd5bd58de6d1928b74e6769569e008327454f2071329b6305
MD5 41b531bc79e275a847fb0b3abc3fc2ae
BLAKE2b-256 3815845143faa4112c5da9ba46b6e98bb20571e3e91af30770f2592e953101ce

See more details on using hashes here.

File details

Details for the file FunctionEncoder-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for FunctionEncoder-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1e82b443476044091e4261fce9fc9b1b148e2a2e123aaf8b1776ba504b36385a
MD5 fa9f1b488b4f7426b0e9e7e3e4873d6e
BLAKE2b-256 bca69ec2f109a2b9f1b1dfd5104e6547846ba5e84be98cbacd12a50b6c5c6d07

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page